아이템 69. 예외는 진짜 예외 상황에만 사용하라 #157
Unanswered
Irisation23
asked this question in
3. 과제
Replies: 1 comment
-
@bunsung92 님의 아이템 정리는 회고 파트가 참 알짜배기인 것 같습니다. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
📝 구성
Table of contents generated with markdown-toc
0. TL;DR 🔨
예외를 정상 흐름에서 제어를 위해 사용하면 안된다.
또, 정상 흐름에서 제어하기 위해 예외를 사용해야하는 API 를 만들면 안된다.
1. 들어가기에 앞서 🤔
예외의 활용은 프로그램의
가독성
,신뢰성
,유지보수성
을 높일 수 있다.하지만 사용방법이 올바르지 못하다면 이와 반대의 효과를 가지게 된다.
어떻게 하면 효과적인 예외를 처리 할 수 있을지 고민해 보며, 예외 파트로 들어가 보자.
2. 잘못된 예외 사용
해당 코드 내용을 보면 대체 뭘하는 코드인지 알 수가 없다.
실제로 해당 코드는 배열의 끝에 도달해 ArrayIndexOutOfBoundsException가 발생하면 끝을 내는 코드이다.
해당 코드는 표준 관용구였다면 그냥 넘어 갈 수있다.
첫번째와 같은 예외 코드를 작성한 이유는 성능을 높이기 위해서이다.
JVM은 배열에 접근할 때 인덱스를 초과하는지 확인하는데, 반복문도 이와 같은 동작을 수행한다.
따라서 중복을 없애기 위해 예외를 사용한 것이다.
하지만 이는 다음의 세가지 이유로
잘못된 추론
이다.뿐만아니라 이 메서드의 이용은
Side Effect
에 노출 되어있을 가능성있다.만약 첫번째 예시에서 의도치 않은 곳에서 ArrayIndexOutOfBoundsException이 발생할 경우
프로그램은 종료되지 않고 계속 수행될 것이고, 이는 다른 곳에 영향을 주어 잘못 동작할 수 있다.
2.1 예외를 제어 흐름에 사용하면 안된다.
3. API 설계시의 예외
잘 설계된 API라면 클라이언트가 정상적인 제어 흐름에서 예외를 사용할 일이 없게 해야 한다.
특히
특정 상태
에서 호출할 수 있는 메서드는 상태 검사 메서드를 함께 제공해야 한다.Iterator API는 이처럼 hasNext를 함께 제공함으로써, 클라이언트가 직접 예외를 사용하지 않아도 되도록 설계하였다.
만약
상태 검사 메서드를 직접 제공하지 않는 경우
에는Optional
혹은null
과 같은특수한 값을 반환
하도록 해야 한다.3.1 상태 검사 메서드, 옵셔널, 특정 값(null) 선택의 지침
4. 핵심 정리 📚
예외는 예외 상황에서 쓸 의도로 설계되었다.
정상적인 제어 흐름에서 사용해서는 안되며, 프로그래머에게 강제하는 API를 둬서도 안된다.
5. 회고 🧹
2023-03-19 일
Beta Was this translation helpful? Give feedback.
All reactions