콘텐츠로 이동

5권 도서 공통 가이드 — 읽는 순서·실습 환경

목적

오브젝트·Effective Java·리팩터링·Clean Code·TDD 5권의 공통 허브입니다. 5권이 서로 어떤 자리를 맡는지(오각형), 어떤 순서로 읽는지(추천 학습 순서), 강의 교재를 읽고 끝내지 않고 직접 손으로 확인하는 공통 실습 환경을 이 페이지 한 곳에서 관리합니다. 각 책 카드와 강의 교재 인덱스는 이 페이지를 가리킵니다.

5권 도서 오각형 — OO 설계 학습의 5권 세트

같은 OO·품질 결론을 5권이 서로 다른 단위·시점으로 가리킵니다.

책 관점 단위 시점 언어
entity-object 오브젝트 책임 주도 설계 (목적지) 객체·협력·역할 처음부터 잘 설계 Java
entity-effective-java Effective Java 90 권고 (매뉴얼) 메서드·필드·생성자 매번 짤 때 Java
entity-refactoring 리팩터링 2판 카탈로그 (가는 길) 1단계 변환 이미 짠 코드 JS (2판)
entity-clean-code Clean Code 미시 규칙 + 휴리스틱 줄·이름·함수 매 라인 Java
entity-tdd TDD 사이클 (만드는 과정) 사이클 1회 (분) 코드 짜기 전 Java + Python

앞의 4권이 잘 쓰인 코드의 결과(객체·메서드·1단계 변환·줄)를 그린다면, TDD는 그 결과에 도달하는 과정을 그립니다. 그래서 5권이 한 세트가 됩니다.

책 누구에게
Clean Code 신입~3년차의 줄 단위 가독성 (가장 빠른 효과)
Effective Java 1~5년차 자바 개발자의 매일 권고
리팩터링 레거시 코드를 매일 만지는 사람
오브젝트 3~10년차 설계자·리뷰어
TDD 테스트를 뒤로 미루는 습관을 깨고 싶은 모두

추천 학습 순서

순서 범위 얻는 것
1 Clean Code 2·3·4·10장 줄·이름·함수·클래스의 기본기 (가장 빠른 효과)
2 Effective Java 2·3·8·10장 매일 짜는 Java 코드의 권고
3 리팩터링 3장(24 악취) + 6장(기본 리팩터링) 기존 코드를 개선하는 어휘
4 오브젝트 1~5장 OO 설계의 큰 그림 (여유가 있으면 11장 합성까지)
5 TDD 1·2부 테스트가 설계를 끌어내는 과정
6 5권 교차 참조 같은 원리를 다른 진입점으로 다시 확인

공통 실습 루틴

각 장은 책이 달라도 같은 루틴으로 진행합니다.

[읽기] 문제 상황 파악
  ↓
[빨강] 테스트 또는 실행 예로 현재 문제 확인
  ↓
[초록] 가장 작은 수정
  ↓
[정련] 이름·책임·중복·의존성 정리
  ↓
[기록] 체크리스트와 퀴즈로 인사이트 고정

기본 도구

도구 용도 확인 명령
Java 17+ 오브젝트·Effective Java·Clean Code·TDD 1부 실습 java -version
Maven 또는 Gradle JUnit 5 테스트 실행 ./mvnw test 또는 ./gradlew test
JUnit 5 TDD·리팩터링 안전망 테스트 실패/성공 확인
AssertJ 읽기 쉬운 단언 assertThat(...)
Python 3 TDD 2부 xUnit 예제 python3 --version
Node.js 20+ 리팩터링 1장 JavaScript 예제 node --version

최소 Maven 프로젝트

book-lab/
├── pom.xml
└── src/test/java/study/BookLabTest.java

pom.xml 예시입니다. 이미 팀 표준 BOM이나 Spring Boot 프로젝트가 있으면 그 버전을 우선합니다.

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>study</groupId>
  <artifactId>book-lab</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <maven.compiler.release>17</maven.compiler.release>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.11.4</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <version>3.27.3</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.5.2</version>
      </plugin>
    </plugins>
  </build>
</project>

첫 확인:

./mvnw test

Maven Wrapper가 없다면 mvn test로 시작해도 됩니다.

도서별 실습 방식

책 주 실습 방식 확인할 것
src-clean-code-lecture 이름·함수·주석·클래스 단위로 Before/After 작성 읽는 사람이 의도를 바로 아는가
src-effective-java-lecture 각 Item을 작은 테스트/클래스로 확인 API 선택의 장단점을 설명할 수 있는가
src-refactoring-lecture 기존 테스트를 안전망으로 두고 작은 단계로 구조 변경 매 단계 테스트가 초록인가
src-object-lecture 한 객체가 남의 내부를 만지는 코드를 책임 이동으로 바꿈 getter 호출이 메시지 전송으로 바뀌는가
src-tdd-lecture 실패 테스트를 먼저 쓰고 최소 구현 후 정련 빨강을 본 뒤 초록으로 갔는가

장별 셀프 체크

  • 이 장의 "문제 코드"를 직접 타이핑했는가
  • 실패하는 테스트나 불편한 실행 결과를 먼저 확인했는가
  • 한 번에 하나의 변경만 했는가
  • 변경 후 테스트 또는 실행 결과를 확인했는가
  • 왜 이 설계가 나아졌는지 한 문장으로 적었는가
  • 현업 코드에서 같은 냄새가 나는 예를 하나 찾았는가

막힐 때

증상 대응
코드가 컴파일되지 않음 테스트 목표가 너무 큰지 확인하고, 클래스 껍데기부터 만듭니다
테스트가 왜 실패하는지 모르겠음 실패 메시지를 먼저 읽고, 기대값/실제값을 한 줄로 적습니다
리팩터링 중 깨짐 직전 초록 상태로 돌아가 변경 단위를 반으로 줄입니다
원칙은 알겠는데 적용이 안 됨 해당 장의 체크리스트를 자기 코드 한 파일에만 적용합니다

관련 페이지