• 오류처리는 깨끗한 코드와 연관성이 있다.
  • 하지만 오류처리로 인해 프로그램 논리를 이해하기 어려워 진다면 깨끗한 코드라 부르기 어렵다.
  1. 오류 코드보다 예외를 사용하라.

    • 함수를 호출 하는 즉시 오류 를 확인하고 처리해야하기 때문에 복잡한다.
    • 그래서 그냥 예외를 던지면 편하다.
    • 코드도 깔끔해지고 로직을 이해하기가 더 쉬워진다.
  2. Try- Catch - Finally 문 부터 작성하라.

  • try-catch 문은 트랜잭션과 유사하다.
  • 예외가 발생할 코드를 짤때는 try catch 문 부터 작성하자.
  1. 미확인 ( Unchecked ) 예외를 사용하라.
  • 확인된 예외는 OCP를 위반한다.

    • 확인된 예외를 던졌는데 catch 블록이 세 단계 위에 있다면 그 사이 메소드 모두가 선언부에 해당 예외를 정의해야 한다.
    • 즉 하위 단계에서 코드를 변경하면 상위 단계 메서드 선언부를 전부 고쳐야 한다는 말이다.
  • 최상위 함수에서 점점 아래함수를 호출하여 최하위 함수에서 새로운 오류를 던진다고 했을떄

  • 확인된 오류를 던진다면 최하위 함수를 거쳐온 모든 함수들을 수정해야 한다. ( throws 절을 추가 하거나 catch 블록에서 예외처리 )

  • 그리고 모든 함수가 최하위 함수가 던지는 예외를 알아야 하므로 캡슐화가 깨진다.

  • 아주 중요한 라이브러리를 작성한다면 모든 예외를 잡아야 한다.

  • 하지만 일반적인 애플리케이션은 의존성이라는 비용이 이익보다 크다.

  1. 예외에 의미를 제공해라.
  • 오류메세지에 정보를 담아 예외와 함께 던지면 발생한 원인과 위치를 찾기가 쉬워진다.
  • 로깅도 사용한다면 catch 블록에서 오류를 기록하도록 충분한 정보를 넘겨준다.
  1. 호출자를 고려해 예외 클래스를 정의하라.
  • 애플리케이션에서 오류를 정의할때 프로그래머에게 가장 중요한 관심사는

  • 오류를 잡아내는 방법 이 되어야 한다.

  • 외부 api를 사용할때 wrapper 클래스를 하나 만들어서 예외 처리하는 것은 좋은 방법이다.

  • 외부 api를 감싸면 외부 라이브러리와 프로그램 사이에 의존성이 크게 줄어든다.

  • 갈아끼우는것도 쉽다. wrapper 클래스에서 수정하면 되기 떄문.

  • ( wrapper 클래스 작성하는 비용이면 그냥 wrapper 클래스 안쓰고 class에 쓰면 되지않나 ? )

  • ( 의존성이 줄어든다는 장점때문에 wrapper를 사용하는것 같다 )

  • 흔히 예외 클래스가 하나만 있어도 충분한 코드가 많다.

  • 예외 클래스에 포함 된 정보로 오류를 구분해도 괜찮은 경우가 그렇다.

  • 한 예외는 잡아내고 다른 예외는 무시해도 괜찮은 경우라면 여러 예외 클래스를 사용한다.

  • ( 이 3문단이 이해가 안된다. )

  1. 정상 흐름을 정의하라.
  • 비즈니스와 오류처리가 잘 분리되면 코드가 대부분이 깨끗하고 간결하게 보인다.

  • 하지만 그러다보면 점점 오류처리가 저 멀리 떨어져 나가게된다

  • 굳이 예외처리를 안하는 상황이 있다.

  • 이를 특수사례 패턴이라 부른다.

  • 클래스를 만들거나 객체를 조작해 특수사례를 처리하는 방식이다.

  • 그러면 클라이언트 코드가 예외적인 상황을 처리할 필요가 없어진다.

  • 클래스나 객체가 예외적인 상황을 캡슐화해서 처리하므로.

  • ( 굳이 예외처리가 코드를 복잡하게 만든다면 Martin Fowler의 Special Case Pattern을 사용하자.(참조 3) )

  1. null을 반환하지 마라.
  • null을 반환하는 코드는 호출자에게 일거리를 늘려주는일이다.
  • null대신에 특수사례 객체를 반환하자.
  • 사용하려는 외부 API가 null을 반환한다면 wrapper method를 구현해 예외를 던지거나
  • 특수사례 객체를 반환하는 방식을 고려한다.
  • 많은 경우에 특수사례 객체가 손수윈 해결책이다.
  1. null을 전달하지 마라.
  • 정상적인 인수로 null을 기대하는 API가 아니라면 메서드로 null을 전달하는 코드는 최대한 피한다.
  • assert문을 사용해서 null체크 하는것도 괜찮은 방법이다.
  • ( 신기하다 다시보자 )

결론

  • 깨끗한 코드는 읽기도 좋아야 하지만 안전성도 높아야 한다.

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

9장 - 단위 테스트  (0) 2020.12.02
8장 - 경계  (0) 2020.11.30
6장 - 객체와 자료구조  (0) 2020.11.25
5장 - 형식 맞추기  (0) 2020.11.23
4장 - 주석  (0) 2020.11.22

+ Recent posts