7장: 오류 처리
깨끗하게 오류 처리하기
try-catch-finally 문부터 작성하기
- 예외를 반환하는 단위 테스트 작성
- 단위 테스트에 맞춰 코드 구현
- catch 블럭에서 예외 잡기
- 강제로 예외를 발생시키는 테스트 케이스를 작성하면 try 블럭의 트랜잭션 범위부터 구현할 수 있다.
언체크 예외 사용하기
일반적인 애플리케이션은 의존성이라는 비용이 이익보다 크다.
- 체크 예외는 OCP 원칙을 위반한다.
- 하위 단계의 코드를 수정하면 상위 단계 코드도 전부 고쳐야 한다.
예외에 의미 제공하기
- 오류 메시지에 전후 상황, 실패한 연산 이름, 실패 유형을 담아 오류 발생 원인/위치를 찾기 쉽도록 한다.
호출자를 고려해 예외 클래스 정의하기
- 오류를 분리하는 이유는 오류를 잡아내기 쉽도록 하기 위해서이다.
- 예외 클래스의 정보로 오류를 구분해도 괜찮은 경우: 예외 클래스 하나로 처리
- 예외 중 무시해도 괜찮은 예외가 있는 경우: 여러 예외 클래스 사용
정상 흐름 정의하기
- 예외 흐름 때문에 로직을 파악하기 어려운 경우 특수 사례 패턴을 이용해 정상 흐름만 정의한다.
- 특수 사례 패턴은 클래스를 만들거나 객체를 조작해 특수 사례를 처리하여 클라이언트 코드가 예외 상황을 처리하지 않도록 하는 패턴이다.
null 반환/전달하지 않기
- null을 직접 반환하는 대신 예외를 던지거나 특수 사례 객체를 반환한다.
- null을 인수로 전달하지 못하도록 금지한다.
- 가독성과 안정성은 상충되는 개념이 아니다.
- 오류 처리와 프로그램 로직을 분리하자.
8장: 경계
소프트웨어 경계
패키지/프레임워크 제공자는 적용성을 넓히려고 하고, 사용자는 자신의 요구에 특화된 인터페이스를 바란다.
- 외부 코드를 우리 코드에 통합하는 소프트웨어 경계에서 문제 발생
외부 코드 사용의 문제점
- 외부 코드는 다양한 기능과 유연성을 제공 → 외부 코드 자체를 사용하면 서비스에 특화된 제한 불가능
- java.util.Map에는 어떤 객체도 넣을 수 있음(제한 X)
- 현재 사용자에게 필요하지 않은 기능까지 제공
- 인터페이스 변경 시 수정할 코드가 많음
캡슐화
- 경계 인터페이스를 이를 사용하는 클래스 안으로 숨겨 캡슐화
- 가독성 증가, 오용 가능성 감소 → 설계 규칙과 비즈니스 로직을 따르도록 강제
- 외부 코드 변경 시 클라이언트 코드 변경 최소화
어댑터 패턴
- API 사용을 캡슐화해 API 변경 시 수정되는 코드를 한 곳에 집중
외부 코드 테스트
- 외부 코드가 예상대로 동작하는지 확인
- 오류가 발생했을 때 외부 코드에서 발생한 문제라면 빠르게 확인 가능
- 테스트를 통해 외부 코드 동작 방식 학습(학습 테스트)
- 경계에 위치하는 코드 분리
- 통제 불가능한 외부 코드에 의존하기보다는 통제 가능한 우리 코드에 의존
- 외부 코드 호출을 최대한 줄여 경계 관리
'공부 > 스터디' 카테고리의 다른 글
| [클린 코드] 5주차: 11, 13장 (2) | 2025.06.06 |
|---|---|
| [클린 코드] 4주차: 9, 10장 (0) | 2025.05.29 |
| [클린 코드] 2주차: 5, 6장 (1) | 2025.05.16 |
| [클린 코드] 1주차: 3장 (0) | 2025.05.10 |