로그(log)란 소프트웨어 실행 중에 발생하는 여러 상황을 기록한 내용으로서 주로 파일에 기록합니다. 이 파일을 로그 파일(log file)이라고 합니다.
Exception 하위 클래스
- IOException(입출력 예외 처리)
- FileNotFountException
- Soket Exception
- RuntimeException(실행 오류 예외 처리)
- ArithmeticException
- IndexOutofBoundsException
예제 14-1 try-catch문 사용하기
- 배열 범위가 유효한 값 4까지는 배열에 저장되어 출력되고 그다음 값을 배열에 넣으려 할때 예외가 발생함
- 발생한 예외는 catch 블럭에서 처리하므로 System.out.println("프로그램 종료") 문장까지 수행되하고 프로그램이 정상 종료 됨
- 예외가 발생하여 프로그램이 바로 비정상 종료되었다면 System.out.println("프로그램 종료") 문장을 수행할 수 없음
- 예외처리는 프로그램이 비정상 종료되는 것을 방지할 수 있으므로 매우 중요함
예제 14-2 try-catch문 사용하기
- 예외가 발생했을 때 FileNotFoundException e의 toString( ) 메서드가 호출되도록 코드를 작성해 봄
- 출력 결과를 보면 첫 번째 줄은 e의 출력 내용임
- 두번째 줄이 줄력되었으므로 예외 처리 후에도 프로그램이 계속 수행되었음을 알 수 있음
리소스(resource)란 시스템에서 사용하는 자원을 말합니다. 예를 들어 파일이나, 네트워크, 데이터베이스 연결 등이 리소스에 해당합니다.
예제 14-3 finally 블럭 사용하기
- 입력받은 파일이 없는 경우에 대해 try-catch문을 사용해 FileNotFoundException 예외 처리를 함
- 프로그램을 실행하면 a.txt 파일이 없으므로 예외가 발생하여 catch 블럭이 실행될 것임
- 강제로 return을 해도 return문과 상관없이 finally 블럭이 수행되어 '항상 수행됩니다.' 문장이 출력됨
예제 14-4 AutoCloseable 인터페이스 구현하기
- AutoCloseable 인터페이스는 반드시 close( ) 메서드를 구현해야 함
- 시스템 리소스인 경우에는 파일 스트림을 닫거나 네트워크 연결을 해제하는 코드를 작성해야겠지만, 여기서는 close( ) 메서드가 제대로 호출되는지 알아보기 위해 출력문만 남김
14-5 try-with-resources문 사용하기(1)
- try-with-resources문을 사용할 때 try문의 괄호 ( ) 안에 리소스를 선언함
- 이 예제는 예외가 발생하지 않고 정상 종료되는데 출력 결과를 보면 close( ) 메서드가 호출되어 '리소스가 close( ) 되었습니다.' 문장이 출력된 것을 알 수 있음
- 리소스를 여러 개 생성해야 한다면 아래처럼 세미 콜론( ; )으로 구분할 수 있음
14-6 try-with-resources문 사용하기(2)
- 6행에서 강제로 예외를 발생시키면 catch 블럭이 수행됨
- 출력 결과를 보면 리소스의 close( ) 메서드가 먼저 호출되고 예외 블럭 부분이 수행되는 것을 알 수 있음
예제 14-7 throws로 예외 미루기
- 위 코드에서 정의한 loadClass( ) 메서드는 FileInputStream을 열고 Class를 동적으로 로딩하여 반환함
- 파일을 열 때는 FileNotFoundException이 발생할 수 있고, 클래스를 로딩할 때는 ClassNotFoundException이 발생할 수 있음
예제 14-8 사용자 정의 예외 구현하기
- Exception 클래스를 상속받아 구현함
- 예외 상황 메세지를 생성자에서 입력 받음
- Exception 클래스에서 메세지 생성자, 멤버 변수와 메서드를 이미 제공하고 있으므로 super(message)를 사용하여 예외 메세지를 설정
- getMessage( ) 메서드를 호출하면 메세지 내용을 볼 수 있음
예제 14-9 사용자 정의 예외 테스트하기
- IDFormatTest 클래스에서 setUserID( ) 메서드는 아이디에 대한 제약 조건을 구현함
- 제약 조건이 지켜지지 않으면 예외를 발생시킴
- 여기에 발생하는 예외는 자바에서 제공하는 예외가 아니므로 예외 클래스를 직접 생성하여 발생시켜야 함