예외가 함수 블랙박스를 훼손하는 이유
노트 유형: Cloze
Text
예외를 던지는 방식이 사람이 사용하기 어려운 이유(예외 처리가 실패하는 이유):
- 함수 블랙박스에서는 {{c1::함수 시그니처가 호출자와 제작자의 규약}}인데, 예외는 그 규약 밖의 통로라 함수가 올바르게 동작하지 않는다는 가정을 강요함
- 예외는 {{c2::콜스택을 타고 위로 올라가}} 호출 깊이가 깊어지면 어디서 발생했는지 추적하기 힘듦
- 예외 때문에 모든 함수 내부를 까보는 것은 {{c3::캡슐화}}에 위배됨 — 함수를 믿고 블랙박스처럼 쓰는 것이 올바른 추상화
- 그래서 포프샘은 오류 상황을 {{c4::반환값}}으로 알리는 것을 권함
Back Extra
- 예외는 개체지향과 비슷한 시점에 나왔을 뿐 독립적 (OOP의 일부가 아님)
- Java의 checked 예외는 2번(추적 어려움)에 대한 부분적 해답 — throws 절이 시그니처(규약)에 예외를 명시함 (45번 카드 참고: https://pocu-site.pages.dev/pocu-note/COMP2500/anki/45-checked-unchecked-rules/)
- 함수 위에 던지는 예외를 주석으로 표기하는 방법도 있지만, 일반적으로 사람들은 주석을 잘 읽지 않음
출처: https://pocu-site.pages.dev/pocu-note/COMP2500/013-exception/013-007-why-exception-handling-fails/