티스토리 뷰

도서/클린 코드

오류 처리

woo'^'chang 2022. 7. 16. 11:50

무엇이 잘못된다면 이를 바로 잡을 책임은 프로그래머에게 달려 있습니다. 그렇기에 깨끗한 코드와 오류 처리는 밀접한 관련이 있습니다. 하지만 오류 처리로 인해 중요한 로직이 가려지게 된다면 이는 제대로 된 오류 처리라 부를 수 없습니다.

 

이번 장을 통해 우아하고 고급스럽게 오류 처리하는 방법과 고려 사항에 대해 정리해보고자 합니다. 오류 처리를 생각했을 때 바로 떠오르는 방법들도 있습니다.

  • 오류 코드보다 예외를 사용하라
  • Try-Catch-Finally 문부터 작성하라
  • 예외에 의미를 제공하라

미확인 예외를 사용하라

확인된 예외는 컴파일 단계에서 확인되며 반드시 처리되어야 하는 예외입니다. 미확인 예외는 런타임 시 확인되며 명시적인 처리를 강제하지 않는 예외입니다.

 

확인된 예외는 안정적인 소프트웨어를 위해 사용이 주장되었으나 지금은 꼭 필요한 것은 아니라는 사실이 분명해졌습니다. 가장 큰 이유로는 OCP를 위반하는 데 있기 때문입니다. 호출의 가장 하단부에 존재하는 메서드에서 예외를 확인된 예외를 던지게 된다면 사이에 해당하는 메서드 모두 해당 예외를 정의해야 합니다. 모듈의 내용이 바뀐 것이 아님에도 다시 빌드해서 배포가 일어나야 합니다.

 

또한 연쇄적인 함수들이 예외를 알아야 하기에 캡슐화도 깨져버리는 단점이 존재합니다. 확인된 예외가 가지는 장점도 존재하지만, 의존성이라는 비용을 잘 고려하여 사용해야 합니다.

호출자를 고려해 예외 클래스를 정의하라

발생하는 모든 오류에 대해 각각의 catch 문이 존재한다면 호출자로서는 지저분한 코드가 되어 버립니다. 이를 처리하기 위해서는 던지는 예외를 잡아 일관성 있게 변환해주는 Wrapper 클래스를 생성하면 됩니다.

 

외부 API를 호출할 때 Wrapper 클래스를 사용하면 외부 라이브러리와 프로그램 사이 의존성이 줄어드는 효과도 존재합니다. 해당 Wrapper 클래스만 알맞게 변경하면 되기 때문입니다.

null을 전달하거나 반환하지 마라

매개변수로 전달되는 값이나 리턴값으로 반환되는 값이 null이 되어서는 안 됩니다. null 처리에 대한 책임을 호출자로 넘겨버리기 때문입니다. null을 반환할 가능성이 존재한다면 특수 사례 패턴을 사용하여 빈 값을 의미하는 객체를 반환하도록 해야 합니다. 코드도 깔끔해질뿐더러 NullPointerException이 발생할 가능성도 줄어듭니다.

마치며

깨끗한 코드는 가독성도 좋아야 하지만 안정성도 높아야 합니다. 프로그램의 논리적인 부분과 오류 처리에 대한 부분을 독자적인 사항으로 고려한다면 안정성 높고 깨끗한 코드를 작성할 수 있습니다. 또한 유지보수에도 도움을 줍니다.

'도서 > 클린 코드' 카테고리의 다른 글

단위 테스트  (0) 2022.07.17
경계  (0) 2022.07.17
객체와 자료 구조  (0) 2022.07.12
형식 맞추기  (0) 2022.07.10
주석  (0) 2022.07.09
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday