해당 포스트는 "Effective Java" 책의 내용을 요약한 것이다.



※ 복구 가능 상태에는 점검지정 예외, 프로그래밍 오류에는 실행지점 예외를 사용해라

: 예외에는 오류, 점검지정 예외(checked exception), 실행지점 예외(runtime exception)이 있다. 점검지정 예외를 사용할 것인지 아니면 무점검 예외(unchecked exception[error, runtime exception]) 사용할 지에 대한 가장 기본적인 규칙은 호출자(caller)/클라이언트 측에서 복구할 것으로 여겨지는 상황에 대해서는 점검지정 예외를 이용해야 한다. 점검 지정 예외를 던지는 메서드를 사용하는 클라이언트는 자신이 catch를 통해 처리하던지 아니면 밖으로 던져 놔두든지 해야 한다. 실행지점 예외는 프로그래밍 오류를 표현할 때 사용해야 한다. 예로 선행조건 위반이 있다. 실행지점 예외가 발생하게 되면 프로그램을 중단시키는 게 더 좋다. 예외에 대해서 복구가 가능할 것 같으면 점검지정 예외를 사용하고 아니면 실행 지점 예외 즉, 무점검 예외를 이용하는 게 좋다. 또한 점검지정 예외는 복구가 가능한 상태를 나타내기 때문에 호출자 측에서 상태를 복구하는 데 이용할 정보를 제공하는 메서드를 갖추는 게 중요하다. 예로 카드에 잔고가 없어서 결재가 취소되었음을 알리는 점검지정 예외를 사용할 경우 이 예외는 잔고가 얼마나 부족했는지를 반환하는 접근자를 갖추어 필요한 정보를 고객에게 알릴 수 있어야 한다.



※ 표준 예외를 사용하라

- IllegalArgumentException : null이 아닌 잘못된 값을 인자로 전달했을 때 사용한다. 예로 실행 횟수를 나타내는 인자에 음수가 전달되면 이 예외를 던져야 할 것이다.

- IllegalStateExcepton : 객체 상태가 메서드 호출을 처리하기에 적절치 않을 때 사용한다. 예로 아직 초기화되지 않은 객체를 사용하려고 시도하면 이 예외가 발생할 것이다.

- NullPointerException : null 인자를 받으면 안 되는 인자에 null을 받을 경우 사용한다.

- IndexOutOfBoundsException : 인자로 주어진 첨자가 허용 범위를 벗어났을 때 사용한다.

- ConcurrentModificationException : 하나의 스레드만 사용하도록 설계된 객체나, 동기화와 함께 사용되어야 하는 객체에 여러 스레드에서 접근할 경우 사용한다. 


- 예외를 무시하지 마라. catch 문 안을 절대로 비워두면 안 된다.



+ Recent posts