예외에서 프로그램 안에다 범위르 정의한다는 사실은 매우 흥미롭다. try블록에서 무슨 일이 생기든지 catch블록은 프로그램 상태로 일관성 있게 유지해야한다.
확인된 예외는 OPC를 위반한다. 메소드에서 확인된 예외를 던졌는데 catch 블록이 세 단계 위에 있다면 그 사이 메소드 모두가 선언부에 그 예외를 정의해야 한다. 즉, 하위 단계에서 코드를 변경하면 상위 단계 메소드 선언부를 전부 고쳐야 한다는 소리다.
확인된 오류를 던진다면 함수는 선언부에 throws 절을 추가해야 한다. 그러면 수정한 함수를 호출하는 함수 모두가 catch를 사용하거나 throws절을 추가해야 한다는 소리다. 그로인해 캡슐화가 깨진다.
null을 반환하는 코드는 일거리를 초래할 뿐 아니라 호출자에게 문제를 떠넘긴다.
null을 반환한다면 책에서 말하는 대로 null검사를 해야하는 코드가 강제되며, 만약 빠뜨린다면 실수를 범하게 되는 것이다. JAVA 8 이후로는 Optional을 이용해 NullPointerException을 방지할 수 있다.
지금은 아니지만, 옛날 예외처리에 대한 개념이 없으면서 try-catch 문을 마구잡이로 사용하던 시절이 있었다. 그때는 별다른 방법이 없어서 그대로 사용했는데, 클린코드를 읽는 지금은 예외 처리에 대한 개념이 한 층 쌓여가는 느낌이 든다.