안녕하세요.
오늘 소개드릴 도서는 [실무로 통하는 클린코드(막시밀리아노 콘티에리 지음)] 입니다.
이 책은 개발자들이 실무에서 '클린 코드'를 어떻게 적용하면 좋을지, 작성법에 대해서 자세히 알려주는 책입니다.
클린 코드는 많은 개발자들이 중요성을 인식하고 있지만, 실제로 어떻게 적용해야 할지 막막해하는 경우가 많습니다.
이 책은 그런 고민을 해결해주는 실용적인 가이드라인을 제공해요.
==========
CHAPTER 1 클린 코드
_1.1 코드 스멜이란 무엇인가요?
_1.2 리팩터링은 무엇인가요?
_1.3 레시피는 무엇인가요?
_1.4 왜 클린 코드인가요?
_1.5 가독성, 성능 혹은 둘 다
_1.6 소프트웨어 유형
_1.7 기계 생성 코드
_1.8 이 책에서 사용하는 표현
_1.9 디자인 패턴
_1.10 프로그래밍 언어 패러다임
_1.11 객체 vs. 클래스
_1.12 변경성
CHAPTER 2 공리 설정
_2.0 소개
_2.1 왜 모델인가요?
_2.2 왜 추상적인가요?
_2.3 왜 프로그래밍이 가능해야 하나요?
_2.4 왜 부분적인가요?
_2.5 왜 설명 가능해야 하나요?
_2.6 왜 현실에 관한 것인가요?
_2.7 규칙 유추하기
_2.8 유일무이한 소프트웨어 설계 원칙
CHAPTER 3 빈약한 모델
_3.0 소개
_3.1 빈약한 객체를 풍성한 객체로 변환하기
_3.2 객체의 본질 파악하기
_3.3 객체에서 세터 제거하기
_3.4 빈약한 코드 생성기 제거하기
_3.5 자동으로 구현된 속성 제거하기
_3.6 DTO 제거하기
_3.7 빈 생성자 완성하기
_3.8 게터 제거하기
_3.9 객체의 난장판 방지하기
_3.10 동적 속성 제거하기
CHAPTER 4 기본형 집착
_4.0 소개
_4.1 작은 객체 생성하기
_4.2 기본형 데이터 구체화하기
_4.3 연관 배열 재구성하기
_4.4 문자열 남용 제거하기
_4.5 타임스탬프 구체화하기
_4.6 하위 집합을 객체로 구체화하기
_4.7 문자열 유효성 검증 구체화하기
_4.8 불필요한 속성 제거하기
_4.9 날짜 구간 생성하기
CHAPTER 5 가변성
_5.0 소개
_5.1 var를 const로 변경하기
_5.2 변수를 가변적이게 선언하기
_5.3 본질 변경 금지하기
_5.4 변경 가능한 상수 배열 피하기
_5.5 지연된 초기화 제거하기
_5.6 변경 가능한 상수 고정하기
_5.7 부작용 제거하기
_5.8 호이스팅 방지하기
CHAPTER 6 선언적 코드
_6.0 소개
_6.1 재사용 변수 범위 좁히기
_6.2 빈 줄 제거하기
_6.3 버전이 지정된 메서드 제거하기
_6.4 이중 부정 제거하기
_6.5 잘못 배치된 책임 변경하기
_6.6 명시적 반복 대체하기
_6.7 설계 결정 기록하기
_6.8 매직 넘버를 상수로 바꾸기
_6.9 ‘무엇’과 ‘어떻게’ 분리하기
_6.10 정규 표현식 문서화하기
_6.11 괴상한 조건문 재작성하기
_6.12 저급한 메서드 제거하기
_6.13 콜백 지옥에서 벗어나기
_6.14 올바른 오류 메시지 생성하기
_6.15 마법 변환 피하기
CHAPTER 7 명명
_7.0 소개
_7.1 약어 확장하기
_7.2 도우미와 유틸리티 이름 변경 및 분리하기
_7.3 my-객체 이름 변경하기
_7.4 result 변수 이름 변경하기
_7.5 타입이 포함된 변수 이름 변경하기
_7.6 긴 이름 변경하기
_7.7 추상적인 이름 변경하기
_7.8 맞춤법 오류 수정하기
_7.9 속성에서 클래스명 제거하기
_7.10 클래스와 인터페이스에서 첫 글자 제거하기
_7.11 basic/do 함수 이름 바꾸기
_7.12 복수형 클래스를 단수로 변환하기
_7.13 이름에서 Collection 제거하기
_7.14 클래스 이름에서 Impl 접두사/접미사 제거하기
_7.15 역할에 따라 인수 이름 변경하기
_7.16 중복된 매개변수 이름 제거하기
_7.17 이름에서 불필요한 컨텍스트 제거하기
_7.18 data 명칭 피하기
CHAPTER 8 주석
_8.0 소개
_8.1 주석 처리된 코드 제거하기
_8.2 더 이상 사용하지 않는 주석 제거하기
_8.3 논리적인 주석 제거하기
_8.4 게터 주석 제거하기
_8.5 주석을 함수명으로 변환하기
_8.6 메서드 내부 주석 제거하기
_8.7 주석을 테스트로 대체하기
CHAPTER 9 표준
_9.0 소개
_9.1 코딩 표준 준수하기
_9.2 들여쓰기 표준화하기
_9.3 대소문자 규칙 통일하기
_9.4 영어로 코드 작성하기
_9.5 매개변수 순서 통일하기
_9.6 깨진 유리창 수정하기
CHAPTER 10 복잡성
_10.0 소개
_10.1 반복되는 코드 제거하기
_10.2 설정/구성 및 기능 토글 제거하기
_10.3 속성으로 상태 변경하기
_10.4 코드에서 교묘함 제거하기
_10.5 다중 프라미스 끊기
_10.6 긴 협업 체인 끊기
_10.7 메서드를 객체로 추출하기
_10.8 배열 생성자 관리하기
_10.9 폴터가이스트 객체 제거하기
CHAPTER 11 블로터
_11.0 소개
_11.1 너무 긴 메서드 나누기
_11.2 과도한 인수 줄이기
_11.3 과도한 변수 줄이기
_11.4 과도한 괄호 제거하기
_11.5 과도한 메서드 제거하기
_11.6 너무 많은 속성 나누기
_11.7 import 목록 줄이기
_11.8 and 함수 나누기
_11.9 뚱뚱한 인터페이스 분리하기
CHAPTER 12 YAGNI 원칙
_12.0 소개
_12.1 불필요한 코드 제거하기
_12.2 다이어그램 대신 코드 사용하기
_12.3 하나의 하위 클래스를 가진 클래스 리팩터링하기
_12.4 일회성 인터페이스 제거하기
_12.5 디자인 패턴 남용 제거하기
_12.6 비즈니스 컬렉션 대체하기
CHAPTER 13 빠른 실패
_13.0 소개
_13.1 재할당 변수 리팩터링하기
_13.2 전제 조건 적용하기
_13.3 더 엄격한 매개변수 사용하기
_13.4 switch 문에서 기본값 제거하기
_13.5 순회하는 동안 컬렉션 수정 방지하기
_13.6 해시와 동등성 재정의하기
_13.7 기능 변경 없이 리팩터링하기
CHAPTER 14 if 문
_14.0 소개
_14.1 우발적 if 문을 다형성으로 대체하기
_14.2 이벤트의 플래그 변수 이름 변경하기
_14.3 boolean 변수 재구성하기
_14.4 switch/case/else if 문 대체하기
_14.5 하드코딩된 if 조건문을 컬렉션으로 대체하기
_14.6 boolean을 단락 평가 조건으로 변경하기
_14.7 암시적 else 추가하기
_14.8 조건부 화살표 코드 재작성하기
_14.9 무분별한 단락 평가 방지하기
_14.10 중첩된 화살표 코드 재작성하기
_14.11 조건 검사를 위한 boolean 값 반환 방지하기
_14.12 boolean 비교 변경하기
_14.13 긴 삼항식에서 추출하기
_14.14 비다형성 함수를 다형성으로 변환하기
_14.15 동등 비교 변경하기
_14.16 하드코딩된 비즈니스 조건 재정의하기
_14.17 불필요한 boolean 제거하기
_14.18 중첩된 삼항식 재작성하기
CHAPTER 15 null
_15.0 소개
_15.1 null 객체 생성하기
_15.2 선택적 체이닝 제거하기
_15.3 선택적 속성을 컬렉션으로 변환하기
_15.4 실제 객체로 null 대체하기
_15.5 null을 사용하지 않고 알려지지 않은 위치 표현하기
CHAPTER 16 섣부른 최적화
_16.0 소개
_16.1 객체 ID 피하기
_16.2 섣부른 최적화 제거하기
_16.3 비트 단위의 섣부른 최적화 제거하기
_16.4 과도한 일반화 줄이기
_16.5 구조적 최적화 변경하기
_16.6 앵커 보트 제거하기
_16.7 도메인 객체에서 캐시 추출하기
_16.8 구현에 기반한 콜백 이벤트 제거하기
_16.9 생성자에서 쿼리 제거하기
_16.10 소멸자에서 코드 제거하기
CHAPTER 17 결합도
_17.0 소개
_17.1 숨겨진 가정을 명시적으로 표현하기
_17.2 싱글턴 대체하기
_17.3 신 객체 나누기
_17.4 확산적 변경 나누기
_17.5 특수 플래그 값을 일반값으로 변환하기
_17.6 산탄총 수술 제거하기
_17.7 선택적 인수 제거하기
_17.8 기능에 대한 욕심 방지하기
_17.9 중간자 제거하기
_17.10 기본 인수를 맨 끝으로 이동하기
_17.11 파급 효과 피하기
_17.12 비즈니스 객체에서 우발적 메서드 제거하기
_17.13 사용자 인터페이스에서 비즈니스 코드 제거하기
_17.14 결합을 클래스로 대체하기
_17.15 데이터 덩어리 리팩터링하기
_17.16 부적절한 친밀성 분리하기
_17.17 대체 가능한 객체 대체하기
CHAPTER 18 전역
_18.0 소개
_18.1 전역 함수 구체화하기
_18.2 정적 함수 구체화하기
_18.3 goto를 구조화된 코드로 대체하기
_18.4 전역 클래스 제거하기
_18.5 전역 날짜 생성 변경하기
CHAPTER 19 계층
_19.0 소개
_19.1 깊은 상속 끊기
_19.2 요요 계층 분리하기
_19.3 코드 재사용을 위한 하위 분류 나누기
_19.4 is-a 관계를 동작으로 변경하기
_19.5 중첩 클래스 제거하기
_19.6 격리된 클래스 이름 변경하기
_19.7 구상 클래스를 final로 만들기
_19.8 클래스 상속 명시적으로 정의하기
_19.9 비어 있는 클래스 마이그레이션하기
_19.10 섣부른 분류 지연하기
_19.11 protected 속성 제거하기
_19.12 비어 있는 구현 완성시키기
CHAPTER 20 테스트
_20.0 소개
_20.1 private 메서드 테스트하기
_20.2 어서션에 설명 추가하기
_20.3 assertTrue를 특정 어서션으로 마이그레이션하기
_20.4 모의 객체를 실제 객체로 대체하기
_20.5 일반 어서션 다듬기
_20.6 불규칙한 테스트 제거하기
_20.7 부동 소수점에 대한 어서션 변경하기
_20.8 테스트 데이터를 실제 데이터로 변경하기
_20.9 캡슐화를 위반하는 테스트 보호하기
_20.10 관련 없는 테스트 정보 제거하기
_20.11 모든 병합 요청에 대해 커버리지 추가하기
_20.12 날짜에 의존하는 테스트 재작성하기
_20.13 새로운 프로그래밍 언어 배우기
CHAPTER 21 기술 부채
_21.0 소개
_21.1 프로덕션 종속 코드 제거하기
_21.2 결함 목록 제거하기
_21.3 경고/엄격 모드 해제 제거하기
_21.4 TODO와 FIXME 방지 및 제거하기
CHAPTER 22 예외
_22.0 소개
_22.1 비어 있는 예외 블록 제거하기
_22.2 불필요한 예외 제거하기
_22.3 예상 가능한 상황을 위한 예외 재작성하기
_22.4 중첩된 try/catch 재작성하기
_22.5 반환 코드를 예외로 대체하기
_22.6 예외 화살표 코드 재작성하기
_22.7 최종 사용자로부터 저수준 오류 숨기기
_22.8 예외 시도 범위 좁히기
CHAPTER 23 메타프로그래밍
_23.0 소개
_23.1 메타프로그래밍 사용처 제거하기
_23.2 익명 함수 재정의하기
_23.3 전처리 제거하기
_23.4 동적 메서드 제거하기
CHAPTER 24 타입
_24.0 소개
_24.1 타입 검사 제거하기
_24.2 참 같은 값 다루기
_24.3 부동 소수점을 십진수로 변경하기
CHAPTER 25 보안
_25.0 소개
_25.1 입력값 검열하기
_25.2 순차적 ID 변경하기
_25.3 패키지 의존성 제거하기
_25.4 악의적인 정규 표현식 대체하기
_25.5 객체 역직렬화 방지하기
==========
목차를 보시면 아실 수 있듯이 이 책의 내용은 정말 방대합니다.
클린 코드와 관련된 거의 모든 측면을 다루고 있다고 해도 과언이 아닙니다.
각 장은 코드 품질 향상을 위한 특정 주제에 초점을 맞추고 있어, 독자들이 체계적으로 학습할 수 있도록 구성되어 있습니다.
이 책의 가장 큰 장점은 다양한 프로그래밍 언어를 아우르는 예제를 통해 클린 코드 원칙이 실제로 어떻게 적용될 수 있는지 상세히 보여준다는 점입니다.
자바, 파이썬, PHP, C, 자바스크립트 등 여러 언어로 예제가 제공되기 때문에, 개발자들은 자신이 주로 사용하는 언어에 맞는 예제를 쉽게 찾아 학습할 수 있습니다.
이론을 실제 코드에 적용하는 데 큰 도움이 될 것 같습니다!
저는 개인적으로 추상적인 개념보다는 구체적인 예제를 통해 학습하는 것을 선호하는데, 이 책은 그런 면에서 매우 만족스럽습니다.
각 장마다 제공되는 실제 코드 예제와 실습은 클린 코드 원칙을 직관적으로 이해하고 적용하는 데 큰 도움이 됩니다.
특히 '문제-해결-설명' 구조로 이루어진 다양한 레시피는 실제 개발 과정에서 마주치는 문제들에 대한 해결책을 제시해 줍니다.
클린 코드라는 개념은 많은 개발자들에게 익숙하지만, 실제로 어떻게 적용해야 할지 모호하게 느껴지는 경우가 많습니다.
이 책은 그런 추상적인 개념을 구체적이고 실용적인 기술로 변환시켜 줍니다.
예를 들어, '가독성이 좋은 코드를 작성하라'는 일반적인 조언을 넘어서, 실제로 어떤 방식으로 변수명을 지어야 하는지, 함수를 어떻게 구조화해야 하는지 등의 구체적인 가이드라인을 제공합니다.
이 책에서 다루는 레시피의 양은 정말 방대하지만, 그 중 일부만이라도 실제 프로젝트에 적용한다면 코드 품질을 크게 향상시킬 수 있을 것입니다.
또한, 이 책을 통해 배운 원칙들은 새로운 문제에 직면했을 때 창의적인 해결책을 찾는 데에도 도움이 될 것입니다.
저는 이 책을 현업에서 일하는 개발자들에게 특히 추천하고 싶습니다.
이미 프로젝트 경험이 있는 개발자들이라면, 이 책에서 제시하는 방법들을 즉시 적용해볼 수 있을 것입니다.
또한, 주니어 개발자나 개발자를 준비하는 학생들에게도 매우 유용할 것 같습니다.
초기 단계부터 좋은 코딩 습관을 기르는 것은 장기적으로 큰 도움이 될 수 있으니까요!
로버트 C. 마틴의 <Clean Code(클린 코드)>가 클린 코드의 철학과 원칙을 설명한다면, 이 책은 그 원칙들을 실제로 어떻게 적용할 수 있는지 구체적인 방법을 제시한다고 하네요.
두 책을 함께 읽어보는 것도 도움이 될 것 같아요.
결론적으로, <실무로 통하는 클린코드>는 단순히 읽고 끝나는 책이 아니라, 지속적으로 참고하고 실천해 나가야 할 실용서라고 생각합니다.
이 책을 통해 배운 내용을 꾸준히 적용한다면, 더 나은 개발자로 성장할 수 있을 것입니다.
저도 이 책을 계속 옆에 두고, 프로젝트를 진행할 때마다 참고하며 제 코드의 품질을 높여나가보고싶어요.
그럼 이상 리뷰 마치겠습니다. 좋은 도서 제공해주신 한빛미디어 @hanbitmedia_official 감사드립니다!
====================
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
#도서제공 #서평단 #it #도서리뷰 #개발자 #개발 #컴공 #책리뷰