자바 플랫폼 라이블러리에는 대부분의 API가 필요로 하는 기본적인 unchecked exception들이 갖추어져 있다. 이미 있는 예외들은 재사용하면 아래와 같은 좋은 점이 있다.
1. 배우기 쉽고 사용하기 편리한 API를 만들 수 있다.
2. 표준 예외를 사용한 API는 가독성이 높다.
3. 예외 클래스 개수를 줄이면 프로그램의 메모리 요구량이 줄어들고, 클래스를 로딩하는 시간도 줄어든다.(확인 불가..)
아래는 가장 널리 재사용 되는 예외를 정리한 표이다.
예외 |
사용법 |
IllegalArgumentException |
null이 아닌 인자의 값이 잘못되었을 때 |
IllegalStateException |
객체 상태가 메서드 호출을 처리하기에 적절치 않을 때 |
NullPointException |
null 값을 받으면 안 되는 인자에 null이 전달되었을 때 |
IndexOutOfBoundsException |
인자로 주어진 첨자가 허용 범위를 벗어났을 때 |
ConcurrentModificationException |
병렬적 사용이 금지된 객체에 대한 병렬 접근이 탐지 되었을 때 |
UnsupportedOperationException |
객체가 해당 메서드를 지원하지 않을 때 |
하지만 위 표준 예외를 사용하기 위해서는 예외를 발생시키는 조건이 해당 예외의 문서에 기술된 것과 일치해야 한다.
이름만 보고 재사용하면 혼란을 일으킬 수 있다.
또한 예외는 상호 배제적(mutually exclusive)이지 않다는 사실을 생각해야한다.
예를 들어 아래와 같은 상황이 있을 것이다.
숫자를 입력받아 해당 숫자만큼 카드를 나눠주는 메서드가 있다고 해보자. 만약 인자로 전달된 숫자가 너무 크다면 인자의 값이 너무 컸다는 뜻에서 IllegalArgumentException을 발생 시킬수도 있고 혹은 객체의 현 상태로는 메서드 호출을 처리할 수 없다는 뜻에서 IllegalStateException을 발생 시킬 수도 있다.
End of Document
'개발이야기 > Effective Java' 카테고리의 다른 글
[Effective Java]실패 원자성 달성을 위해 노력하라 (0) | 2017.03.04 |
---|---|
[Effective Java]어떤 오류인지를 드러내는 정보를 상세한 메시지에 담으라 (0) | 2017.03.04 |
[Effective Java]메서드에서 던져지는 모든 예외에 대해 문서를 남겨라 (0) | 2017.03.04 |
[Effective Java]불필요한 점검지정 예외 사용은 피하라 (0) | 2017.02.23 |
[Effective Java]예외는 예외적 상황에만 사용하라 (0) | 2017.02.22 |
[Effective Java]생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라. (1) | 2017.02.20 |