예외는 진짜 예외에만 사용하자

예를 들어 for-loop을 exception으로 종료한다고 해보자. 나중에 보면 정상 종료를 위한 exception을 낸건지 진짜 에러인지 구분이 안 갈거다. 또한 예외는 예외 상황에 쓸 용도로 설계됐으므로 JVM에서 최적화 대상이 아니다. 코드를 try-catch 블록 안에 넣으면 JVM이 할 수 있는 최적화가 제한된다. 이런 패널티를 받으면서 굳이 exception으로 비즈니스 로직을 사용해야 하는지는 의문이다.

예외는 그냥 예외로만 사용하는 게 좋다. 제어 흐름용으로 사용하는 건 넌센스다. 그럼 exception 없이 제어하려면 어떻게 하면 될까? 단순하다. 상태 검사 로직을 넣으면 된다. 그것도 애매하면 옵셔널을 사용할 수도 있다.

  1. 외부 동기화 없이 멀티쓰레드를 사용한다면, 외부 요인으로 상태가 변할 수 있다면 옵셔널이나 특정 값을 사용한다.
  2. 성능이 중요한 상황에서 메소드가 상태 의존적 메소드 작업 일부를 중복 수행하면 옵셔널, 특정 값을 사용
  3. 이외에는 상태 검사가 나을 수 있다.