Java

[Effective Java] 10-2. 예외

noahkim_ 2025. 1. 1. 03:28

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다.

 

1. 추상화 수준에 맞는 예외를 던지라

예외 번역

  • 상위계층에서는 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 변경
  • 스스로 처리하기 어려운 경우 사용

 

예외 연쇄

  • 근본 원인인 저수준 예외를 고수준 예외에 실어 보내는 방식
  • 디버깅에 도움이 될 경우 사용

 

2. 메서드가 던지는 모든 예외를 문서화하라

  • 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화하기
  • 비검사 예외는 선언의 throws에 포함시키지 말기

 

3. 예외의 상세 메시지에 실패 관련 정보를 담으라

  • 실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 함

 

4. 가능한 한 실패 원자적으로 만들라

  • 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 함

 

실패 원자성 확보하기

  • 매개변수 유효성 검사하기
  • 불변 객체로 설계하기
  • 임시복사본에서 작업 수행 후, 성공하면 원래 객체와 교체하기
  • 작업 도중 실패를 가로채는 복구 코드를 작성하여 작업 전 상태로 되돌리기

 

5. 예외를 무시하지 말라

  • 무시할 경우, catch 블록 안에 그렇게 결정한 이유를 주석으로 남기기

'Java' 카테고리의 다른 글

[Effective Java] 11-2. 동기화  (1) 2025.01.03
[Effective Java] 11-1. 동기화  (0) 2025.01.01
[Effective Java] 10-1. 예외  (0) 2025.01.01
[Effective Java] 9-1. 일반적인 프로그래밍 원칙  (0) 2025.01.01
[Effective Java] 8-2. 메서드  (0) 2024.12.31