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 프로젝트¶
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>
첫 확인:
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 | 실패 테스트를 먼저 쓰고 최소 구현 후 정련 | 빨강을 본 뒤 초록으로 갔는가 |
장별 셀프 체크¶
- 이 장의 "문제 코드"를 직접 타이핑했는가
- 실패하는 테스트나 불편한 실행 결과를 먼저 확인했는가
- 한 번에 하나의 변경만 했는가
- 변경 후 테스트 또는 실행 결과를 확인했는가
- 왜 이 설계가 나아졌는지 한 문장으로 적었는가
- 현업 코드에서 같은 냄새가 나는 예를 하나 찾았는가
막힐 때¶
| 증상 | 대응 |
|---|---|
| 코드가 컴파일되지 않음 | 테스트 목표가 너무 큰지 확인하고, 클래스 껍데기부터 만듭니다 |
| 테스트가 왜 실패하는지 모르겠음 | 실패 메시지를 먼저 읽고, 기대값/실제값을 한 줄로 적습니다 |
| 리팩터링 중 깨짐 | 직전 초록 상태로 돌아가 변경 단위를 반으로 줄입니다 |
| 원칙은 알겠는데 적용이 안 됨 | 해당 장의 체크리스트를 자기 코드 한 파일에만 적용합니다 |