반응형
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다.
아이템 69. 예외는 진짜 예외 상황에만 사용하라
ex 1) 예외를 잘못 사용한 예
try {
int i = 0;
while (true)
range[i++].climb()
} catch (ArrayIndexOutOfBoundsException e) {
}
- 위 코드는 배열의 원소를 순회하는데, 무한루프로 돌다가 배열의 범위를 벗어나 ArrayIndexOutOfBoundsException이 발생하면 끝을 낸다.
- 이 코드는 상당히 가독성도 떨어지고 성능도 좋지 않다.
ex 2) ex1을 기반으로 표준적인 관용구대로 작성한 예
for(Mountain m : range)
m.climb();
예외를 사용한 반복문을 사용하지 말아야 하는 이유
- 예외는 예외 상황에 쓸 용도로 설계되었으므로 JVM 구현자 입장에서는 명확한 검사만큼 빠르게 만들어야 할 동기가 약하다.
- 코드를 try-catch 블록 안에 넣으면 JVM이 적용할 수 있는 최적화가 제한된다.
- 배열을 순회하는 표준 관용구는 조건을 중복 검사를 하지 않고, JVM이 알아서 최적화해준다.
- 반복문 안에 버그가 숨어 있다면 흐름 제어에 쓰인 예외가 이 버그를 숨겨 디버깅을 훨씬 어렵게 할 것이다.
정리
- 예외는 오직 예외 상황에서만 써야 한다.
- 절대로 일상적인 제어 흐름용으로 쓰여선 안된다.
- 잘 설계된 API라면 클라이언트가 정상적인 제어 흐름에서 예외를 사용할 일이 없게 해야 한다.
반응형
'BE > Java' 카테고리의 다른 글
[Effective Java] 아이템 71. 필요 없는 검사 예외 사용은 피하라 (0) | 2022.12.12 |
---|---|
[Effective Java] 아이템 70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 (0) | 2022.12.08 |
[Effective Java] 아이템 68. 일반적으로 통용되는 명명 규칙을 따르라 (0) | 2022.12.06 |
[Effective Java] 아이템 67. 최적화는 신중히 하라 (0) | 2022.12.05 |
[Effective Java] 아이템 66. 네이티브 메서드는 신중히 사용하라 (0) | 2022.12.02 |