[클린코드] 챕터7 - 오류 처리

이호석·2022년 3월 2일
0

클린코드

목록 보기
8/9

챕터 7. 오류처리

Try-Catch-Finally문부터 작성하라

예외에서 프로그램 안에다 범위르 정의한다는 사실은 매우 흥미롭다. try블록에서 무슨 일이 생기든지 catch블록은 프로그램 상태로 일관성 있게 유지해야한다.

  • 예외가 발생할 코드를 짤 때는 Try-Catch-Finally 문으로 시작하는 편이 낫다. 그러면 try 블록에서 무슨 일이 생기든지 호출자가 기대하는 상태를 정의하기 쉬어진다.
  • TDD를 사용해 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트에 통과하는 코드를 작성하는 방법을 권장한다. 그러면 자연적으로 try 블록의 트랜잭션 범위부터 구현하게 되므로 범위내에서 트랜잭션 본질을 유지하기 쉬워진다.

미확인(unchecked) 예외를 사용하라

확인된 예외는 OPC를 위반한다. 메소드에서 확인된 예외를 던졌는데 catch 블록이 세 단계 위에 있다면 그 사이 메소드 모두가 선언부에 그 예외를 정의해야 한다. 즉, 하위 단계에서 코드를 변경하면 상위 단계 메소드 선언부를 전부 고쳐야 한다는 소리다.

확인된 오류를 던진다면 함수는 선언부에 throws 절을 추가해야 한다. 그러면 수정한 함수를 호출하는 함수 모두가 catch를 사용하거나 throws절을 추가해야 한다는 소리다. 그로인해 캡슐화가 깨진다.

null을 반환하지 마라

null을 반환하는 코드는 일거리를 초래할 뿐 아니라 호출자에게 문제를 떠넘긴다.

null을 반환한다면 책에서 말하는 대로 null검사를 해야하는 코드가 강제되며, 만약 빠뜨린다면 실수를 범하게 되는 것이다. JAVA 8 이후로는 Optional을 이용해 NullPointerException을 방지할 수 있다.

  • 예외에 의미를 제공하라 - 예외를 던질 때는 전후 상황을 충분히 덧붙인다.
  • 정상 흐름을 정의하라 - 예외를 처리할 상황 자체가 발생하지 않도록 코드를 구현해라.

7강 후기

지금은 아니지만, 옛날 예외처리에 대한 개념이 없으면서 try-catch 문을 마구잡이로 사용하던 시절이 있었다. 그때는 별다른 방법이 없어서 그대로 사용했는데, 클린코드를 읽는 지금은 예외 처리에 대한 개념이 한 층 쌓여가는 느낌이 든다.

0개의 댓글