예외 처리 미루기
예외 처리를 미루는 throws 사용하기
FileInputStream을 생성했을 때 예외 처리 방법은 두 가지 있었습니다. Srround with try/catch는 살펴보았스니, 이제 Add throws declaration에 대해 살펴보겠습니다. 그대로 번역하면 throws 선언을 추가한다는 의미인데, 예외를 해당 메소드에 처리하지않고 미룬 후 메소드를 호출하여 사용하는 부분에서 예외를 처리하는 방법입니다.

사용자 정의 예외
자바에서 제공하는 예외 처리 클래스 이외에 개발하는 프로그램에 따라 다양한 예외 상황이 발생할 수 있습니다. 예를 들어 어떤 사이트에 회원 가입을 할 때 입력하는 아이디 값이 null이어서는 안되고 8자 이상 20자 이하로 만들어야 하는 조건이 필요할 수 있습니다. 이런 조건을 체크하는 작업을 자바 프로그램에서 한다면 예외 클래스를 직접 만들어 예외를 발생시키고 예외 처리 코드를 구현할 수 있습니다. 실무에서 프로젝트를 진행할 때에도 예외 클래스를 직접 만들어 사용하는 경우가 종종 있으므로 사용자 정의 예외 클래스를 어떻게 구현하는지 알아두면 좋습니다.
사용자 정의 예외 클래스 구현하기
사용자 정의 예외 클래스를 구현할 때는 기존 JDK에서 제공하는 예외 클래스 중 가장 유사한 클래스를 상속받는 것이 좋습니다. 유사한 예외 클래스를 잘 모르겠다면 가장 상위 클래스인 Exception 클래스에서 상속 받으세요. 아이디가 null 값이거나 지정 범위를 벗어나는 경우의 예외 처리 클래스를 만들어 보겠습니다.

위 코드는 Exception 클래스에서 상속받아 구현했습니다. 예외 상황 메시지를 생성자에서 입력받습니다. Exception 클래스에서 메시지 생성자, 멤버 변수와 메소드를 이미 제공하고 있으므로 super(message)를 사용하여 예외 메시지를 설정합니다. 나중에 getMessage() 메소드를 호출하면 메시지 내용을 볼 수 있습니다. 그러면 예외를 발생시켜 보겠습니다.

IDFormatTest 클래스에서 setUserID() 메소드는 아이디에 대한 제약 조건을 구현합니다. 이 제약 조건이 지켜지지 않으면 예외를 발생시킵니다. 여기에서 발생하는 예외는 자바에서 제공하는 예외가 아니기 때문에 예외 클래스를 직접 생성하여 예외를 발생시켜야합니다.
예외 처리를 할 때는 로그를 잘 남기자
프로그램을 개발할 때는 로그(log)를 남기는 것이 매우 중요합니다. 오류가 발생했을 떄 로그를 보고 오류가 발생하는 코드를 순서대로 따라가며 확인할 수 있고 원인을 찾을 수 있습니다 로그는 정보 의미에 따라 레벨을 나누어 관리합니다. 간단한 정보 의미를 가진 로그부터 심각한 예외가 발생했을 떄의 로그까지 여러 레벨이 존재할 수 있습니다. 이러한 로그를 체계적이고 의미 있게 남겨서 시스템에서 오류가 났을 떄 그 원인을 유추해 볼 수 있어야 합니다.