1. File
1-1. 문자 인코딩(character encoding)이란 ?
- 문자난 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화 하는 방법
- UTF-8 : 8비트 이진수로 표현하는 방법
1-2. 스트림이란?
- 입출력에서 stream이란 디바이스의 입출력 방식이 character 단위이든 block 단위이든
관계없이 '1바이트' 씩 '연속'적으로 전달되는 형태로 추상화된 상태를 의미한다
- 입출력 장치는 개별적인 특성이 있으므로 읽고, 쓰는 단위가 각각 다르지만, 스트림은
이러한 일련의 과정을 추상화하여 모든 디바이스를 character 단위로만 사용하도록 한다
- 즉, 입출력 디바이스의 특성을 무시하고 하나의 단일한 입출력 인터페이스로 다를 수 있도록
하는 것이 stream이다.
1-3. 자바의 스트림 관련 클래스
- 스트림 관련 클래스들은 각각 inputStream(입력/읽기),
outputStream(출력/저장)과 관련된 인터페이스를 상속받기 떄문에 모두 동일한 메서드를 가지고 있다.
- 프로그래머는 상황에 따라 적절한 클래스를 사용하기만 하면 동일한 방법으로 스트림을 사용할 수 있다.
1-4 파일 저장 관련
- 저장을 위한 빈 파일 생성하기
-> OutputStream의 객체를 생성한다
- 파일에 내용 쓰기
-> 저장할 내용을 byte 배열로 변환
-> 변환된 배열을 OutputStream의 write()메서드에게 파라미터로 전달한다
- 파일 닫기
-> OutputStream 객체로 close() 메서드를 호출하여
1-5. 파일 저장시 유의사항
- OutputStream은 각각의 단계마다 예외처리를 강제적으로 요구한다.
- try~catch 블록이 형성되는 과정에서 변수의 유효성 범위에 대한 처리에 유의해야 한다.
1-6. 파일 읽기 과정
- 파일을 읽기 위한 inputStream 객체 생성하기
- 읽은 내욜을 담기 위한 빈 bate 배열 생성하기
->파일읭 용량 크기 만큼 배열의 사이즈를 지정해야 한다
- 파일의 내용을 읽기
->읽은 내용을 담기 위한 baye배열을 inputStream 객체의 read() 메서드에게 파라미터로 전달한다
- 사용이 완료된 스트림 닫기
- InputStream 객체의 close() 메서드를 호출하여 스트림을 닫는다.
- 읽은 내용을 문자열로 변환하기
->byte 배열을 String 클래스의 생성자에 전달하여 문자열로 변환한다.
->이 과정에서 어떤 인코딩을 사용할지 함꼐 설정해야 한다 
2. Sanner

3. Thread
3-1. 프로세스(Process)
- 운영체제에서는 실행중인 하나의 애플리케이션을 프로세스라고 한다
- 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아
애플리케이션의 코드를 실행하는데 이것이 프로세스다.
- 자원(resources)과 스레드로 구성
3-2. Thread란?
-하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업단위를 말하며,
세부적으로 운영체제에의해 관리되는 하나의 작업 혹은 데스크를 의마한다.
-
하나의 실행 흐름,프로세스 내부에 존재
-
main () 실행문은 하나의 스레드
-
이외의 또 다른 스레드를 만들려면 Thread 클래스를 상속하거나, Runnable 인터페이스를 구현한다.
-
하나의 스레드는 하나의 코드 실행 흐름이기 떄문에, 한 프로세스내 스레드가 2개라면
2개의 코드 실행흐름이 생긴다는 의미이다
프로세스 : 스레드 = 공장 : 일꾼
-
싱글 스레드 프로세스 : 자원 + 일꾼(스레드)
-
멀티 스레드 프로세스 :자원 + 일꾼(스레드)+ 일꾼(스레드)+ ...
3-3. 멀티프로세스 vs 멀티스레드
- 하나의 새로운 프로세스를 생성하는 것보다 하나의
새로운 스레드를 생성하는 것이 더 적은 비용이 든다.
3-4. 멀티스레드의 장단점
3-5. Thread 생성주기
- New -> Runnable -> Running -> Dead
strat() run()
- New : 스레드가 생성되었지만 스레드가 아직 실행할 준비가 되지 않은 단계
- Runnable : 스레드가 실행되기 위한 준비단계
- Running : 선택된 스레드가 실행되는 단계
- Blocked : 스레드가 작업을 완수하지 못하고 잠시 작업을 멈추는 단계
3-6 Runnable(준비상태)
- 스레드가 실행되기 위한 준비단계이다
CPU를 점유하고 있지 않으며 실행 (Running)을 하기 위해 대기하고 있는 상태이다. Ready 준비 상태라고 한다
3-7. Running(실행상테)
- CPU를 점유하여 실행하고 있는 상태이며, run() 메서드가 호출된 상태이다.
- Runnable(준비상태)에 있는 여러 스레드 중 우선 순위를 가진 스레드가 결정되면 JVM이 자동으로()
3-8. Thread의 run()과 start()의 차이
-
strat()
-> Thread가 생성되며, Thread가 시작되면 run()메서드가 실행
-> 멀티스레드로 동작한다.
-
run()
->Thread가 생성되지 않으며, 그냥 run()메서드만 실행
-> 싱글스레드로 동작한다.
3-9. Thread 종료
- Thread의 interrupt() 메소드는 스레드가 일시정지 상태에 있을때
InterruptedException 예외를 발생시키는 역활을 한다.
- 이것을 이용하면 Thread의 run() 메소드를 정상 종료시킬 수 있다.
3-10. 멀티 스레드 주의사항
-
멀티스레드가 동시에 수행되면서 공유할 수 있을때, 공유되는 부분은
상호 베타적으로 사용되야한다
-
DeadLock 문제
- 멀티 스레드를 사용할 때 주의할 점중의 하나로 프로그램에서 스레드를 잘못 만들면
프로그램의 수행이 이루어 지지 않고 무한 수행하는 DeadLock 을 만들 수 있다.
-
임계영역
-> 공유 자원을 사용하는 코드 영역을 임계영역이라고 한다
-> 이 부분에서는 공유 자원을 동시에 수정할 수 없도록 상호 배타적으로
실행될 수 있도록 작성 되어야 한다.
-
자바에서 상호배제 문제를 해결하는 방법
->자바는 한 순간에 하나의 스레드만 실행할 수 있는
symchronized method제공
->공유자원을 사용하는 영역을 symchronized(객체명)의 블록으로 지정