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

[클린 코드] 4주차: 9, 10장

by nahowo 2025. 5. 29.

9장: 단위 테스트

⌜단위 테스트⌟ - 블라디미르 코리코프

  • 단위 테스트의 구조
    • 준비-실행-검증
    • 실행 구절은 한 줄을 넘기면 안 됨, 넘어가면 API의 캡슐화가 지켜지지 않은 것
    • 검증 구절(Assert)은 한 테스트에서 여러 가지를 검증해도 되지만 너무 커지는 것은 지양해야 함
  • 좋은 단위 테스트의 요소
    • 리팩토링 내성: 테스트를 실패로 바꾸지 않고 애플리케이션 코드를 리팩토링할 수 있는지 여부
    • 테스트는 코드에 유연성, 유지보수성, 재사용성을 제공한다.
    • 테스트 코드를 깨끗하게 유지하면 실제 코드도 지속적으로 깨끗하게 유지할 수 있음

깨끗한 테스트 코드

깨끗한 테스트 코드를 만들려면 가독성이 필요하다.

Build-Operate-Check 패턴

  • 각 테스트 구조를 명확히 세 부분으로 나눔

도메인 특화 언어(DSL)

  • 시스템 조작 API 대신 테스트 코드에서 사용하는 특수 API를 작성 → 모킹?
  • 테스트 API에 적용되는 표준은 실제 코드에 적용되는 표준과 다를 수 있음

깨끗한 단위 테스트 원칙 - FIRST

  • Fast: 테스트는 빠르게 돌아야 함
  • Independent: 각 테스트는 서로 독립적으로 수행되어야 함
  • Repeatable: 어떤 환경에서도 반복 가능해야 함
  • Self-Validating: 테스트는 불린값으로 결과를 내야 함(성공/실패)
  • Timely: 테스트는 테스트하려는 코드를 구현하기 직전에 구현해야 함

 

10장: 클래스

  • 클래스 작성을 위한 표준 자바 관례
    1. 변수 목록
      1. 정적 공개 변수
      2. 정적 비공개 변수
      3. 비공개 인스턴스 변수
    2. 공개 함수
    3. 공개 함수에서 호출하는 비공개 함수
  • 다른 대안이 없을 때 테스트 코드에서 접근을 허용하기 위해 protected 사용

클래스의 크기

책임

  • 클래스는 if, and, or, but을 사용하지 않고 설명할 수 있어야 함
  • SRP: 클래스는 하나의 책임만을 가져야 함
    • 클래스는 변경할 이유가 하나뿐이어야 함

응집도

  • 높은 응집도를 위한 법칙
    • 인스턴스 변수 개수는 적어야 함
    • 각 클래스 메서드는 클래스 인스턴스 변수를 하나 이상 사용해야 함
    • 메서드가 변수를 많이 사용할수록 응집도가 높음
    • 모든 인스턴스 변수를 메서드마다 사용하는 클래스가 응집도가 가장 높음
  • 응집도가 높으면 클래스에 속하는 메서드와 변수가 서로 의존하며 논리적 단위로 묶임
  • 응집도를 유지하면 클래스 분리 가능
    • 큰 함수 분리 → 인수를 전달하는 대신 사용되는 변수를 클래스 인스턴스 변수로 승격 → 메서드별로 사용하는 클래스 인스턴스 변수가 달라지므로 응집도가 낮아짐 → 사용하는 메서드와 변수를 묶어 여러 클래스로 분리

결합도

  • 시스템 요소끼리 격리되도록 하면 결합도가 낮아짐
    • 변경에 의한 클래스 범위가 최소화
    • 테스트하기 수월해짐
    • 유연성, 재사용성 증가
    • DIP를 따를 수 있음: 클래스는 구현이 아니라 추상화에 의존해야 함

'공부 > 스터디' 카테고리의 다른 글

[클린 코드] 5주차: 11, 13장  (2) 2025.06.06
[클린 코드] 3주차: 7, 8장  (0) 2025.05.29
[클린 코드] 2주차: 5, 6장  (1) 2025.05.16
[클린 코드] 1주차: 3장  (0) 2025.05.10