오류 처리

  • 상당수의 코드는 오류를 처리하는 코드로 구성됨
  • 오류를 예외로 처리함으로써 코드를 더욱 클린하게 작성할 수 있음

오류 코드보다 예외를 사용하라

  • 오류코드(오류플래그)를 사용한 if/else를 통해 처리하는것 보다 예외를 던지는 코드가 클린 코드임
  • 오류처리에 대한 코드가 catch문에 작성되기 때문에 오류처리코드가 비즈니스로직과 분리됨
  • 이를 위해 try-catch-finally문 부터 작성필요
  • 단위 테스트에서 오류발생케이스(강제로 예외를 일으키는)를 먼저 작성하고 정상동작 케이스를 작성하는 것을 권장
    • 이는 try블록의 트랜젝션 범위부터 구현하도록 하므로 트랜젝션의 본질을 유지하기 쉽게 만듬

미확인 예외를 사용하라

  • 이전에는 확인된 예외처리를 사용하는것이 좋은 관습으로 여겨졌음
  • 그러나 학인된 오류를 처리하는 비용이 발생
  • 여기서 비용은 OCP(Open Closed Principle)을 위반하는것
    • 여러개의 중첩된 호출이 존재할때 모든 중첩에 해당예외에 대한 catch를 작성해야하는것

예외에 의미를 제공하라

  • 예외를 던질때는 전후 상황을 충분히 덧붙혀야함
    • 오류 원인을 찾기 쉽게 만듬
  • 실패 연산 이름, 실패 이유등의 정보를 담아 던짐

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

  • 오류를 분류하는 방법은 다양하게 존재함
    • 오류 발생 위치
    • 오류 발생 컴포넌트
    • 유형
  • 오류를 정의할 때 프로그래머에게 가장 중요한 관심사는 오류를 잡아내는 방법
  • 외부 api를 사용할때는 감싸기 기법이 최선
    • 예외가 발생할 만한 구분을 감싸는 클래스를 만들어 예외발생 상황을 구분하는것

정상 흐름을 정의하라

  • 비즈니스로직과 오류 처리가 분리된 코드에서 외부api를 감싸는 코드 추가로 인해 오류처리가 언저리로 밀려나게됨
  • 외부 api를 감싸 독자적인 예외를 던지고, 코드 위에 처리기를 정의해 중단된 계산을 처리
  • 때로는 중단이 적합하지 않을 경우가 존재

Null을 반환하지마라

  • 오류처리에서 흔히 저지르는 바람에 오류를 유발하는 행위가 존재
  • 그 중 첫째가 null을 반환하는 습관
  • 메서드 호출마다 null이 반환됬는지 아닌지 체크하는 if문이 중첩으로 추가되어야함
  • 리스트를 반환하여 반복자로 요소존재여부에 따라 실행하도록 하는것이 깔끔함

Null을 전달하지마라

  • 메서드의 파라미터로 null을 전달하는 방식도 나쁨