안녕하세요, DeepCode 입니다. 이번 글에서는 이펙티브 자바 3판(Joshua Bloch)을 정리해보려고 합니다.
자바 개발자라면 누구나 한 번쯤 들어봤을 법한 고전 중의 고전을 드디어 제 책장에 들여놓게 되었습니다.
▶ 1. 이펙티브 자바 3판, 어떤 책인가요
이 책은 Joshua Bloch가 저술하였으며, 자바 프로그래밍의 핵심적인 베스트 프랙티스를 90가지 항목으로 나누어 설명합니다.
단순히 문법을 가르치는 것이 아니라, 왜 그렇게 코드를 작성해야 하는지에 대한 근본적인 이유를 제시합니다.
자바의 발전과 함께 업데이트된 3판은 최신 자바 기능들을 포함하여 더욱 견고한 가이드를 제공합니다.
▶ 2. Joshua Bloch가 제안하는 올바른 자바 설계 원칙
이 책을 관통하는 핵심은 단순히 작동하는 코드를 만드는 것이 아니라, 유지보수가 쉽고 안전하며 의도가 명확한 코드를 설계하는 것입니다.
객체 지향의 원칙을 자바라는 언어의 특성에 맞게 어떻게 구체화할 것인지에 대한 철학이 담겨 있습니다.
제 기준으로 정리하면, 이 책은 자바라는 언어의 설계자가 직접 들려주는 '정답지'와 같습니다.
▶ 3. 인상 깊었던 챕터 3가지
3.1 객체 생성의 안전성과 정적 팩터리 메서드
생성자를 통해 객체를 만드는 대신 정적 팩터리 메서드를 사용하는 기법이 매우 인상적이었습니다.
"정적 팩터리 메서드는 이름을 가질 수 있다." (p.32)
단순히 인스턴스를 반환하는 것을 넘어, 생성자의 한계를 극복하고 코드의 가독성을 높이는 방법을 배울 수 있었습니다.
3.2 상속보다는 컴포지션을 활용하라
클래스 간의 관계를 설정할 때 상속(Inheritance)이 가진 위험성을 경고하는 대목이 기억에 남습니다.
상속은 클래스 간의 결합도를 지나치게 높여서 예상치 못한 부작용을 낳을 수 있다는 점을 강조합니다.
대신 구성(Composition)을 통해 유연성을 확보하는 설계 방식이 실무에서 왜 중요한지 깨닫게 되었습니다.
3.3 인터페이스와 추상 클래스의 올바른 사용
인터페이스는 타입으로 사용될 때 가장 강력하며, 구현을 강제하기보다는 동작을 정의하는 데 집중해야 합니다.
"인터페이스는 가능한 한 가볍게 유지하라." (p.156)
불필요한 메서드를 추가하지 않고, 객체가 수행해야 할 역할을 명확히 정의하는 것이 설계의 핵심임을 알게 되었습니다.
▶ 4. 이펙티브 자바 3판을 실무에 적용하는 방법
- 생성자 호출이 복잡하거나 의미 전달이 모호할 때 정적 팩터리 메서드 도입을 검토합니다.
- 클래스 확장 시 상속 구조를 만들기 전에 컴포지션으로 해결할 수 있는지 먼저 고민합니다.
- Enum을 활용하여 싱글톤 패턴이나 타입 안전성이 필요한 상수를 관리합니다.
- 예외를 던질 때는 체크 예외보다는 언체크 예외를 사용하여 API 사용성을 높입니다.
- 컬렉션을 반환할 때는 반드시 수정 불가능한 뷰를 반환하여 내부 상태를 보호합니다.
▶ 5. 추천 대상 / 비추천 대상
자바 언어의 깊은 원리를 이해하고 싶은 주니어 개발자나, 코드 리뷰 시 논리적인 근거를 찾고 싶은 시니어에게 강력히 추천합니다.
단순히 자바 문법을 익히는 단계에 있는 입문자에게는 내용이 다소 무겁고 어렵게 느껴질 수 있어 비추천합니다.
이 책은 문법 공부가 아니라, '좋은 코드'에 대한 고민을 시작할 때 읽어야 하는 책입니다.
▶ 6. 함께 읽으면 좋은 책
객체 지향의 근본 원리를 다루는 '오브젝트'를 함께 읽으면 설계 능력을 키우는 데 큰 도움이 됩니다.
클린 코드(Clean Code)와 병행하여 읽는다면 코드의 질을 한 단계 더 높일 수 있을 것입니다.
관련 글 추천
Tistory
좀 아는 블로거들의 유용한 이야기
www.tistory.com
정리해보면, 이펙티브 자바 3판은 자바 개발자가 지향해야 할 설계의 기준점을 제시하는 필독서입니다.
단순한 테크닉을 넘어 언어의 철학을 이해함으로써 더 단단한 소프트웨어를 만들 수 있는 힘을 길러줍니다.
다음 글에서는 실무에서 바로 써먹는 디자인 패턴 적용 사례를 정리해 보겠습니다.
'책 서평 > IT 서적' 카테고리의 다른 글
| 클린 아키텍처 (Robert C. Martin) 핵심 정리·유지보수 가능한 설계 원칙 (0) | 2026.04.28 |
|---|---|
| 리팩터링 2판 (Martin Fowler) 핵심 정리·코드 품질을 높이는 설계법 (0) | 2026.04.28 |
| 함께 자라기 (김창준) 핵심 정리·애자일 학습과 협업의 원리 (0) | 2026.04.28 |
| 코드 컴플리트 2판 (Steve McConnell) 핵심 정리·소프트웨어 공학 가이드 (0) | 2026.04.28 |
| 실용주의 프로그래머 20주년 기념판 (Hunt & Thomas) 핵심 정리·서평 (0) | 2026.04.28 |
