목록JAVA 문법 (40)
Super Coding Addict
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/JMRZc/btqXxe8RrDE/PIuDsiF8XvKKB8Mt5ruYhk/img.png)
* 입출력 스트림 - 다양한 입출력 장치에 독립적으로 일관성 있는 입출력 방식을 제공한다 - 가상경로를 통해 입력, 출력이 이루어진다고 보면됨 (추상화) - I/O 스트림 사용하여 입출력 구현 * 입출력 스트림 구분 I/O 대상 기준 : 입력 스트림, 출력 스트림 자료의 종류 : 바이트 스트림(1바이트씩 읽어 들이고 1바이트씩 쓰는 스트림으로 동영상이나 음악파일 등), 문자 스트림(문자는 2바이트씩 처리) 스트림의 기능 : 기반 스트림, 보조 스트림(읽거나 쓰는 기능은 없지만 기반 스트림을 서포트해주는 기능을 추가함, 바이트를 읽은 것을 문자로 바꿔준다던가, 버퍼링 기능 제공, 직렬화 등을 함) --> 뒤에 Stream이 붙으면 바이트 단위의 스트림 * 기반 스트림과 보조 스트..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bhXRiq/btqXb04QlMt/wjEJB4Q4HZFGAYWWk5rvHK/img.png)
* deadlock - 2개 이상의 Thread가 서로 기다림 * wait()와 notify() 메서드 - wait() : 리소스는 한정적이므로 리소스가 유효하지 않을 때 다시 available할 때까지 thread가 non-runnable상태로 전환되어 대기 --> notify()가 호출될 때까지 기다림 - notify() : wait()하고 있는 하나의 thread를 runnable하게 깨운다 (but the oldest가 아니라, 아무 thread나 깨움!) -. notifyAll() : wait()하고 있는 모든 thread를 깨움 --> notifyAll()이 더 권장됨, 모든 thread를 다 깨워서 서로 CPU 점유 경쟁을 하게한 후, non-runnable한 thread는 다시 잠들게 된다..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/557gt/btqWW91YjOT/2YMUkkmxmToLTjVCyflBO0/img.png)
* critical section (임계 영역) - 두개 이상의 thread가 동시에 접근하게 되는 리소스 - 동시에 여러 개의 thread가 이 영역에 접근하게 되면 실행 결과 보장 불가 --> 따라서 thread간 순서를 맞추는 동기화(syncronization)이 필요!! Java에서 공유자원이 되는 것은 static 키워드를 가진 객체라고 보면 됨 * 동기화 (syncronization) - 임계영역에 여러 thread가 접근하는 경우, 한 thread가 수행하는 동안에 임계영역 안의 공유자원을 lock해서 다른 thread의 접근을 막음 - 동기화 잘못 구현시 deadlock에 빠질 수 있음 * Java에서 동기화 구현 - synchronized 수행문 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/pJyGu/btqWX40s4yK/jsyYjXl9aWQbjiMZz5EI80/img.png)
* interrupt() 메서드 - interrupt exception 발생시킴 - join(), sleep(), wait() 메서드로 블럭킹된 Thread를 Exception상태에 빠지게 해 다시 runnable상태로 만들 수 있음 - 예제 #InterruptTest 클래스 package ch15.thread; public class InterruptTest extends Thread { public void run() { int i; for(i=0; i interrupt() 메서드를 호출하지 않으면, sleep(5000)으로 5초 후에 Thread가 종료되지만, interrupt() 메서드를 호출하면 sleep(5000)으로 블락킹 되었던 Thread가 Exception에 떨어지게 된다 * Threa..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bGMTUN/btqWW9U4YMR/OkAwPGBzCNnkdkNJUioMVk/img.png)
자바의 Thread 클래스를 상속받아 Thread 프로그래밍을 하거나, Runnable 인터페이스 구현하여 가능 Multi Thread 구현 Shared Resource (공유자원) --> 동시에 쓰면 문제가 생길 수 있음 --> syncronization(동기화)로 순서를 맞춰줌 * Thread란? - Process : 프로그램이 메모리에 올라간 상태 - Thread : Process가 실행이 되는 게 아니라, 실행이 되는 단위는 Thread(작업의 단위) / 하나의 프로세스는 하나 이상의 Thread를 가짐 / CPU를 점유해서 돌아감(스케줄러가 Thread에 CPU를 할당) * Thread 구현하기 - 자바의 Thread 클래스 extends(상속) - Runnable ..
* 예외 처리 미루기 - try{}블록으로 예외를 처리하거나, throws를 해서 예외처리를 미룰 수 있다 - 예외처리를 미루면(throws), 메서드를 호출한 곳에서 예외처리를 하게 된다 - main()에서 throws를 하면 가상머신에서 처리되므로 에러발생! * 다중 예외 처리 - 하나의 try{}블록 안에서 여러 블록이 발생하면 catch{}블록 한 곳에서 모두 처리(멀티)하거나, 여러 catch{}블록으로 나눠 처리 가능 - 가장 최상위 Exception 클래스인 Exception클래스는 가장 마지막 블록에 위치해야 함! * 사용자 정의 예외 - JDK 제공 예외 클래스외에, 시스템상 사용자가 필요에 의해서 예외 클래스 정의하여 사용할 수 있음 - 기존 JDK 클래스 상속해 만듦 * 예제 1 # ..