이펙티브 아키텍쳐 - 5. 오류, 실패, 예외
- 상속의 올바른 활용: 부모 클래스 메서드 본문 유무에 따라
final public 또는 protected를 지켜 템플릿 메서드 패턴을 구현하면 상속의 안티 패턴을 방지할 수 있습니다. 🛡️
- 조합(Composition)의 필요성: 상속이 조합 폭발 문제를 일으킬 경우 합성을 사용해야 하며, 코틀린의 인터페이스 위임 기능이 이를 편리하게 지원합니다. 🧩
- 합성 설계의 딜레마: 위임 객체와 컨테이너 객체 간의 적절한 통신 수준을 결정하는 것이 설계의 핵심 난제로, 너무 많으면 독립성 저해, 너무 적으면 불필요해집니다. ⚖️
- 오류(Error)의 정의와 유형: 런타임에 발생하며 처리가 가능한 문제로, '기대한 대로 동작하지 않음'이 기준입니다. 컨텍스트 오류는 발견하기 매우 어렵고 치명적입니다. 🐛
- 실패(Failure)의 특성과 대응: 복구 불가능하여 시스템 종료가 필요한 상태(예: 메모리 부족)로, 종료 지연을 통해 자원 정리, 로깅, 백업 등의 전략을 사용하며 보조 프로세서로 감시하기도 합니다. 💥
- 오류와 실패의 관계: 예측 불가능한 실패는 종종 처리되지 않은 오류들이 누적되어 발생하며, 소프트웨어 공학적으로는 오류 단계에서 조기에 해결하여 실패로 이어지지 않도록 하는 것이 중요합니다. 📈
- 자바 예외 처리의 철학: 성공은 리턴 타입, 실패는 예외 타입으로 시그니처에 반영하는 언어 내장 모나드 관점을 가지며, 주된 목적은 스택 트레이스 제공입니다. 📜
- 예외 처리의 부수 효과 분리: 함수 내부에서 예외를 처리하기보다
throw를 통해 외부로 던져, 호출자가 모달 띄우기 등 부수 효과 처리를 담당하게 하여 변화율이 다른 로직을 분리합니다. 📤
- 강제된 예외 처리의 문제점: 시그니처에 예외를 선언하면 호출자가
try-catch로 강제 처리해야 하는데, 이는 개발자에게 부담을 주어 빈 catch 블록을 유발하기도 합니다. 😠
Throwable 클래스의 역할: 자바 가상 머신의 스택 트레이스 추적 기능을 내장하고 있어, 모든 예외 및 오류는 이 클래스를 상속받아야 합니다. 🔍
- 메서드 내부 내결함성 최소화: 함수는 오류를 내부에서 처리하기보다 예외를 던져 외부에서 처리하게 함으로써, 함수의 동작을 명확히 하고 추적 가능성을 높이는 것이 바람직합니다. 🚫
데브허브 | DEVHUB | 이펙티브 아키텍쳐 - 5. 오류, 실패, 예외