BE/Java

[Effective Java] 아이템 69. 예외는 진짜 예외 상황에만 사용하라

멍목 2022. 12. 7. 22:42
반응형

EFFECTIVE JAVA(이펙티브 자바)

 

이 포스팅에서 작성하는 내용은 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라면 클라이언트가 정상적인 제어 흐름에서 예외를 사용할 일이 없게 해야 한다.
반응형