본문 바로가기

언어공부/Java

(83)
자바 예외 처리 방법 - throw 키워드, throws 키워드, 사용자 정의 예외 자바 예외 처리 방법인 throw 키워드, throws 키워드에 대해서 알아보자. throw 키워드 불필요한 데이터 전송이 있어 잘 안쓰이는 키워드로, 예외를 일부러 발생시킬 때 사용하는 키워드이다. 형식은 throw new 예외 클래스 생성자; 이다. throws 키워드 throws 키워드는 발생된 예외를 자신이 직접 처리하는 것이 아니라 자신을 호출한 곳으로 떠넘기는 역할을 한다. 형식은 접근제어자 리턴타입 메소드명(매개변수) throws Exception1, Exception2, ... { } 이다. 예외를 선언하면, 이 예외뿐만 아니라 그 자손타입의 예외까지도 발생할 수 있다. 메소드의 선언부에 예외를 선언함으로써 메소드를 사용하려는 사람이 메소드의 선언부를 보았을 때, 이 메소드를 사용하기 위해..
자바 예외 처리 방법 - try-catch문, printStackTrace()와 getMessage() 자바 예외 처리 방법에 대해서 알아보자. 프로그램의 실행도중에 발생하는 에러는 어쩔 수 없지만, 예외는 프로그래머가 이에 대한 처리를 미리 해주어야 한다. 예외처리(exception handling)란 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이며, 예외처리의 목적은 프로그램의 갑작스런 비정상 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는 것이다. 에러와 예외는 모두 실행 시 발생하는 오류(runtime error)이다. 발생한 예외를 처리하지 못하면, 프로그램은 비정상적으로 종료되며, 처리되지 못한 예외는 JVM의 예외처리기가 받아서 예외의 원인을 화면에 출력한다. try-catch문 하나의 try블럭 다음에는 여러 종류의 예외를 처리할 수 있도록..
자바 프로그램 오류 및 Exception과 RuntimeException 자바 프로그램 오류 및 Exception과 RuntimeException에 대해서 알아보자. 프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 컴파일 에러 : 컴파일 시 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 자바에서는 실행 시(runtime) 발생할 수 있는 프로그램 오류를 '에러(error)'와 '예외(exception)' 두가지로 구분한다. 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 에러는 ..
자바 wait()과 notify() 자바 wait()과 notify()에 대해서 알아보자. synchronized로 동기화 해서 공유 데이터를 보호하는 것은 좋지만, 특정 쓰레드가 객체의 락을 가진 상태로 오랜 시간을 보내지 않도록 해야한다. 만일 계좌에 출금할 돈이 부족해 한 쓰레드가 락을 보유한 채로 돈이 입금될 때까지 계속 기다리면 다른 쓰레드 들은 해당 객체의 락을 기다리느라 다른 작업들이 원활하지 않을 것이다. 이러한 상황을 개선하기 위해 wait()과 notify()가 있다. 동기화된 임계 영역의 코드를 수행하다가 작업을 더 이상 진행할 상황이 아니면, wait()을 호출해 쓰레드가 락을 반납하고 기다리게 한다. 그러면 다른 쓰레드가 락을 얻어 해당 객체에 대한 작업을 수행할 수 있게 된다. 나중에 작업을 진행할 수 있는 상황이..
자바 쓰레드 동기화(synchronization) 자바 쓰레드 동기화(synchronization)에 대해서 알아보자. 동기화(synchronization) 싱글쓰레드 프로세스의 경우 프로세스 내에서 단 하나의 쓰레드만 작업하기 때문에 프로세스의 자원을 가지고 작업하는데 별 문제가 없지만, 멀티쓰레드 프로세스의 경우 여러 쓰레드가 같은 프로세스 내에 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게 된다. 만일 쓰레드A가 작업하던 도중에 다른 쓰레드B에게 제어권이 넘어갔을 때, 쓰레드A가 작업하던 공유데이터를 쓰레드B가 임의로 변경하였다면, 다시 쓰레드A가 제어권을 받아서 나머지 작업을 마쳤을 때 의도했던 것과는 다른 결과를 얻을 수 있다. 이러한 일을 방지하기 위해서 쓰레드의 동기화가 필요하며, 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간..
자바 쓰레드 스케쥴링 메소드-sleep(), interrupt(), suspend(), resume(), stop(), join(), yield() 자바 쓰레드 스케쥴링 메소드에 대해서 알아보자. sleep() sleep()은 지정된 시간동안 쓰레드를 멈추게 한다. 메소드 형식은 아래와 같다. static void sleep(long millis), static void sleep(long millis, int nanos) 밀리세컨드와 나노세컨드의 시간단위로 세밀하게 값을 지정할 수 있지만, 어느 정도의 오차가 발생할 수 있다. 쓰레드가 0.0015초 동안 멈추게 하려면 sleep(1, 500000);로 주면 된다. sleep()에 의해 일시정지 상태가 된 쓰레드는 지정된 시간이 다 되거나 interrupt()가 호출되면, InterruptedException이 발생되어 잠에서 깨어나 실행대기 상태가 된다. 그래서 sleep()을 호출할 때는 항상 ..
자바 쓰레드의 I/O 블락킹(blocking) 자바 쓰레드의 I/O 블락킹(blocking)에 대해서 알아보자. 자바 쓰레드의 I/O 블락킹(blocking) 두 쓰레드가 서로 다른 자원을 사용하는 작업의 경우에는 싱글쓰레드 프로세스보다 멀티쓰레드 프로세스가 더 효율적이다. 예를 들면 사용자로부터 데이터를 입력받는 작업, 네트워크로 파일을 주고받는 작업, 프린터로 파일을 출력하는 작업과 같이 외부기기와 입출력을 필요로 하는 경우가 이에 해당한다. 만일 사용자로부터 입력받는 작업(A)과 화면에 출력하는 작업(B)을 하나의 쓰레드로 처리한다고 하면 사용자가 입력을 마칠 때까지 아무 일도 하지 못하고 기다리기만 해야한다. 그러나 두개의 쓰레드로 처리한다면 사용자의 입력을 기다리는 동안 다른 쓰레드가 작업을 처리할 수 있기 때문에 보다 효율적인 CPU의 사..
자바 멀티쓰레드 자바 멀티쓰레드에 대해서 알아보자. 멀티쓰레드 프로세스(process)는 실행중인 프로그램이다. 프로그램을 실행하면 OS로 부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다. 그래서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스(Multi-threaded process)라고 한다. ex) 싱글쓰레드 = 자원+쓰레드 / 멀티쓰레드 = 자원+쓰레드+쓰레드+.... 멀티쓰레드의 장점은 아래와 같다. CPU의 사용률을 향상시킨다. 자원을 보다 효율적으로 사용할 수 ..