Data Scientist 옌

매일 발전하는 IT문제해결사

국비지원교육 (22.01-22.07)/강의노트

22-02-28(월) 023일차 [Java] HashMap, 입출력(IO)

옌炎 2022. 5. 9. 11:15
728x90

수업내용


1교시 (09:30-10:20)

  • Exam_HashMap_2
package a.b.c.ch6;

import java.util.HashMap;
import java.util.Iterator;

public class Exam_HashMap_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		HashMap<String, String> hm = new HashMap<String, String>();
		hm.put("이름", "홍길동");
		hm.put("나이", "30");
		hm.put("주소", "서울시 송파구");
		String name= hm.get("이름");
		String age = hm.get("나이");
		String addr = hm.get("주소");
		System.out.println("name >>> : " + name);
		System.out.println("age >>> : " + age);
		System.out.println("addr >>> : " + addr);
		System.out.println("\n#########################\n");
		System.out.println("hm.keySet() >>> : " + hm.keySet());
		System.out.println("hm.values() >>> : " + hm.values());
		System.out.println("hm.entrySet() >>> : " + hm.entrySet());
		System.out.println("\n#########################\n");
		
		/*
			hm.keySet() : 이름, 나이, 주소가 배열로 있음
			.iterator() : hm.keySet() 함수에서 리턴한 [이름, 나이, 주소] 데이터를
						  Iterator keys 참조변수에 대입한다.
						  			다른 말로 Iterator keys 참조 변수가
						  hm.keySet() 함수에서 리턴한 [이름, 나이, 주소] 데이터를 가리킨다.
		*/
		// Iterator 이터레이터 : 자료를 순차적으로 접근할 수 있도록 처리하는 객체 : 반복자
		Iterator keys = hm.keySet().iterator();
		
		// Iterator 참조변수 keys를 이용해서 이터레이터에 들어있는 데이터를 hasNext() 함수로 확인한다.
		while (keys.hasNext()) {
			String key = (String)keys.next();
			String value = "";
			
			if ("이름".equals(key)) {
				value = (String)hm.get(key);
			}
			if ("나이".equals(key)) {
				value = (String)hm.get(key);
			}
			if ("주소".equals(key)) {
				value = (String)hm.get(key);
			}
			System.out.println(key + " : " + value);
		}			
	}
}

2교시 (10:30-11:20)

  • Exam_HashMap_2
package a.b.c.ch6;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

public class Exam_HashMap_3 {

	public ArrayList<HashMap<String, String>> hashMapGeneric() {
		
		HashMap<String, String> hm0 = new HashMap<String, String>();
		hm0.put("이름", "김건호");
		hm0.put("나이", "27");
		hm0.put("주소", "부천시 춘의동");
		
		HashMap<String, String> hm1 = new HashMap<String, String>();
		hm1.put("이름", "신지현");
		hm1.put("나이", "26");
		hm1.put("주소", "서울시 금천구");
		
		HashMap<String, String> hm2 = new HashMap<String, String>();
		hm2.put("이름", "민현호");
		hm2.put("나이", "27");
		hm2.put("주소", "서울시 양천구");
		
		ArrayList<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();
		aList.add(hm0);
		aList.add(hm1);
		aList.add(hm2);
		
		return aList;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Exam_HashMap_3 ex3 = new Exam_HashMap_3();
		
		ArrayList<HashMap<String, String>> aList1 = ex3.hashMapGeneric();
		System.out.println("aList1.size() >>> : " + aList1.size());
		
		for (int i=0; i < aList1.size(); i++) {
			HashMap<String, String> hm = aList1.get(i);
			
			Iterator<String> keys = hm.keySet().iterator();
			
			// Iterator 참조변수 keys를 이용해서 이터레이터에 들어있는 데이터를 hasNext() 함수로 확인한다.
			while (keys.hasNext()) {
				String key = keys.next();
				String value = "";
				
				if ("이름".equals(key)) {
					value = hm.get(key);
				}
				if ("나이".equals(key)) {
					value = hm.get(key);
				}
				if ("주소".equals(key)) {
					value = hm.get(key);
				}
//				if ("이름".equals(key) || "나이".equals(key) || "주소".equals(key)) {
//					value = hm.get(key);
//				}
				System.out.println(key + " : " + value);
			}
		}
	}
}
  • [교재 511p] 자바 입출력 - 수정 필요
자바

1. 키워드
	package import
	class interface abstract
	public protected private
	static new
	void return
	final
	byte char short int

2. 연산자
	+ - * / = < > == != && || ++ += () !

3. 식별자
	클래스 이름 : 대문자로 시작
	함수 이름 : 소문자 시작
	변수 이름 : 소문자로 시작

4. 빌트인 클래스 자원 API
	java.lang.* 자바 기본 클래스 : 문자, 숫자, 시스템 관련 클래스 : coreJava
		java.lang.Object
		java.lang.System
		java.lang.String
		java.lang.Integer
		java.lang.Double
		java.lang.Math
		java.lang.StringBuffer
		java.lang.reflect.Method
		java.lang.Class
		java.lang.Thread
		java.lang.Throwable
		java.lang.Exception

	java.util.* 날짜, 데이터 다루는 클래스
		java.util.Date
		java.util.Calendar
		java.util.HashMap
		java.util.UUID
		java.util.Random
		java.util.Scanner
		java.util.StringTokenizer
		java.util.Iterator

	java.io.*

	java.text.* 날짜 포맷
		java.text.SimpleDataFormat
	
	java.math.*
		java.math.BigDecimal

3교시 (11:30-12:20)

  • Exam_IOTest
package a.b.c.ch6;

import java.util.Scanner;

public class Exam_IOTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		System.out.println("IO 테스트 숫자 : ");
		Scanner sc = new Scanner(System.in);
		int data = sc.nextInt();
		System.out.println("data >>> : " + data);
		System.out.println("binary >>> : " + Integer.toBinaryString(data));
		
		System.out.println("IO 테스트 문자 : ");
		Scanner sc1 = new Scanner(System.in);
		String dataS = sc1.nextLine();
		
		System.out.println("문자 >>> : " + dataS);
		
		for (int i=0; i <dataS.length(); i++) {
			char c = dataS.charAt(i);
			System.out.println("binary >>> : "
								+ " : " + c
								+ " : " + (byte)c
								+ " : " + Integer.toBinaryString((byte)c));
		}
		
		sc.close();
		sc1.close();
	}
}

4교시 (12:30-13:20)

  • Exam_IOTest_1
package a.b.c.ch6;

import java.io.FileInputStream;

public class Exam_IOTest_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
			파일, 디렉토리 구분자
			윈도우 \
			이클립스 \\
			유닉스, 리눅스 /
		*/
		// 절대 경로 : 파일이 있는 위치에서 그 디렉토리의 루트부터 읽어오는 경로
		String filePath = "C:\\00.KOSMO108\\10.JExam\\eclipse_java_work\\firstProject\\src\\a\\b\\c\\ch6";
		String file = "Exam_IOTest_1.java";
		
		try {
			FileInputStream fis  = new FileInputStream(filePath + "\\" + file);
			System.out.println("fis >>> : " + fis);
			
			// public int read() throws IOException
			int data = fis.read();
			System.out.println("data >>> : " + data);
			System.out.println("(byte)data >>> : " + (byte)data);
			System.out.println("(char)data >>> : " + (char)data);
			
			while ((data = fis.read()) != -1) {
				System.out.println(data + " : " + (char)data);
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			System.out.println("에러가 >>> : " + e.getMessage());
		}
	}
}

5교시 (14:30-15:20)

  • Exam_IOTest_2
package a.b.c.ch6;

import java.io.FileInputStream;

public class Exam_IOTest_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
			파일, 디렉토리 구분자
			윈도우 \
			이클립스 \\
			유닉스, 리눅스 /
		 */
		// 절대 경로 : 파일이 있는 위치에서 그 디렉토리의 루트부터 읽어오는 경로
		String filePath = "C:\\00.KOSMO108\\10.JExam\\eclipse_java_work\\firstProject\\src\\a\\b\\c\\ch6";
		String file = "Exam_IOTest_1.java";
		
		try {
			FileInputStream fis = new FileInputStream(filePath + "/" + file);
			System.out.println("fis >>> : " + fis);
			
			// public int read() throws IOException
			int data= 0;
			while ((data = fis.read()) != -1) {
				System.out.print((char)data);
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			System.out.println("에러가 >>> : " + e.getMessage());
		}
	}
}
  • Exam_IOTest_3
package a.b.c.ch6;

import java.io.FileInputStream;
import java.io.FileOutputStream;abstract

public class Exam_IOTest_3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		파일, 디렉토리 구분자 
		윈도우 \  
		이클립스 \\
		유닉스, 리눅스 /  
		*/
		// 절대 경로 :  파일이 있는 위치에서 그 디렉토리의 루트 부터 읽어오는 경로 
		String filePath = "C:\\00.KOSMO108\\10.JExam\\eclipse_java_work\\firstProject\\src\\a\\b\\c\\ch6";
		filePath = filePath.replace('\\', '/');
		
		try {
			FileInputStream fis = new FileInputStream(filePath + "/" + "Exam_IOTest_3.java");
			System.out.println("fis >>> : " + fis);
			
			FileOutputStream fos = new FileOutputStream(filePath + "/" + "Exam_IOTest_3.java");
			System.out.println("fos >>> : " + fos);
			
			// public int read() throws IOException
			int data = 0;
			while ((data = fis.read()) != -1) {
				System.out.print((char)data);
				fos.write(data);
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			System.out.println("에러가 >>> : " + e.getMessage());
		}
	}
}

6교시 (15:30-16:20)

  • FilePath
package a.b.c.common;

public abstract class FilePath {

	// 상수
	public static final String FILE_PATH_CH6 = "C:/00.KOSMO108/10.JExam/eclipse_java_work/firstProject/src/a/b/c/ch6";
}
  • Exam_FileInputStream
package a.b.c.ch6;

import java.io.File;
import java.io.FileInputStream;

import a.b.c.common.FilePath;

/*
	자바 프로그램에서는 메모르 관리를 하지 않는다.
	소스에서 개발자가 메모리를 지우는 행위를 할 수 없다.
	자바에서 메모리를 지우는 역할을 담당하는 것은 가비지 컬렉터라고 한다.
	자바에서 메모리를 지운다는 것은 가비지 컬렉터에게 요청하는 것과 같은 뜻이다.
	프로그램 입장에서는 메모리가 언제 지워지는지 알 수 없다.
*/

/*
	자바에는 null 키워드가 있다.
	null 키워드가 의미하는 것은 데이터를 가리키지 않는다.
	나는 현재 이 참조변수에 데이터가 없다.
*/

public class Exam_FileInputStream {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		/*
			지역변수 사용하는 방법
			
			1. 지역변수는 함수에서 태어나서 함수에서 죽는다.
				단 : 죽이는 것은 GC(가비지 컬렉터)가 한다.
			2. 지역변수는 죽으라고 명령을 할 수가 없다.
			3. 지역변수는 가비지 컬렉터가 그 프로그램의 메모리 상황을 보고
			4. 프로그램의 우선순위도 보고 스케줄링에 의해서 메모리에서 제거된다.
		*/
		
		/*
			지역변수를 사용하는 규칙
			
			1. 지역변수는 선언과 동시에 디폴트 값으로 초기화한다.
				객체 참조변수 = null;
				기초자료형 지역변수 = 디폴트값; 0, 0.0, '\u0000', false
				String s= "";
				String s1 = null;
			2. 통신 관련, I/O가 발생하는 객체는 사용한 후
				flush(), close(), null 처리를 해야 한다.
				
				예) FileInputStream fis = null; // null 초기화
				   // 객체 오픈
				   fis = new FileInputStream(filePath + "/" + file);
				   
				   // 객체 닫기
				   fis.close();
				   // 사용을 다한 객체 null 초기화
				   fis = null;
		*/
		
		// 지역변수, 객체, 참조변수
		// 객체 null 초기화
		FileInputStream fis = null;
		
		try {
			String filePath = FilePath.FILE_PATH_CH6;
			filePath = filePath + "/" + "Exam_FileInputStream.java";
			System.out.println("filePath >>> : " + filePath);
			
			File f = new File(filePath);
			
			boolean bFile = f.exists();
			System.out.println("bFile >>> : " + bFile);
			
			if (bFile) {
				fis = new FileInputStream(f);
				System.out.println("fis >>> : " + fis);
				
				// public int read() throws IOException
				int data = 0;
				while ((data = fis.read()) != -1) {
					System.out.print((char)data);
				}
				
				// 정상적으로 수행되었을 때 수행되는 루틴
				// FileInputStream I/O 객체를 닫는다.
				fis.close();
			} else {
				System.out.println("파일이 없습니다. >>> : ");
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			System.out.println("에러가 >>> : " + e.getMessage());
			
		} finally {
			
			if (fis != null) {
				try {
					fis.close(); fis=null;
				} catch (Exception e) {}
			}
		}
	}
}

7교시 (16:30-17:20)

  • Exam_FileOutputStream
package a.b.c.ch6;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import a.b.c.common.FilePath;

public class Exam_FileOUtputStream {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 파일 패스 공통클래스에서 불러오기
		String filePath = FilePath.FILE_PATH_CH6;
		
		// 파일 패스 및 사용할 파일 명까지 초기화
		String inFile = filePath + "/" + "Exam_FileOutputStream.java";
		String outFile = filePath + "/" + "Exam_FileOutputStream.bak";
		
		// 지역변수 디폴트 값으로 초기화
		FileInputStream fis = null;
		FileOutputStream fos = null;
		File f = null;
		int data = 0;
		boolean bFile = false;
		
		try {
			
			f = new File(filePath);
			
			// 파일이 있는지 여부 체크하는 boolean
			bFile = f.exists();
			System.out.println("bFile >>> : " + bFile);
			
			// 파일이 있을 때만 수행한다.
			if (bFile) {
				
				// 파일을 읽기 위해서
				fis = new FileInputStream(inFile);
				System.out.println("fis >>> : " + fis);
				
				// 파일을 쓰기 위해서
				fos = new FileOutputStream(outFile, true);
				System.out.println("fos >>> : " + fos);
				
				// 파일을 읽어서 파일에 쓰기
				// public int read() throws IOException
				while ((data = fis.read()) != -1) {
					System.out.print((char)data);
				}
				
				// io를 닫을 때는 여는 순서의 반대로 닫는다.
				// 정상적으로 수행이 되었을 때 수행되는 루틴
				fos.close();
				fis.close();
			} else {
				System.out.println("파일이 없습니다. >>> : ");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			System.out.println("에러가 >>> : " + e.getMessage());
		} finally {
			
			if (fos != null) {
				try { fos.close(); fos=null;} catch (Exception e) {}
			}
			
			if (fis != null) {
				try { fis.close(); fis=null;} catch (Exception e) {}
			}
		}
	}
}

8교시 (17:30-18:30)

  • Exam_FileReader
package a.b.c.ch6;

import java.io.File;
import java.io.FileReader;

import a.b.c.common.FilePath;

public class Exam_FileReader {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// 지역변수, 객체, 참조변수
		// 객체 null 초기화
		FileReader fr = null;
		
		try {
			
			String filePath = FilePath.FILE_PATH_CH6;
			filePath = filePath + "/" + "Exam_FileReader.java";
			System.out.println("filePath >>> : " + filePath);
			
			File f = new File(filePath);
			
			boolean bFile = f.exists();
			System.out.println("bFile >>> : " + bFile);
			
			if (bFile) {
				fr = new FileReader(f);
				System.out.println("fr >>> : " + fr);
				
				// public int read() throws IOException
				int data = 0;
				while ((data = fr.read()) != -1) {
					System.out.print((char)data);
				}
				
				// 정상적으로 수행이 되었을 때 수행되는 루틴
				// FileReader I/O 객체를 닫는다.
				fr.close();
			} else {
				System.out.println("파일이 없습니다. >>> : ");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			System.out.println("에러가 >>> : " + e.getMessage());
		} finally {

			if (fr != null) {
				try {
					fr.close(); fr=null;
				} catch (Exception e) {}
			}
		}
	}
}
  • Exam_FileWriter
package a.b.c.ch6;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

import a.b.c.common.FilePath;

public class Exam_FileWriter {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// 파일 패스 공통 클래스에서 불러오기
		String filePath = FilePath.FILE_PATH_CH6;
		
		// 파일 패스 및 사용할 파일 명까지 초기화
		String inFile = filePath + "/" + "Exam_FileWriter.java";
		String outFile = filePath + "/" + "Exam_FileWriter.bak";
		
		// 지역 변수 디폴트 값으로 초기화
		FileReader fr = null;
		FileWriter fw = null;
		File f = null;
		int data = 0;
		boolean bFile = false;
		
		try {
			
			f = new File(inFile);
			
			// 파일이 있는지 여부 체크하는 boolean
			bFile = f.exists();
			System.out.println("bFile >>> : " + bFile);
			
			if (bFile) {
				
				// 파일을 읽기 위해서
				fr = new FileReader(f);
				System.out.println("fr >>> : " + fr);
				
				// 파일을 쓰기 위해서
				fw = new FileWriter(outFile, true);
				System.out.println("fw >>> : " + fw);
				
				// 파일을 읽어서 파일에 쓰기
				// public int read() throws IOException
				while ((data = fr.read()) != -1)  {
					System.out.print((char)data);
					fw.write(data);
				}
				
				// io를 닫을 때는 여는 순서의 반대로 닫는다.
				// 정상적으로 수행이 되었을 때 수행되는 루틴
				fw.close();
				fr.close();
				
			} else {
				System.out.println("파일이 없습니다. >>> : ");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			System.out.println("에러가 >>> : " + e.getMessage());
		} finally {
			
			if (fw != null) {
				try { fw.close(); fw=null; } catch (Exception e) {}
			}
			
			if (fr != null) {
				try { fr.close(); fr=null; } catch (Exception e) {}
			}
		}
	}
}
  • 오늘 강의 노트
  • 자바
    1. 키워드
    package import
    class interface abstract
    public protected private
    static new
    void return final byte char short int long float double
    if else for while do switch case default
    break

    2. 연산자
    + - * / = < > == != && || ++ += () !

    3. 식별자
    클래스 이름 : 대문자로 시작
    함수 이름 : 소문자로 시작
    변수 이름 : 소문자로 시작

    4. 빌트인 클래스 자원 API
    java.lang.* 자바 기본 클래스 : 문자, 숫자, 시스템 관련 클래스 : corejava
    java.lang.Object
    java.lang.System
    java.lang.String
    java.lang.Integer
    java.lang.Double
    java.lang.Math
    java.lang.StringBuffer
    java.lang.reflect.Method
    java.lang.Class
    java.lang.Thread
    java.lang.Throwable
    java.lang.Exception

    java.util.* 날짜, 데이터 다루는 클래스
    java.util.Date
    java.util.Calendar
    java.util.ArrayList
    java.util.HashMap
    java.util.UUID
    java.util.Random
    java.util.Scanner
    java.util.StringTokenizer
    java.util.TimeZone
    java.util.Iterator

    java.io.*

    java.text.* 날짜 포맷
    java.text.SimpleDataFormat

    java.math.*
    java.math.BigDecimal

    javax.swing.*
    java.awt.*

    java.io 패키지
    -----------------
    input 입력 output 출력 : 입출력 : io
    System.in : 입력
    System.out. : 출력

    스트림 : 2진수 형태로 다닌다
    1byte : 바이트 단위 스트림 : 영어 : 한글(깨짐)
    2byte : 문자 단위 스트림 : 영어 : 한글(안깨짐)
    영어 : 1byte
    한글 : 2byte 이상

    바이트 단위 스트림
    ---------------
    InputStream
    DataInputStream
    FileInputStream
    BufferedInputStream

    OutputStream
    DataOutputStream
    FileOutputStream
    BufferedOutputStream
    PrintStream

    문자 단위 스트림
    --------------
    Reader
    FileReader
    BufferedReader
    InputStreamReader

    Writer
    FileWriter
    BufferedWriter
    OutputStreamWriter
    PrintWriter

Notes


728x90