본문 바로가기
공부/스터디

[클린 코드] 3주차: 7, 8장

by nahowo 2025. 5. 29.

7장: 오류 처리

깨끗하게 오류 처리하기

try-catch-finally 문부터 작성하기

  1. 예외를 반환하는 단위 테스트 작성
  2. 단위 테스트에 맞춰 코드 구현
  3. 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