본문 바로가기

카테고리 없음

7장 오류 처리

  • 예외를 사용하라! 개념을 뒤섞지 말고, 원하는 로직을 처리하는 알고리즘과 오류를 처리하는 알고리즘 분리
  • try-catch-finally 잘 활용하기. try에서 무슨 일이 생기든 catch블록이 프로그램 상태를 일관성있게 유지. 호출자가 기대하는 상태 정의하기 쉬워진다.
  • 먼저 강제로 예외를 일으키는 테스트 케이스를 작성하고, 테스트를 통과하도록 코드를 작성하라.
  • 확인된 예외는 메서드의 일부기 때문에 메서드 사용할 때 선언된 것과 일치하지 않으면 오류 발생. OCP(Open Closed Principle) 위배. 하위 단계 코드 변경시 상위 단계 선언부도 전부 고쳐야(catch에서 새로운 예외 처리, throw 절 추가 등 연쇄적 수정. 모든 함수가 최하위 함수에서 던지는 예외를 알아야하므로 캡슐화 깨짐)
  • 따라서 unchecked exception 활용
  • Exception 던질 때 항상 정보, 전후 상황 제공
  • 호출자 고려해서 Exception Class 정의하기. 오류 발생 위치(컴포넌트별), 유형(디바이스 실패, 네트워크 실패, 프로그래밍 오류)으로 분류.
  • 예외를 잡아 변환하는 Wrapper Class (감싸기) 활용. 호출하는 라이브러리 API를감싸면서 예외 유형 한 개 반환. 외부 api 사용할 때 감싸기 기법이 최선이다. 외부 라이브러리와 프로그램 사이의 의존성을 크게 줄이고, 다른 라이브러리로 변환 비용도 적고, 테스트도 쉽다. 기존 api 설계 방식에 발목잡히지 않는다.
  • 한 예외는 잡고 다른 예외는 무시해도 괜찮다면 여러 예외 클래스 사용하면 됨.
  • 정상 흐름을 정의한다. 특수 상황을 처리할 필요 없게. 필요없는 예외처리를 방지. 기본값을 반환하도록 만든다.
  • 이를 Special Cas Pattern 특수 사례 패턴. 클래스를 만들거나 객체를 조작해 특수 사례를 처리하는 방식. 클래스나 객체가 예외적인 상황을 캡슐화해서 클라이언트가 예외를 처리할 필요가 없어진다.
  • null 반환 금지! 일거리 늘릴 뿐. 호출자에게 문제 떠넘긴다. null 대신 Exception이나특수 사례 객체를 반환해라. 똑같은 방식으로 외부 API가 널을 반환하면 감싸기 메서드 구현해 예외처리 하거나 특수사례 객체 반환. null 보다는 차라리 emptyList 반환해라. 애초에 null 을 인자로 넘기지 못하도록.