목록 보기
코드 품질 개선 기법 20편: 이례적인 예외 과대 포장
백엔드

코드 품질 개선 기법 20편: 이례적인 예외 과대 포장

라인
라인
2025년 9월 12일

두줄요약

리소스 해제용 `use` 구현에서 블록 예외와 정리 예외가 동시에 날 수 있음을 다뤘습니다. 예외를 새로 감싸기보다 우선순위를 정하고 suppressed 예외를 활용하라고 제안했습니다.

핵심 내용

  • use 같은 리소스 해제용 고차 함수에서, 블록 예외와 정리 과정 예외가 함께 발생할 수 있는 상황 정리
  • 예외를 별도 래퍼로 바꾸면 호출자의 catch가 기대대로 동작하지 않을 수 있다는 문제 제기
  • Throwable.addSuppressed로 보조 예외를 부가하고, 더 중요한 예외를 우선하는 방식 제안

주의할 점

  • 정리용 dispose 예외가 본 작업 예외를 덮어쓰지 않도록 우선순위 검토 필요
  • 확인된 예외를 RuntimeException으로 감싸면 호출부의 예외 처리 흐름이 달라질 수 있음
  • 부모-자식 관계의 예외를 여러 단계로 잡는 코드에서는 래핑 영향 점검 필요

적용해볼 점

  • 리소스 해제 패턴 구현 시 close/dispose 중 발생 가능한 예외까지 포함해 설계
  • 예외 포장보다 억제 예외(suppressed exception) 활용 검토

다음 읽기

#Kotlin 주제를 이어서 읽기

코드 품질 개선 기법 1편: 한 번 엎지른 <error>는 다시 주워 담지 못한다

에러 표현 방식은 복구 가능성과 호출자 처리 범위에 맞춰 선택해야 한다고 설명했습니다. 예시 코드에서는 입력 오류와 구현 실수를 다른 방식으로 분리해 개선했습니다.

라인
라인
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...