메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

실무로 통하는 클린 코드

코드 품질과 디자인을 개선하는 208가지 실전 레시피

한빛미디어

번역서

판매중

  • 저자 : 막시밀리아노 콘티에리
  • 번역 : 이태영
  • 출간 : 2024-08-05
  • 페이지 : 488 쪽
  • ISBN : 9791169212779
  • 물류코드 :11277
  • 초급 초중급 중급 중고급 고급
4.8점 (32명)
좋아요 : 26

당신의 코드를 변화시킬 클린 코드 혁명
개발자 성장을 위한 최적의 코드 작성법

 

클린 코드를 실무에 적용하는 방법을 배워보세요. 이 책은 자바스크립트, PHP, 파이썬, 자바 등 다양한 프로그래밍 언어를 활용한 예제를 제공합니다. 다양한 언어를 넘나들며 가독성, 결합성, 테스트 가능성, 보안, 확장성 등 클린 코드의 핵심 개념을 깊이 있게 탐구합니다. 복잡한 코드베이스를 효과적으로 확장하고 유지 관리하는 방법부터 코드 스멜을 식별하고 해결하는 방법까지 소개합니다. 이 책은 모든 개발자에게 필수 덕목인 클린 코드 작성법을 소개하는 강력한 비법서입니다. 클린 코드의 이점을 직접 경험하고, 여러분의 개발 스킬을 한 단계 업그레이드할 차례입니다.

 

막시밀리아노 콘티에리 저자

막시밀리아노 콘티에리

25년 동안 소프트웨어 업계에 종사했으며 동시에 대학에서도 강의를 해왔습니다. 클린 코드, 리팩터링, 테스트 주도 개발 및 코드 스멜에 관해 꾸준히 글을 쓰고 있으며 인기 블로그 플랫폼에 매주 두어 편의 기사를 작성합니다. 선언적 및 행동적 코드의 팬이며 소프트웨어 기본 사항을 사용해 우아하고 강력한 솔루션을 구축하기를 즐깁니다.

이태영 역자

이태영

해외에서 유년 시절을 보내면서 컴퓨터 공학 학사, 석사 학위를 취득하고 이후에는 스타트업부터 대규모 기업 들을 다니면서 애드테크, 마케팅 등의 도메인에서 필요로 한 소프트웨어 개발 업무 경험을 쌓아왔습니다. 다양한 개발 경험을 기반으로 현재는 스타트업에서 소프트웨어 엔지니어로 일합니다.

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, 자바스크립트 등 다양한 언어의 예제를 통해 클린 코드의 원칙을 실제로 적용해보고, 가독성이 높고 유지 보수하기 용이한 코드를 작성하는 방법을 배워보세요.

 

누가 이 책을 읽어야 할까요?

  • 클린 코드를 구현하고 싶은 프로그래머, 소프트웨어 개발자, 아키텍트 등 현업 개발자
  • 이제 막 개발자의 길에 들어선 초보 개발자, 관련 학부생, 개발자 취업 준비생

 

어떤 내용을 배우나요?

  • 클린 코드가 개발자에게 왜 필요한지, 실제 업무에 어떻게 적용할 수 있는지 설명합니다.
  • 구체적인 예제와 실습을 통해 클린 코드의 원칙을 직관적으로 이해할 수 있습니다.
  • 리팩터링의 기술을 단계별로 터득하고, 코드 스멜을 식별하고 해결하는 방법을 알아봅니다. 
  • 개발자로서의 성장과 더 나은 코드 작성을 위한 실질적인 지침을 얻을 수 있습니다.

 

이 책은 실무에 바로 적용 가능한 클린 코드 비법을 소개하는 실습서입니다. 이론적인 설명과 실제 예제 코드를 통해 클린 코드 개념을 명확하게 이해해보세요. 이 개념을 여러분의 코드에 직접 적용해보면 클린 코드를 작성하는 스킬이 차근차근 향상될 것입니다. 코드의 품질을 높이고, 유지 보수를 용이하게 하며, 개발자로서의 경쟁력을 강화하고 싶다면 이 책을 통해 클린 코드의 세계로 첫발을 내딛을 차례입니다. 

 

추천사

 

이 책은 코드를 작성하며 마주칠 다양한 문제에 대한 해결 방법을 레시피 형식으로 제공해, 클린 코드에 대한 사고의 폭을 넓힐 수 있는 기회를 제공합니다. 저자가 세심하게 덧붙인 풍부한 참고 자료를 통해 더 깊이 있는 학습을 시작하기에도 좋습니다.


김규민, 백엔드 개발자

 

모든 소프트웨어 개발자는 클린 코드의 중요성을 인식하고 있지만, 실제로 코드를 작성하는 과정에서 클린 코드를 적용하기란 결코 쉽지 않습니다. 이 책은 클린 코드 원칙을 명확하고 체계적으로 제시하고 항목별 문제점과 해결 방법, 실제 적용 예시를 통해 실무에 어떻게 적용해야 하는지 명확하게 보여줍니다. 개인적인 이해와 학습을 넘어 팀원들과 함께하는 코드 검토나 표준 정의 과정에서도 훌륭한 가이드가 되어줄 겁니다.
 

김효진, 스타트업 개발자

 

좋은 품질의 코드를 만드는 건 자신과 동료를 위한 의무입니다. 이 책은 좋은 코드를 만들기 위한 레시피로 가득합니다. 평소 코드 품질에 대한 고민이 있었다면 이 책을 통해 바로 적용해보기를 추천합니다.
 

이동규, 데이터 엔지니어

 

처음 개발에 입문할 때는 끝없는 if 문과 for 문의 굴레에서 헤엄치는 경험을 아마 많이 해보셨을 겁니다. 개발을 처음 배울 때는 문법을 익히고 구현하는 것도 중요하지만, 그 과정에만 매몰되다 보면 서비스가 점점 커지면서 유지 보수나 확장이 어려워지게 됩니다. 따라서 프로그래밍 언어를 학습할 때 이 책도 함께 학습하기를 강력히 추천합니다. 쉽고 자세한 예시와 다양한 케이스를 통해 학습하다 보면 코드를 보는 시각이 한 단계 업그레이드될 것입니다.
 

이장훈, 데브옵스 엔지니어

 

가독성이 높고 혼동을 줄이며 오류 발생 가능성이 낮은 코드를 작성하는 방법을 소개하는 책이 나왔습니다. 이 책은 다양한 프로그래밍 언어에서 발생할 수 있는 '클린하지 않은' 코드를 개선하는 방법을 케이스별로 깊이 있게 알아봅니다. 간결한 코드를 예시로 사용하기 때문에 클린 코드를 지향하는 분이라면 어떤 언어로 작성된 코드든 쉽게 이해할 수 있을 것입니다. 클린 코드가 어렵고 추상적이라고 생각했지만, 구체적인 사례와 예시 코드를 통해 명확하게 이해할 수 있었습니다. 저 역시 클린 코드를 기술 부채로 여겼던 적이 있었는데 이 책을 통해 클린 코드 적용에 대해 충분히 고민해볼 수 있었습니다.
 

임혁, 휴노 파이썬 개발자

 

클린 코드를 어떻게 구성하는지에 제대로 집중한 책입니다. 많은 개발자가 매번 클린 코드를 만들기 위해 고민하지만, 그렇게 하지 못하거나 방법을 몰라 헤매던 시간이 있었을 것입니다. 하지만 이 책을 읽게 될 여러분은 그러한 시간을 거치지 않고도 바로 좋은 코드를 구성할 수 있는 운이 좋은 분들입니다!
 

전현준, OneLineAI CTO

 

“모두 기억할 수는 없다 해도 당신이 읽은 것이 당신을 만든다(You Are What You Read, Even If You Don’t Always Remember It)”라는 말이 있습니다. 이 책에서 제시하는 방대한 레시피를 모두 외우지는 못하겠지만, 책을 읽으며 이해하고 공감하며 때로는 의문이나 반론을 제기해보세요. 그러다 마지막 페이지를 덮고 나면 여러분은 분명 한층 성장한 개발자가 되어 있을 것입니다.
레시피를 전달하기 위해 이 책이 선택한 형식이나 다양한 언어로 예제를 설명하는 전략이 조금 부담스러울 수 있습니다. 하지만 그럼에도 불구하고 마음에 새겨야 할 내용과, 나아가 도그마처럼 여겨졌던 관행에 대해 용감하게 이의를 제기하는 내용으로 가득 찬 이 책은 끈기 있게 읽어낼 가치가 있습니다.
 

정현석, 일루미나리안 백엔드 개발자

 

밥 아저씨로도 알려진 로버트 C. 마틴의 유명한 도서, 『Clean Code(클린 코드)』(인사이트, 2013)가 출간된 지도 벌써 15년이 넘었습니다. 『Clean Code(클린 코드)』가 이론적 배경과 원칙 그리고 실제 코드에 클린 코드를 적용하는 일반적인 방법을 주로 설명하고 있다면, 이 책은 구체적인 예제 코드와 실제 개발 상황에 바로 적용할 수 있는 해결책을 제시하는 실용적인 도서입니다. 
원서 제목에 있는 ‘쿡북’에서도 유추할 수 있듯이 각 장과 세부 절이 마치 요리 레시피처럼 독립적인 형태로 구성되어 있어, 특정 문제에 대한 해결책을 목차를 통해 빠르게 찾아볼 수 있습니다. 하지만 가능하다면 처음부터 끝까지 한 번은 정독하길 권장하며, 이 책의 내용은 향후 코드 검토나 리팩터링을 진행할 때 분명 큰 도움이 될 것입니다. 이 책을 읽으면서 개발 속도만을 중시하며 주먹구구식으로 빠르게 코드를 작성하고, 작성된 코드를 검토하거나 개선하지 않고 그대로 방치했던 아주 예전의 제 과오가 떠올랐습니다. 만약 그때 이 책을 읽었다면 당시의 제 코드 품질이 훨씬 올라갔을 텐데 말입니다. 
 

최성욱, 삼성전자 VD사업부 Security Lab

 

이 책은 클린 코드를 적용했을 때와 그렇지 않았을 때의 장단점을 저자의 경험을 바탕으로 상세하게 설명합니다. 여러 프로그래밍 언어로 제공하는 예제는 이해하기 쉽고 따라 하기 간단한 코드로 구성되어 있어 저자가 전달하려는 개념을 쉽게 파악할 수 있습니다. 조잡하게 작성한 코드를 클린 코드로 개선하는 방법을 갈망하는 분들에게 이 책을 추천합니다.
 

추상원, 대구대학교 정보보호전공

 

종속성을 제거하거나 결합을 방지하는 방법, if 문을 다형성으로 대체하는 방법 등 클린 코드 작성을 위한 다양한 레시피를 ‘문제-해결-설명’ 구조로 제공하는 책입니다. 프로그램의 모델 개념과 실세계의 도메인을 수학의 전단사 개념으로 연결해 비교하는 MAPPER 개념을 도입한 것이 특징입니다. 수학의 공리 개념을 차용해 MAPPER를 통해 전제 조건을 명확히 하고 추상화의 늪에 빠지지 않도록 구체적인 틀을 잡아주는 점이 인상적입니다.
그 외 데메테르의 법칙 등 레시피 개념에 차용된 실제 철학의 아이디어를 노트로 보충 설명해 주제별로 깊이 있는 이해를 할 수 있게 도와줍니다. 예제는 15여 종의 다양한 언어로 구현되어 있으며 여러분에게 익숙하지 않은 언어를 사용한 예제일 경우에는 챗GPT와 같은 LLM이나 깃허브 코파일럿 등을 활용하면 도움이 될 것입니다. 『실용주의 프로그래머』(인사이트, 2022), 『리팩터링 2판』(한빛미디어, 2020) 등의 명저들과 함께, 프로그래머라면 누구나 한 번쯤은 정독해야 할 필독서라 생각합니다.
 

허민, 한국외국어대학교 데이터 분석가

/모든 길이 로마로 향하듯 모든 개발의 원활한 소통은 클린코드로부터
로마가 당대의 패자가 될 수 있던 이유는 무엇일까? 여러가지 요인 중 치수정비, 즉 길과 수로를 정비한 것을 주요 요인으로 꼽는 학자들이 많다. 잘 정비된 길은 물류와 군사가 이동하고 지역 생활의 건강에 영향을 끼친다. 마치 사람의 혈관이 깨끗해야 맑은 피가 돌고 건강할 수 있는 것과 같다. 그럼 소프트웨어가 세상을 집어삼기고 있는 현 시대에는 코드는 소프트웨어를 만들고, 코드의 품질은 소프트웨어의 품질과 유지 부성, 수명, 비용, 성능에 직접적으로 반영이 된다. 즉, 클린 코드를 짜고 유지하는 것이 맑은 피와 혈관, 깨끗한 도로를 유지하는 것과 같다.

소프트웨어가 아직 크게 발달할지 않았던 시절엔 단순히 문제를 해결하고 기능을 구현하는 게 개발의 우선 순위였다. 만들기 급급한데 제대로 정돈되고 깔끔한 코드를 만드는 건 사치였다. 하지만 이제 경험이 쌓이고 기술과 개발환경이 발달했으며 협업이 늘어나며 코드 작성에 대한 새로운 질문들이 나타나기 시작했다.

· 사람들이 이해하기 쉬운 코드를 작성하려면 어떻게 해야 할까?
· 코드를 오랫동안 안전하게 유지 보수할 수 있는 방법은 무엇일까?

적어도 자신들의 분야가 이미 성숙화되어 어지간한 문제점들에 대한 답이 나와있는 기존 산업 분야에 비해 디지털 분야는 이들이 부딪히는 문제가 인류가 최초로 부딪힌 문제일 확률이 높다. 떄문에 스스로 해결하거나 해결하지 못한채 묻어두고 그냥 일을 처리해야했다. 실시간 공유 및 문제점에 대한 교류를 나누지만 파편적인 정보공유로는 한계가 있었다.

이 책은 그러한 환경의 변화와 어려움 속에서 개발직군에 있는 사람들이 부딪히는 질문들에 대한 답을 담고 있다. 소프트웨어 개발에서 필요한 효율성과 클린 코드 원칙을 실무에 적용하는 방법과 노하우를 담고 있다. 책은 개발자들이 코드 품질을 높이고, 유지보수성과 가독성을 개선하는 데 중점을 두고 있으며 레시피 형태로 구성되어 있어 필요할 때 바로 해당 부분을 찾아 적용하기 수월하게 구성되어 있다.

/주요 내용
1. 클린 코드
-읽기 쉽고 이해가 쉽고 유지보수가 용이한 코드
-왜 쓰나? 개발자들이 더 효율적으로 작업, 협업할 수 있게 하기 위해
-클린 코드의 중요성과 기본 원칙

2. 코드 작성 원칙
-클린 코드를 작성하기 위한 다양한 원칙과 모범 사례
-(예) 함수의 크기, 변수명, 주석의 사용 등 코드의 가독성을 높이는 방법 등

3. 실제 사례 분석
-실제 예제를 통한 클린 코드 원칙 적용사례
-클린코드 이론을 실제 상황에 적용하는 법

4. 리팩토링 기법
-기존 코드 품질 개선을 위한 리팩터링 기법
-코드의 구조를 개선하고 버그를 줄일 수 있는 방법 습득

5. 팀워크와 클린 코드
-클린 코드 작성과 팀워크간의 긍정적 상호작용
-팀 내에서의 코드 리뷰 및 협업의 중요성

/책의 의의
-난이도: 중상. 실무 개발자
1. 실용적인 접근: 실제 사례를 중심으로 즉시 적용할 수 있는 유용한 팁 제공
2. 코드 품질 향상: 클린 코드를 통해 소프트웨어의 품질을 높이고, 유지보수 비용을 줄이는 데 기여
3. 팀워크 증진: 팀 내에서의 협업을 강조하여, 개발자 간의 원활한 소통과 협력증진

이 책은 소프트웨어 개발에서 클린 코드의 중요성을 인식하고, 이를 실천하고자 하는 개발자들에게 매우 유익한 자료가 될 것이다. 코드 품질 향상에 관심이 있다면, 이 책을 통해 많은 통찰을 얻을 수 있을 것이다.

/대상독자
클린 코드를 실무에 어떻게 적용해야 할지 고민하고 있다면,
· 깔끔하게 작성한 코드로 훌륭하게 협업하고 싶다면,
· 클린 코드를 구현하고 싶은 프로그래머, 소프트웨어 개발자, 아키텍트 등 현업 개발자
· 초보 개발자, 관련 학부생, 개발자 취업 준비생

"이 책은 한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다."만 책 내용에 대한 아쉬움이 많아 비판하는 내용을 같이 담아본다.

실무(협업, 오픈소스 기여 등)에서 클린 코드를 적용하는 데 도움을 줄 것으로 기대했으나, 여러 가지 아쉬운 점들이 많았다.

책의 구성과 주요 내용

이 책은 총 25개의 챕터로 구성되어 있으며, 각 챕터는 5개에서 17개의 레시피(Sub Chapter)로 세분화되어 있다.

다양한 상황에서 클린 코드를 어떻게 적용할 수 있는지 구체적으로 설명하려는 의도를 가지고 있는 듯했다.

특히 이 책에서 크게 얻어갈 수 있는 내용은 다음과 같다:

  1. 클린 코드의 이론과 이점 이해하기
  2. 단계별로 배우는 리팩터링 기술
  3. 코드 스멜을 식별하고 해결하는 방법
  4. 가독성이 높은 코드 작성 노하우

이 책의 독특한 점은 15종류가 넘는 프로그래밍 언어를 넘나들며 클린 코드의 개념을 설명하는 것이다.

기존의 클린 코드 서적들과는 차별화된 부분으로, 특정 언어에 국한되지 않는 클린 코드의 범용성을 강조하고 있다고 볼 수 있다.

기존에 읽어본 서적
Clean Code(로버트 C. 마틴) - Java
Tidy First(켄트 벡) - JavaScript, Python
파이썬 클린코드 2nd Edition(마리아노 아나야) - Python

다양한 언어의 활용: 장점과 한계

책에서는 클린 코드가 특정 프로그래밍 언어에 제한되지 않으며, 대부분의 레시피가 여러 언어에 적용 가능하다고 주장하고 있다. 기존의 클린 코드 책들이 특정 언어(Java, Python 등)에 집중한 것과는 다르게 접근한 점이 인상적이었다.

하지만 이 접근법은 실무에서 다루는 언어에 따라 책의 유용성이 달라질 수 있다는 문제점이 있었다. 나는 주로 Python과 C++을 사용하는 개발자로서, 여러 언어가 등장하는 부분에서 혼란스러움을 느꼈다. Bad Case와 Clean Case 코드를 비교할 때, 언어가 자주 바뀌는 점이 문제였다. 예를 들어, 한 레시피에서는 Java로 설명하다가, 바로 다음 레시피에서는 C++, 그다음은 Ruby, Kotlin, ... 등으로 전환되는 방식은 코드 이해를 어렵게 만들었다.

또한, 같은 레시피 내에서도 언어가 바뀌는 경우가 있었다. 예를 들어, Java로 Bad Case를 설명한 후, Kotlin 문법을 이용해 문제를 해결하라는 식의 설명은 나에게 혼란을 초래했다. 심지어 해당 문법은 파이썬에서는 완전히 다르게 동작한다. 이러한 방식은 각 언어에 대한 깊은 이해 없이, 단순히 여러 언어를 사용하려는 시도로 보일 수밖에 없었다. 책의 서문에서 "책에 작성된 코드들은 Copilot, Bard, ChatGPT 등의 도구로 작성되었습니다."라는 문구를 보고, 작성된 코드에 대해서는 언어별로 검수를 받았으면 좋았지 않았을까라는 생각이 들었다.

코드의 일관성과 가독성 문제

책을 읽으며 가장 큰 불만 중 하나는 코드의 일관성과 가독성 문제였다. 클린 코드의 기본 원칙 중 하나는 코드를 읽기 쉽게 만드는 것이다. 하지만 이 책에서는 코드에 설명 주석이 과도하게 붙어있어(아마 독자에게 설명하기 위한 배려일듯하지만), 오히려 코드 이해를 방해하는 경우가 많았다. 클린 코드라면 코드 자체로 이해할 수 있어야 한다는 점에서, 이러한 주석들은 불필요하게 느껴졌다.

각 레시피에서 참조하는 다른 레시피를 배치한 점도 문제가 있었다. 예를 들어, Chapter 3.4에서 Chapter 10.1과 Chapter 23.1을 참조하는 식의 구성은 처음 읽을 때 흐름을 방해했다. 물론, 나중에 사전처럼 활용할 때는 왔다갔다하며 유용할 수 있지만, 처음 읽는 입장에서는 불편하다고 느꼈다.

더 나아가, 책의 초반부터 코드 예시가 줄줄이 나오는 반면, Chapter 9에서야 코딩 표준에 대한 내용이 등장했다. 예를 들어, Python에서는 스네이크 케이스를 사용하라고 설명하면서도, 실제 책에서는 Python 예시코드에서 캐멀 케이스와 스네이크 케이스가 혼용된 경우가 있었다. 이는 번역 과정에서의 문제인지, 원서 자체의 문제인지는 모르겠다만... 책에서 제공하는 Github 소스코드를 확인해보니, 최근에서야 Python 변수 선언부 코드를 수정한 점도 아쉬움이 남았다.

실무와 동떨어진 조언들

이 책의 제목은 "실무로 통하는 클린 코드"이지만, 실제 내용은 실무와는 다소 동떨어져 있다는 느낌을 받았다. 예를 들어, 비즈니스 코드를 작성할 때 Go, Rust, C++을 피하라는 조언이 있었다. 회사에서 이미 사용 중인 언어를 다른 언어로 바꾸라는 식의 조언은 현실적이지 않으며, 실무에서의 적용 가능성을 떨어뜨렸다.

또한, C++에서 전처리기를 사용하지 말라는 권고는 지나치게 극단적인 표현으로 느껴졌다. 전처리기의 단점이 분명 존재하지만, 해당 단점을 포기함으로써 얻는 이점이 있어 여전히 유용하게 사용된다. 이러한 상황을 무시하고 단순히 사용하지 말라고 권하는 것은 클린 코드의 유연성을 해치는 접근이었다.

결론: 기대와 실망 사이에서

이 책은 클린 코드의 이론과 실무 적용을 다루며, 다양한 언어를 통해 범용적인 코딩 원칙을 설명하려고 했다. 그러나 코드의 일관성, 가독성 문제, 그리고 실무와의 괴리감 때문에 여러 면에서 실망스러웠다. 개인적으로는 오라일리 책을 읽으며 이렇게 실망한 적은 처음이었다. 클린 코드를 배우고자 한다면, 한두 개의 언어에 집중한 다른 책이나, 방법론적인 내용을 다룬 책을 선택하는 것이 더 나을 것 같다.

같은 한빛출판사의 Tidy First책을 감명깊게 읽었고 강추한다!!!
코드설명은 적지만 범용적으로 코드의 퀄리티들을 높여줄 수 있는 다양한 방법론을 예시를 들어 잘 설명해준다.

비판이 많이 담긴글이지만.. 아쉬워서 하는소리다.
현업에서 일어나는 다양한 부분들을 놓치지 않고 208개의 레시피로 설명하니 사전과 같이 필요할때 참고하기 좋은 책인듯하다.
궁금하다면 한번 구매해서 읽어보길 바란다.

 

"한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

내 코드를 클린하게 만드는 방법.

개발을 하다보면 다른 사람의 코드를 읽을 때가 생긴다. 이때 보기 쉬운 코드와 보기 어려운 코드가 있다.
클린코드는 코드를 이해하기 쉬운 코드를 만들어 준다.

책의 대략적인 구성

1장은 각각의 용어에 대한 정의를 설명한다.
2장은 모델에 대한 설명이 주를 이룬다.
3장부터 실질적으로 코드에 적용할 수 있는 내용이 나온다. 개터와 세터를 피해야 하는 이유.
이런 방식으로 총 208가지의 방법을 제시한다.
단순히 제안만 하는 것이 아니라 코드를 통해 예시를 보여주기 때문에 참고하기 좋다.

느낀점

나는 클린코드의 중요성을 알고 있었지만 기본적인 것만 알고있었다.
이번에 해당 책을 통해 다양한 레시피를 배울 수 있었고
앞으로 진행할 프로젝트 리팩터링에 점차적으로 적용해보기 좋다는 생각이 들었다.

 

실제 개발을 하다보면 코드를 어떻게 작성하면 좋을지 고민을 많이 하게 된다.

유지, 보수와 앞으로 확장성을 고려했을 때를 생각하며 코드를 작성하려고 노력하게 된다.

이번에 책을 읽으면서 '이렇게 작성하면 더 좋은 코드를 만들 수 있겠구나' 하고 많이 배울 수 있었다.

 

결론

클린 코드를 어떻게 만드는 것이 좋을지 고민하고 리팩터링을 앞두고 있다면
해당 책을 통해 좋은 코드를 만들어 보는 것은 어떨까?


 

실무로 통하는 클린코드 한빛미디어

코드를 변화하게 하면 조금 더 나은 코드를 쓰도록 도와주는 실무로 통하는 클린코드 입니다.

코드품질과 디자인을 개선하는 208가지의 방안을 제시합니다.

의사코드로 되어 있어서 다양한 언어에서 사용이 가능합니다.

가독성부터 보안까지 실무에서 통하는 클린코드를 배울 수가 있습니다.

개발자라면 문법을 배우고 더 나아가 어떠한 코드가 좋은 코드일까?

의문을 가지게 됩니다. 이러한 코드를 배울수 있도록 도와주는 책입니다.

실제로 예제코드도 직접 git-hub에 올라가 있어서 도움을 박을 수 있습니다.


기본적으로 다양한 코드의 예제를 그리고 활용하는 방법을 배웁니다.

각각 필요한 요소의 어떠한 코드를 어떻게 적용해야 좋은지부터 차근히 설명해줍니다.

코드의 리팩토링 or 코드의 클린코드

코드를 개선하는것을 리팩토링이라고 합니다. 동작을 유지되면서 코드를 수정하는것입니다. 

클린코드는 코드를 작성할 때부터 이해와 유지보수성을 위해서 잘 짜여진 코드를 말합니다.

실무로 통하는 클린코드를 통하여 잘 짜여진 코드를 배울 수가 있습니다.


직접적인 의사코드를 통하여 우리는 코드를 배웁니다.

중복된 매서드의 사용, 주석처리된 코드 제거등 

정리가 필요한 소스코드를 클랜징 하게 됩니다. 


실무를 하다보면 가장 많이 사용하게 되는 분기문과 조건 입니다.

실무에서 어떻게 if 문과 for 문등을 조금 더 유현하고 잘 쓸수 있는지 볼 수가 있습니다.

실제로 분기문을 쓰면 조금 더 가독성이 좋고 빠른 코드를 원하게 됩니다.

이러한 자세한 코드까지 적혀져 있어서 클린코드의 많은 도움이 됩니다.

마지막으로 예외처리와 더불어 보안까지 프로젝트의 한싸이클에 대하여 자세히 클린코드의 적용법이 적혀져 있습니다.

실무로 통하는 클린코드 책의 마지막부분에는 용어사전이 수록되어 있어서 개발용어의 대해서 자세히 적혀져 있어서 클린코드뿐만 아니라 개발적인 부분에서도 스킬업을 할 수 있는 좋은 책이라고 생각합니다.실무로 통하는 클린코드 한빛미디어

코드를 변화하게 하면 조금 더 나은 코드를 쓰도록 도와주는 실무로 통하는 클린코드 입니다.

코드품질과 디자인을 개선하는 208가지의 방안을 제시합니다.

의사코드로 되어 있어서 다양한 언어에서 사용이 가능합니다.

가독성부터 보안까지 실무에서 통하는 클린코드를 배울 수가 있습니다.

개발자라면 문법을 배우고 더 나아가 어떠한 코드가 좋은 코드일까?

의문을 가지게 됩니다. 이러한 코드를 배울수 있도록 도와주는 책입니다.

실제로 예제코드도 직접 git-hub에 올라가 있어서 도움을 박을 수 있습니다.


기본적으로 다양한 코드의 예제를 그리고 활용하는 방법을 배웁니다.

각각 필요한 요소의 어떠한 코드를 어떻게 적용해야 좋은지부터 차근히 설명해줍니다.

코드의 리팩토링 or 코드의 클린코드

코드를 개선하는것을 리팩토링이라고 합니다. 동작을 유지되면서 코드를 수정하는것입니다. 

클린코드는 코드를 작성할 때부터 이해와 유지보수성을 위해서 잘 짜여진 코드를 말합니다.

실무로 통하는 클린코드를 통하여 잘 짜여진 코드를 배울 수가 있습니다.


직접적인 의사코드를 통하여 우리는 코드를 배웁니다.

중복된 매서드의 사용, 주석처리된 코드 제거등 

정리가 필요한 소스코드를 클랜징 하게 됩니다. 


실무를 하다보면 가장 많이 사용하게 되는 분기문과 조건 입니다.

실무에서 어떻게 if 문과 for 문등을 조금 더 유현하고 잘 쓸수 있는지 볼 수가 있습니다.

실제로 분기문을 쓰면 조금 더 가독성이 좋고 빠른 코드를 원하게 됩니다.

이러한 자세한 코드까지 적혀져 있어서 클린코드의 많은 도움이 됩니다.

마지막으로 예외처리와 더불어 보안까지 프로젝트의 한싸이클에 대하여 자세히 클린코드의 적용법이 적혀져 있습니다.

실무로 통하는 클린코드 책의 마지막부분에는 용어사전이 수록되어 있어서 개발용어의 대해서 자세히 적혀져 있어서 클린코드뿐만 아니라 개발적인 부분에서도 스킬업을 할 수 있는 좋은 책이라고 생각합니다.

실무로 통하는 클린코드 - 한빛미디어

 

 

현장에서 일을 하다보면, 일정에 맞추기 위해 코드에 대한 고민을 뒤로 한 채, 우선 동작 시늉을 위해 얼기설기로 작성하는 경우가 많다. 물론 리팩토링이라는 추후 개선 작업을 진행하겠다는 변명이 있지만, 늘 ‘현실'이라는 벽을 탓하며 그저 일정 맞추기에 급급한 사례를 너무나 많이 봐왔다.

이 책은 ‘겉으로 들어나는 동작은 그대로 유지한 채, 코드를 이해하기 쉽고 수정하기 쉬운 상태로 내부구조를 변경'이라는 리팩토링이라는 과정에서 필요한 다양한 규칙? 혹은 개선 방향을 제시한다.

그동안 클린 시리즈로 개발자들이 정석처럼 여기고 구구단을 외우듯 암기하던 내용에서 더 새로운 것이 있는가? 라는 궁금함에 책을 선택하였는데, 더 많은 개선점과 실무에서 작성되는 듯한 코드로 개발자들을 ‘암기'에서 ‘감탄'으로 이끄는 점을 발견했다.

몇 가지 프로그래밍 언어를 다양하게 이용하여 책에서 나타내는 점은 각 언어의 차이점을 넘어 언어를 바라보는 시각의 관점도 다양하게 보여주는데, 더 놀라운 점은 이 책을 쓰는 저자조차 이 모든 언어를 전문가처럼 알고 작성한 것이 아닌 다양한 A.I. 코드 작성 도구를 활용을 하여 작성했다는 점이다. 도움을 받은 것을 감출 이유없이 당당하게 밝히고 우리는 그저 즐기면 된다. 특정 언어를 주력 언어로 사용한다는 점은 전문성은 갖출 수 있을지 몰라도 언어의 표현력에 갇힌다는 생각을 갖는 나로서는 이 책의 새로운 시도에 큰 응원을 전한다. 한국어가 다양한 형용사적 표현으로 감정 표현을 다양하게 할 수 있다하여 사람들의 표정이 다채로운가? 다른 휴먼 랭귀지를 배울 때 느낀 즐거움을 코딩에 사용되는 프로그래밍 랭귀지의 다양성에도 독자들이 즐거움을 얻었으면 좋겠다.

교과서가 아닌 해설서 느낌이다. 그동안 클린코드 ~ 그거 뭔데? 라고 생각했던 비(?) 클린자들과 클린교 신도들과 실무에서 접하게 될 다양한 사례를 레시피를 통해 간접 경험해 볼 모든 이에게 추천한다.

 

 "한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

개발자는 일하면서 다양한 프로젝트와 도전에 직면한다.

처음에는 단순히 문제를 해결하고 기능을 구현하는 데 집중하지만, 점차 협업이 늘어나면서 코드 작성에 대한 새로운 질문들이 생기기 시작한다.

‘사람들이 이해하기 쉬운 코드를 작성하려면 어떻게 해야할까?’

‘코드를 오랫동안 안전하게 유지보수할 수 있는 방법은 무엇일까?’

시간이 흘러가면서 환경은 점차 변화하고 회사는 변화에 맞춰 빠르게 움직이고자 새로운 비전과 함께 인재들을 통해 성장을 이어나간다.

이 과정에서 기존의 문서와 기술 스택은 점차 쇠퇴하게 되고, 개선하고자 새로운 기술과 프로세스를 도입해 비즈니스 문제를 해결해나간다.

결국 개발자는 코드로 소통한다.

잘 작성된 코드는 다른 개발자와의 원활한 소통을 가능하게 한다.

또한 협업의 효율성을 높이고 장기적으로 유지 보수하기 쉬운 시스템을 구축할 수 있게 한다.

이 책은 다양한 변화 속에서 개발자들이 가지는 질문들을 해소할 수 있는 200가지 이상의 클린 코드 작성 방법과 노하우를 담고 있다.

이 책은 25개의 장으로 구성된다. 각 장은 클린 코드를 올바르게 적용했을 때와 그렇지 않았을 때의 장단점을 보여주는 여러 원칙과 기본 사항으로 시작한다.

첫 번째 장에서는 클린 코드의 기본 원칙인 실제 엔티티와 디자인을 1:1로 매핑하는 방법을 자세히 설명한다. 이 원칙은 이후 모든 장에서도 적용할 수 있는 기반이다.

책의 예제 코드, 연습 문제는 아래 링크에서 다운로드할 수 있다.

https://github.com/xosuma/clean-code-cookbook

각 장은 코드 개선과 리팩터링을 위한 도구들과 조언을 주제별로 정리해 레시피 형태로 제공한다.

모든 레시피의 목적은 코드 품질 향상과 현재 상황을 긍정적으로 변화를 목표로 한다.

시중에 출간되어 있는 리팩터링 서적들은 단일 언어에 의존한다.

그래서 유행하는 프로그래밍 언어의 최신 버전으로 저자가 내용을 업데이트해야 한다.

하지만 이 책은 최신 프로그래밍 언어와 버전에 구애받지 않게 작성되어 있다.

대부분의 레시피들은 여러 언어로 작성되어 있고 기존 책들이 가지고 있던 한계들을 극복했다고 볼 수 있다.

특히 용어 사전, 옮긴이 노트를 통해 기존 지식을 빠르게 복습하고 새로운 내용을 쉽게 이해할 수 있게 해준다.

최신 프로그래밍 언어와 버전에 구애받지 않아 빠르게 변화하는 기술 환경에도 오래 참고할 수 있는 자료라는 점에서 가치가 있다.

모든 개발자에게 필수 덕목인 클린 코드 작성법을 소개하는 강력한 비법서다.

이 책을 통해 이점을 직접 경험하고 스킬을 한 단계 업그레이드할 수 있길 바란다.

이 서평은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

"한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

근래에 새로 발간되는 클린 코드 계열 책이 많다. 지난 5월에 서평을 올렸던 '읽기 쉬운 코드', 요즘에 나온 'Tiny First?' 등 많이 보인다. 요즘 잘 먹히는 소재인지 유행인지 뭔지 모르겠지만 일단 클린 코드 계열의 책을 읽다보면 '아 유지보수 가능하게 코드를 써야지' 같은 생각이 다시 한 번 상기되는 느낌이다.

책의 첫 인상

초반 챕터 1, 2는 정말 읽기 힘들다. '공리'가 어쩌고 '패러다임'이 어쩌고 정말 어려운 말을 사용한다. 저자는 정말 책을 많이 읽고 철학적인 사람이라는 생각을 했다. 멋있었고 이런 용어들이 순간순간 읽는데 방지턱이 됐지만 이해가 되면 '생각보다 나쁘지 않은 비유 일지도?'라는 생각도 들었다.

성능 개선하는 방법으로 팔레토의 법칙 (2:8 법칙)을 이야기할 때에도 정말 멋진 말이다 생각했다.
중요한 부분 20%를 개선하면 성능을 80% 향상 시킬 수 있고 이러한 개선이 '증거 기반'으로 이뤄져야 섣부른 최적화를 막을 수 있다고 하는 점도 인상적이었다.

MAPPERModel : Abstract Partial and Programmable Explanining Reality
이 책에서 중요하게 여기는 개념 MAPPER. 정말 서양 사람들은 이런 앞글자 따서 뭔가 만들기 놀이를 정말 좋아한다. SOLID도 그렇고...

정말 좋았던 점

단어의 정의를 초반에 잡고 시작한다. 코드 스멜이 뭔지, 리팩토링이 뭔지, 클린 코드가 뭔지 등을 일단 알려주고 시작한다.
마틴 파울러의 리팩토링에서의 정의는 어떠하고, 이후에 어떻게 발전되고 있고 IDE도 이를 위한 기능을 추가하고 있다는 등의 이야기도 개인적으로 한 번 쭉 설명해주니 좋았다.

이 책은 영어로 Clean Code Cookbook 이다. 그래서 챕터별로 각 파트를 레시피라고 표현한다. 각각의 레시피를 상황에 맞게 버무려볼 수 있다는 점도 정말 좋은 점이라고 생각한다. 정말 많은 레시피로 구성되어 있는데, 묘하게 MAPPER나 모델의 객체와 현실의 엔티티는 1:1 관계 같은 원칙 내에서 이뤄진다.

읽기 힘들었던 점

특유의 번역체가 종종 거슬리는 구간도 있다.
2.0에서 MAPPER에 대해서 알려주고 각자의 철자의 의미를 2.1 ~ 2.6을 통해 알려준다. 그런데 해당 파트의 이름은 '2.1 왜 추상적인가요?' 라고 써있다보니 갑자기 무슨 말인가 싶어서 앞을 보면 Abstract를 얘기했겠거니 유추하게 된다. 차라리 영어 단어도 그대로 같이 있었으면 바로 알아들었을 것 같은 느낌도 있다.

마무리

과거보다 더 CI/CD는 적극적으로 사용되고 있고 코드 규모도 커지고 있다고 한다. 코파일럿, 챗지피티같은 코드 생성 도구들도 많이 생기면서 생산성이 엄청 올라간다. 그런 의미에서 클린 코드, 리팩토링 같은 책이 새로 발간되는 이유도 시대에 맞춰서 '지금'에 맞는 내용을 알려주기 위한 것이 아닐까 생각이 든다.

이 책은 개발자들이 실무에서 '클린 코드'를 어떻게 적용하면 좋을지, 작성법에 대해서 자세히 알려주는 책입니다.

클린 코드는 많은 개발자들이 중요성을 인식하고 있지만, 실제로 어떻게 적용해야 할지 막막해하는 경우가 많습니다.

이 책은 그런 고민을 해결해주는 실용적인 가이드라인을 제공해요.

 

목차를 보시면 아실 수 있듯이 이 책의 내용은 정말 방대합니다.

클린 코드와 관련된 거의 모든 측면을 다루고 있다고 해도 과언이 아닙니다.

각 장은 코드 품질 향상을 위한 특정 주제에 초점을 맞추고 있어, 독자들이 체계적으로 학습할 수 있도록 구성되어 있습니다.

 

이 책의 가장 큰 장점은 다양한 프로그래밍 언어를 아우르는 예제를 통해 클린 코드 원칙이 실제로 어떻게 적용될 수 있는지 상세히 보여준다는 점입니다.

자바, 파이썬, PHP, C, 자바스크립트 등 여러 언어로 예제가 제공되기 때문에, 개발자들은 자신이 주로 사용하는 언어에 맞는 예제를 쉽게 찾아 학습할 수 있습니다.

이론을 실제 코드에 적용하는 데 큰 도움이 될 것 같습니다!

 

저는 개인적으로 추상적인 개념보다는 구체적인 예제를 통해 학습하는 것을 선호하는데, 이 책은 그런 면에서 매우 만족스럽습니다.

각 장마다 제공되는 실제 코드 예제와 실습은 클린 코드 원칙을 직관적으로 이해하고 적용하는 데 큰 도움이 됩니다.

특히 '문제-해결-설명' 구조로 이루어진 다양한 레시피는 실제 개발 과정에서 마주치는 문제들에 대한 해결책을 제시해 줍니다.

 

클린 코드라는 개념은 많은 개발자들에게 익숙하지만, 실제로 어떻게 적용해야 할지 모호하게 느껴지는 경우가 많습니다.

이 책은 그런 추상적인 개념을 구체적이고 실용적인 기술로 변환시켜 줍니다.

예를 들어, '가독성이 좋은 코드를 작성하라'는 일반적인 조언을 넘어서, 실제로 어떤 방식으로 변수명을 지어야 하는지, 함수를 어떻게 구조화해야 하는지 등의 구체적인 가이드라인을 제공합니다.

 

이 책에서 다루는 레시피의 양은 정말 방대하지만, 그 중 일부만이라도 실제 프로젝트에 적용한다면 코드 품질을 크게 향상시킬 수 있을 것입니다.

또한, 이 책을 통해 배운 원칙들은 새로운 문제에 직면했을 때 창의적인 해결책을 찾는 데에도 도움이 될 것입니다.

 

저는 이 책을 현업에서 일하는 개발자들에게 특히 추천하고 싶습니다.

이미 프로젝트 경험이 있는 개발자들이라면, 이 책에서 제시하는 방법들을 즉시 적용해볼 수 있을 것입니다.

또한, 주니어 개발자나 개발자를 준비하는 학생들에게도 매우 유용할 것 같습니다.

초기 단계부터 좋은 코딩 습관을 기르는 것은 장기적으로 큰 도움이 될 수 있으니까요!

 

로버트 C. 마틴의 <Clean Code(클린 코드)>가 클린 코드의 철학과 원칙을 설명한다면, 이 책은 그 원칙들을 실제로 어떻게 적용할 수 있는지 구체적인 방법을 제시한다고 하네요.

두 책을 함께 읽어보는 것도 도움이 될 것 같아요.

결론적으로, <실무로 통하는 클린코드>는 단순히 읽고 끝나는 책이 아니라, 지속적으로 참고하고 실천해 나가야 할 실용서라고 생각합니다.

이 책을 통해 배운 내용을 꾸준히 적용한다면, 더 나은 개발자로 성장할 수 있을 것입니다.

저도 이 책을 계속 옆에 두고, 프로젝트를 진행할 때마다 참고하며 제 코드의 품질을 높여나가보고싶어요.

 

그럼 이상 리뷰 마치겠습니다. 좋은 도서 제공해주신 한빛미디어 @hanbitmedia_official 감사드립니다!

 

====================

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

어떤 기술을 학습해 가는 방법은 여러 가지가 있다. 최근 가장 관심 있는 방법 중 하나로써 기본적인 개념을 익힌 뒤 실용적인 관점에서의 예시들을 포함, 어떻게 활용하는지 익혀나가고 점진적으로 왜 이렇게 했는지 등 사고의 폭을 넓혀가는 방법이 와닿는다. 그런 관점에서 한빛미디어에 나온 "실무로 통하는..." 시리즈의 책들은 인과추론, 타입스크립트, 엑셀, 데이터 시각화등 책이 나와있는데 "실무로 통하는 클린코드" 또한 이러한 시리즈 책 중 하나이다.


클린코드는 읽고, 이해하고, 유지보수하기 쉬운 코드를 의미합니다. 이를 위해 잘 구조화되고 간결하며 변수, 함수, 클래스에 의미 있는 이름을 사용합니다. 또한 모범 사례와 디자인 패턴을 따르며 성능과 구현 세부 사항보다 코드의 가독성과 동작을 우선시합니다.

 p31 왜 클린 코드인가요?

 

클린 코드란 읽고, 이해하고, 유지보수하기 쉬운 코드를 위한 모든 활동들을 의미한다. BigData와 같이 여러가지 의미를 함축하는 용어로써 "클린 코드"란 말은 로버트 C 마틴에 의해 널리 알려졌다. 클린 코드 책이 나온 지 꽤 오래되었지만 여전히 개발자들의 바이블이다.  하지만 Java 언어를 바탕으로 예시들이 설명되고 있어 요즘과 같이 다양한 언어를 다루는 사람들에게는 예시에 대한 갈증이 있었을 것이다.


이러한 관점에서 실무로 통하는 클린 코드(Clean code Coookbook)는 꽤 유용한 책이다. Java뿐 아니라 Javascript, Python, PHP를 사용한 예시들이 제공되고 있고 짧은 예시들이 가득가득하여 읽어나가는데 부담이 없다. 사실 예시가 너무 많아서 머릿속으로 기억하는 게 어려울 지경이다.

 

이 책을 관통하는 하나의 단어가 있다면 MAPPER(Model: Abstract Partial and Programmable Explaining Realiity) 일 것이다. 저자가 말하는 MAPPER에 대해서는 매우 동의한다. 프로그래밍을 처음 배울 때 추상화 그리고 모델링에 대한 부분을 배우게 되는데 실제 내용이 와닿지 않다가 경험이 쌓일 수록 이러한 개념이 와닿는 순간들이 점차 많아지게 된다. 시점을 생각해보면 유지보수를 하게 됨에 따라 기존 코드를 변경하고 문제 없이 동작하게 해내가는 과정들을 겪으면서가 아닐까 싶다. 버그가 나와서 고쳤는데 다른 버그가 나타난다던가, 기능 요구사항이 있어 수정을 하려는데 강결합된 코드들로 인하여 거의 다 뜯어고쳐나가는 일들 그리고 배포시 겪는 장애들의 연속등 실제로 주변에서 많이들 겪고 보게 되는 일들이다.  


나에게 클린 코드란 관리/담당하는 코드들이 내 손을 떠나서도 정해진 요구사항과 목표에 맞게 잘 동작시키는 기본 바탕을 의미한다. 좀 더 말하자면 유닛테스트 및 회귀테스트 그리고 적정 수준의 설계 문서들이 함께 있어야 하겠지만 말이다. 개인적으로는 "Chapter 4 기본형 집착", "Chapter 16 섣부른 최적화", "Chatper 17 결합도", "Chatper 19장 계층"을 재미있게 읽었다.


하루 한 Chapter 이렇게 읽으면 딱 좋을듯 한데 부담이 된다면 하루에 2,3페이지씩 정해서 읽어도 좋다. 첫번째 읽을 때에는 이해하기 위해 그리고 두 번째 읽을 때 비판적 사고로 읽어보면 본인의 코딩 스타일에 충분히 도움이 되지 않을까 생각한다. 팀 또는 함께하는 사람들이 있다면 같이 읽어도 좋다고 생각한다.


개발자란 코드를 가지고 글을 쓰는 사람이다. 글을 잘쓰기 위한 전략이나 학습이 필요하다. 물론 글을 많이 써야겠지만 변해가는 요구사항에 맞춰 고객에게 빠르고 안전하게 서비스를 제공하기 위한 유지보수 관점에서의 글쓰기가 필요하다. 클린 코드는 이러한 관점을 위한 전략이고 유지보수는 거의 모든 대부분 개발자들이 하는 일이다.


   "한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

비슷한 도서인 “클린코드”와 비슷한 내용들이 많이 존재하는 것 같습니다.

책에는 여러 예제 코드들이 나오는데, Java부터 Python, C#, Ruby, JS, PHP 등 굉장히 다양한 언어로 예제 작성이 되어있는점은 아쉬웠습니다. 간단한 코드들이긴 하지만 이해도가 조금 떨어진다는 느낌을 받아서요.

“한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”

 클린 코드. 말은 쉽다. 읽기 좋고, 간단하고 직관적이며, 그럼에도 좋은 동작을 보여주는 코드. 사실상 실무에서 이런 코드를 접하는 건 하늘의 별따기다. 솔직히 아직까지 클린 코드라고 볼만한 코드를 본 적은 없다. 심지어 본인도 그런 코드를 짜본 적이 없다. 다시 말하자면, 말은 그럴 듯한데, 이게 클린 코드다라고 할 만한 전형을 본 적이 없다. 그래서 뭐가 클린 코드인지 머릿속에 잘 그려지지 않는다.

 이 책을 보기 전에 클린 코드 바이블 격인 책을 본 적은 있다. 그런데 내 머릿속에 남아 있는 게 별로 없다. 본인이 제대로 안 읽었던지, 너무 이론 중심적이었던지, 아무튼 없다.

 뭔가 써먹을 만한 걸 모아둔 책이라고 한다. 208가지나 실었다. 뭐라도 하나 건지면 다행이란 생각이 들었다. 그래서 일단 펼쳐 읽기 시작했다. 구성은 매우 간단하다. 문제와 해결, 그리고 설명. 208번 반복하고 있다. 이를 이해시키기 위해 좀 장황하게 설명을 하고 시작했다. 갑자기 전단사? 수학 용어가 나온다. 아, 물론 프로그래밍의 기본은 논리와 수학이다. 이를 무시하는 건 아니지만, 갑작스레 수학 용어를 자주 반복해서 사용하다보니 복잡한 느낌을 받는다. 여전히 수학은 잘 모르겠다.

 전단사와 더불어 매우 자주 언급되는 표현은 "빈약한"이다. 원서에서 어떤 단어를 빈약한으로 번역한 걸까? 그냥 번역기에 돌려보면 "빈약한"은 "poor"로 번역하는데, 정말 이 단어였을까? 다른 단어이진 않을까? 궁금해진다. 차후에 원서를 보게 되면, 한 번 신경써서 봐야겠다 싶다.

 1장과 2장은 좀 어려웠다. 원래 책에 서두와 첫 번째 장이 제일 어렵다고는 하지만, 희한하게 잘 읽히는데 어려웠다. 아마 이해해야 할 핵심 내용인지라 그런 인상을 받았을지도 모르겠다. 인내심을 갖고 읽어내린 다음 3장부터 이제 실질적으로 필요한 레시피가 나오기 시작한다.

 전반적으로는 이렇게 평가할 수 있겠다. 어떤 레시피는 아하, 하고 감탄할만 하고, 어떤 레시피는 묘했고, 어떤 레시피는 아닌 것 같은데 싶었고, 어떤 레시피는 무슨 얘길하는지 잘 이해가 되지 않았다. 다시 말해 208가지 전부가 나에게 다 이해가 되고, 필요했으며, 적합한 건 아니었다는 얘기다. 그러나 상당수가 내 생각과 비슷했고, 도움이 될 만한 내용들이었다.

감탄할 만한 레시피는 객체의 본질 파악하기를 그 예로 들 수 있겠다. 완벽히 이해가 된 상태는 아니지만, 필수 동작이 객체를 식별한다는 설명 그 자체는 내게 울림을 줬다. 이를 잘 소화해내서 체화하는 건 내 몫인지라 고민이 많이 필요한 내용이었다.

묘했던 레시피는 작은 객체 생성하기다. 보통은 이름을 저장할 변수를 정의하면 String name으로 끝난다. 그런데 그렇게 하지 말고 Name을 정의하고 Name name으로 사용하라고 한다. 의도는 이해가 되지만 이게 과연 현실적인가라는 의문은 남는다. 이렇게 사용한 객체를 DB와 연관짓게 되면 변환 절차를 거치도록 추가 작업을 해야 하는데, 이게 과연 현실적인가 묘했다.

아닌 것 같은 레피시는 괴상한 조건문 재작성하기다. 상수값을 왼쪽에 놓지 말고 오른쪽에 두라는 얘기다. 왜 이상할까? 꽤 오랫동안 후자 방식으로 했을 때 실수로 할당문을 사용하거나 했을 때 문제를 알아차리지 못하고 실행될 수 있고, 이로 인해 오류가 발생할 수 있으니 문제가 되지 않도록 전자처럼 코드를 작성하라고 조언을 받아왔다. 꽤 여러 책과 글에서 접했던 내용이었다. 그런데 이렇게 하지 말라고 얘길하는 게 아닌 것 같다는 생각이 들었다. 둘 다 나름의 논리를 갖고 있으니 결국 받아들이는 건 본인이니 본인이 잘 판단해야 할 문제긴 하겠지만 말이다.

무슨 얘긴지 이해가 안 되는 레시피는 객체 ID 피하기다. 실질적으로 처리하는 모든 데이터는 DB와 밀접한 관계가 있다. 값을 처리해서 DB에 저장하거나, DB에 저장된 값을 읽어와 주어진 처리를 한 다음 다시 저장한다. 그렇기 때문에 거의 모든 객체에는 ID가 존재한다고 볼 수밖에 없다. 그래서 이 부분은 잘 이해가 되지 않았다. 잘못된 내용은 아닐 테고, 저자가 얘기하는 바를 제대로 이해하고 받아들이지 못한 것 같아 좀더 연구할 필요가 있는 내용일 테다.

 각 경우에 맞게 하나씩 레시피를 그 사례로 들었지만, 그런 유형들이 여러 개 있다. 그래서 이 책은 한 번 읽고 책장에 꽂아두는 책이 아니다. 다양한 경험을 할 수록 이 책에서 적용 가능한 레시피를 찾아 써보는 게 좋다. 그리고 가끔 레시피 하나를 뽑아 그 내용을 곱씹어보는 게 좋을 만한 책인 듯도 싶다. 

 다만 아쉬운 점은 다양한 레시피를 소개하고 있고, 필요에 의해서 어떤 레시피들은 적절하게 설명을 달아놨지만, 어떤 레시피는 그 설명이 상대적으로 빈약해서 관련 자료를 더 찾아봐야 하는 경우도 있었다. 즉, 만병통치약처럼 볼 수는 없는 내용이 있다. 이 점은 주의해야 한다.

 현재 진행 중인 프로젝트에서 이 레피시들 중 적용할만한 게 있다. 다만, 그대로 적용하기엔 무리인 것들도 있다보니 점진적으로 적용할 수 있는 방법을 찾아야 한다. 그래도 개선 방향에 써먹을만한 내용(특히 16장 섣부른 최적화, 17장 결합도, 20장 테스트, 21장 기술 부채, 22장 예외 등)이 많으니 차분히 활용해 볼 생각이다. 

저자는 이 책 왜 클린 코드인가요? 에서 읽고, 이해하고, 유지 보수하기 쉬운 코드를 의미한다고 적어놨다. 머리로는 알겠는데, 마음 속 깊숙이 우러나오는 느낌은 아니다. 저자의 말을 이해할 수 있는 그날까지 더 공부해야겠다. 이런 나침반같은 책들을 읽으면서.

1. 사람들이 이해하기 쉬운 코드를 작성하려면 어떻게 해야 할까?

2. 코드를 오랫동안 안전하게 유지 보수할 수 있는 방법은 무엇일까?

이 책은 모든 수준의 개발자들에게 꼭 읽어봐야 한다고 생각하였습니다.

초급 개발자는 코드를 작성하는 데에 필요한 기본 원칙을 실제 코드를 바탕으로 배울 수 있습니다.

또한 숙련된 개발자는 자신이 작성한 코드를 되돌아보면서 클린 코드의 원칙대로 개선할 수 있는 기회를 얻을 수 있습니다.

 

책 구성은 클린 코드를 실무에 어떻게 적용해야 할 지 업무에서 직면하는 다양한 문제를 클린코드의 원칙을 통해 해결하는 방법을 다루고 있습니다. 예제 코드와 연습 문제도 제공하고 있어서, 다운로드하여 클린코드를 실습해볼 수 있는 기회까지 제공하고 있는 책이었습니다.

 

이 책을 통해 개발자는 더 나은 코드를 작성하는 법을 배울 뿐만 아니라, 코딩에 대한 새로운 관점과 철학을 얻게 될 것입니다. 코드의 가독성과 유지보수성을 중시하는 개발자라면 반드시 읽어봐야 할 책입니다. 클린 코드를 향한 여정을 시작하고자 하는 모든 이들에게 이 책을 강력히 추천합니다.

 

본 포스팅은 이지스퍼블리싱으로부터 서적을 제공받아 작성된 솔직한 후기입니다.

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

백엔드 엔지니어를 위한 좋은 지침서들이 여럿 있다. 로버트 C 마틴의 클린 코드와 클린 아키텍처, 마틴 파울러의 리팩터링, 에릭에반스의 도메인 주도 설계를 비롯해 많은 책들이 있다. 나아가 백엔드에서 많이 사용되는 자바로 간다면 조슈아 블로크의 이펙티브 자바, 이일민의 토비 스프링같은 책들은 참 좋은 지침서다. 물론 이 책들은 프로그래밍 서적이기 때문에 코드가 등장하긴 하지만, 코드에 대한 내용보다는 설계나 원론적인 이야기들이 많이 오간다. 책을 읽기 전에 이미 객체지향에 대해서, 설계에 대해서, 언어 스팩에 대해서 많은 숙련도가 있어야 흡수가 가능하다. 그래서 나는 앞에 나열한 책들은 허들이 낮은 편이 아니라고 생각한다.

 

그러나 우리는 언젠가 주니어에서 시니어로, 코더에서 디자이너로 올라가야 하는 시기가 올 것이다. 좋은 개발 문화에서 많은 코드를 보고, 작성하고, 리팩터링 해보고, 좋은 선배들을 따라가면 모두가 좋은 개발자가 될 것이다. 그러나 우리 중 대다수는 좋은 문화도, 좋은 코드도, 좋은 선배도 없다는 걸 다들 잘 안다. 그래서 시간이 흐른다고 시니어가 될 일도, 설계를 잘하는 개발자가 될 일이 아니다. 하지만 이 시절 개발자는 설계와 코딩을 할 때 궁금한 부분이 생기고, 많은 경험이 없기 때문에 이를 해결할 직관력이 떨어지는것이 사실이다.

 

이 책은 그 중간의 간극을 매꿔 줄 수 있는 책이다. 원론적인 이야기 보다, 문제인식 - 해결방법 - 레시피 순으로 간결하고 빠르게 지나간다. 하나의 아이템은 대부분 3 페이지를 넘지 않는데, 그러면서도 before - after 코드를 보여준다. 각 아이템의 끝자락에는 같이 읽어볼만한 다른 아이템을 같이 소개한다. 적은 활자로 많은 내용을 담으면서도, 주니어들이 궁금해 할 만한 단어 해설도 충실히 포함하고 있다.

 

 

책의 전반부는 코드 리팩터링에 대해서 소개한다. 16장 이후부터는 설계와 테스트, 운영환경에서 코드적으로 고려해볼만한 내용들이 주를 이룬다. 그래서 가볍게 읽기 시작했다가 상속, 합성, 결합도, 응집력에 대한 이야기가 나오면서 개발자라면 연차와 상관없이 두루두루 읽기 참 괜찮은 책이라고 생각했다. 별미는 책 끝에 용어사전 챕터인데, 알고는 있지만 막상 설명하려면 방대한 내용들을 머릿속으로 정리하기 어려운 용어들에 대해 단 몇문장으로 군더더기 없이 설명하는 챕터가 있다. 개인적으로 만족스러웠던 부분은 책에서 null 을 다루는 방법에 대해 따로 챕터를 할애하고 있다는 점과, 기존에 작성된 코드에 대해 상속과 합성을 이용해 어떻게 리팩터링 할 것인가에 대한 내용이 있다는 점이다.

 

한마디로 사전식 책임에도 불구하고 내용의 깊이가 있고, 설명에 대한 허들도 매우 낮은 편이다. 근래 읽었던 지침서 성격의 책 중에서는 켄트백의 구현패턴 이후로 가장 읽어볼만한 책이였다.

 

실무로 통하는 클린 코드 도서 표지

 

 

이번에 대학원에서의 학업을 마치고 석사를 졸업하면서 운이 좋게 바로 취업을 하게 되었다.

 

시기가 그렇다보니 졸업 후 바로 회사로 입사하는 방향으로 조율이 되고 있었으나, 인수인계 할 내용이 늘어나면서 죄송하게도 9월 첫 주로 늦추게 되었다.

 

일정 조율 후, 인수인계를 위해 졸업논문 겸 진행하던 연구 과제의 코드와 자료를 정리해서 전달해주어야 하는 상황이었다. 

 

이 상황에서 문제는 두 가지였는데, 첫 번째는 논문 작성에 쫓기다보니 코드와 자료가 엉망진창이었다. 쓰레기 그 자체...

 

두 번째는 인수인계 받는 학생이 외국인 유학생이어서 내용 전달이 잘 될지에 대한 문제였다. 영어를 못하는 편이 아닌데도 워낙 쓰레기 같은 상태의 자료를 가지고 있다보니 이런 걱정이 생겼다.

 

비슷한 시기에 이 도서를 받게 되어서 이 책을 참고해서 코드를 정리하여 주고자 하였다. 자료는 어차피 그래프와 엑셀 데이터 형태라서 정리만 하면 그만이다.

 

본인은 파이썬을 사용하여 데이터 분석 및 실험을 진행하였기 때문에 파이썬 위주의 클린 코드 작성법을 원했다.

 

우선, 이 도서는 파이썬 뿐만 아니라 자바, 자바스크립트, PHP 등 다양한 언어를 사용하여 클린 코드 작성 방법을 설명하고 있기 때문에 파이썬 부분을 위주로 읽었다.

 

읽으면서 가장 먼저 들었던 생각은 코드는 그냥 작성하는 줄 알았는데 코드에 대해 이렇게 많은 용어가 있는 줄 몰랐다. 받아쓰기는 그냥 듣고 쓰는 줄 알았는데 받아쓰기 전략 패턴, 닌자 받아쓰기 이런 느낌이랄까?

 

이러한 내용은 노트, 용어사전으로 정리되어 있어서 읽기 편리했다. 다만, 파이썬 부분만 찾아 읽다보니 약간의 귀찮음은 있었다.

 

아무래도 인수인계를 위해 코드를 정리하다보니, 주석과 작성한 함수 정리와 같은 문제가 있었다. 나도 내가 쓴게 헷갈리기 시작했기 때문에...

 

이 도서에는 25개의 챕터로 엄청난 양의 주제를 다루고 있지만, 그 중에서 본인의 목적에 가장 유용했던 챕터는 주석, if 문, 복잡성 부분이었다.

 

주석은 앞에서와 같은 이유로 유용했고, if 문의 경우에는 본인의 코드가 수식과 데이터 처리에 관련해서 많은 if 문을 포함하고 있어서 이를 정리하고 간결하게 만드는데 있어서 유용했다.

 

복잡성 챕터에서는 반복되는 코드 제거를 위한 부분이 가장 유용했다. 빠르게 실험을 진행하다보니 같은 내용에 대한 코드가 여러번 작성되었기 때문.

 

아무튼 이 도서를 통해서 본인의 코드에서 가장 문제가 되는 부분을 효과적으로 수정했고, 인수인계를 성공적으로 마칠 수 있었다.

 

이 도서는 클린 코드를 위해 디테일한 내용을 다루고 있다는 점과, 다양한 언어를 기반으로 작성되어 있다는 점에서 큰 의미를 가진다.

 

25개의 챕터로 구성된만큼 놓칠 수 있는 내용을 포함하고 있으며, 개발이던 연구직이던 평생 한 가지 언어만을 사용하지는 않을 것이기 때문에 두고서 오랫동안 볼 수 있기 때문이다.

 

이제는 간단한 코딩의 영역을 넘어서 실무에서, 상당한 양의 코드를 작성하고 있는 사람이라면 한 번쯤 읽어보면 작성한 코드의 문제점을 최소 한 개 이상은 발견할 것 같다. 

 

코딩에 관심이 있는 사람 누구나 읽어보면 좋은 도서로 내 주변 사람은 다 읽어야 하지 않을까 싶은 도서였다.

 

 


 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

리뷰는 실제 도서를 읽어본 후 작성되었으며, 도서의 제공 여부와 상관 없이 독자의 시점으로 작성하였습니다.

 

로버트 C. 마틴의 『클린 코드』는 오랫동안 소프트웨어 개발자들 사이에서 코드 품질 향상의 바이블로 여겨져 왔다. 이 책은 코드의 가독성, 유지보수성, 확장성을 높이기 위한 원칙과 가이드라인을 제시하며, 많은 개발자들에게 코드 작성의 새로운 기준을 제시했다. 그러나 이번에 읽은 이 책은 『클린 코드』에 이어, 좀 더 실질적인 적용 방법과 구체적인 사례를 통해 클린 코드를 실무에 어떻게 구현할 수 있을지에 대한 깊이 있는 통찰을 제공해 준다는 점에서 큰 장점이 있다.

특히 이 책이 유용했던 이유는, 파이썬을 비롯한 여러 프로그래밍 언어로 작성된 예시 코드를 통해 다양한 언어 환경에서 클린 코드 원칙을 어떻게 적용할 수 있는지를 구체적으로 설명해 준다는 점이다. 각 언어의 특성과 문법에 맞춰 클린 코드의 원칙을 어떻게 구현할 수 있는지를 설명함으로써, 개발자들이 자신이 사용하는 언어에서 이러한 원칙을 실천할 수 있도록 돕는다. 이러한 접근은 클린 코드의 개념을 더 깊이 이해하고, 실제 코드에 적용할 수 있는 자신감을 심어주었다.

책에서 다루는 코드 예시는 파이썬뿐만 아니라 자바, C#, 자바스크립트 등 다양한 언어로 작성되어 있다. 이를 통해 각 언어의 특성에 맞게 클린 코드의 원칙을 어떻게 적용할 수 있을지에 대한 다양한 가능성을 발견할 수 있었다. 예를 들어, 파이썬의 동적 타이핑과 유연한 문법을 활용해 클린 코드의 원칙을 실현할 수 있는 방법에 대한 아이디어를 얻었다. 예시 코드가 여러 언어로 제공되면서, 내가 주로 사용하는 파이썬에서도 이 원칙들을 어떻게 구현할 수 있을지 구체적으로 생각해 볼 수 있었다.

이 책은 코드 스멜과 리팩터링의 필요성에 대한 구체적인 예시를 풍부하게 제공한다. 『클린 코드』가 원칙적인 측면에서 코드의 질을 높이는 방법을 제시했다면, 이 책은 실제로 코드 스멜을 어떻게 식별하고, 리팩터링을 통해 문제를 해결할 수 있는지를 단계별로 안내한다. 이를 파이썬에 적용해 본다면, 테스트 코드에서 반복적으로 사용되는 설정 로직을 별도의 함수나 클래스로 분리하고, 중복 코드를 제거하는 방법을 고려해 볼 수 있다. 예를 들어, 파이썬의 pytest 프레임워크를 사용해 공통의 테스트 준비 작업을 fixture로 정의하고, 이를 여러 테스트에서 재사용함으로써 코드의 간결성과 일관성을 높일 수 있을 것이다.

또한, 빈약한 모델과 기본형 집착에 대한 내용을 파이썬에 적용할 때는, 데이터를 다루는 방식을 보다 객체지향적으로 설계하는 것이 가능하다. 예를 들어, 단순히 문자열이나 숫자만을 사용하기보다는, 도메인 객체를 만들어 그 객체를 테스트 코드에 활용하는 방식으로 발전시킬 수 있다. 이를 통해 코드의 의미를 더 명확하게 표현할 수 있으며, 데이터의 무결성을 보장하면서 테스트 코드의 가독성을 높일 수 있다. 파이썬에서는 dataclass를 활용하여 간단한 데이터 객체를 정의하고, 이를 통해 코드의 구조를 더욱 명확히 할 수 있을 것이다.

가변성과 선언적 코드에 대한 챕터에서는 파이썬의 특성을 고려한 적용 방법을 생각해볼 수 있다. 예를 들어, 파이썬에서는 기본적으로 변수의 가변성이 높은데, 이 책에서 강조하는 불변성을 유지하기 위해 파이썬의 frozenset이나 tuple을 활용할 수 있다. 또한, 선언적 코드 작성의 예로는 리스트 컴프리헨션이나 제너레이터 표현식을 사용하여 코드를 더 명료하고 간결하게 만들 수 있다. 이런 접근은 코드의 의도를 명확히 드러내고, 유지보수성을 높이는 데 기여할 것이다.

명명 규칙과 주석에 관한 내용은 파이썬의 네이밍 컨벤션과 잘 어우러질 수 있다. 예를 들어, 테스트 메서드의 이름을 통해 테스트의 목적과 기대 결과를 명확히 표현하고, 주석 대신 코드 자체로 의도를 드러내는 방식으로 코드를 작성할 수 있다. 파이썬에서는 메서드 이름을 명확하고 일관되게 지음으로써, 테스트 코드가 자체적으로 문서 역할을 하게 할 수 있다. 예를 들어, test_calculate_total_returns_correct_sum과 같이 메서드 이름을 통해 테스트의 목적을 분명히 할 수 있다.

섣부른 최적화에 대한 경고는 파이썬 테스트 코드에서도 중요한 고려사항이 된다. 파이썬은 비교적 느린 인터프리터 언어이기 때문에 성능 최적화에 대한 유혹이 있을 수 있지만, 이 책에서 배운 바와 같이 테스트 코드에서는 우선 명료성과 유지보수성을 중시해야 한다. 예를 들어, 복잡한 최적화를 도입하기보다는, 간단한 테스트 케이스로 시작해 필요할 때 최적화를 추가하는 접근이 더 나을 것이다. pytest의 매개변수화 기능을 활용하면, 복잡한 조건문 없이 다양한 테스트 시나리오를 간결하게 작성할 수 있다.

이 책의 가장 큰 장점은 『클린 코드』의 원칙들을 다양한 언어로 구체적인 예시와 함께 설명하며, 이를 파이썬과 같은 실무 환경에 맞게 어떻게 적용할 수 있을지를 명확히 제시한다는 점이다. 파이썬의 유연한 문법과 기능을 활용해 이 원칙들을 구현함으로써, 코드 품질을 높이고 유지보수성을 강화할 수 있는 다양한 가능성을 열어줄 것이다. 예를 들어, 파이썬의 context manager를 활용하여 자원 관리와 관련된 코드를 더 명확하고 안전하게 작성하거나, decorator를 사용해 중복 코드를 제거하고 관심사를 분리하는 방법도 고려해 볼 수 있다.

결론적으로, 이 책은 『클린 코드』의 이론적 토대를 실무에 구현할 수 있는 구체적인 지침으로 발전시킨 중요한 책이다. 같은 원칙을 다양한 프로그래밍 언어에 어떻게 적용할 수 있는지를 비교 설명하는 접근은, 개발자들이 자신이 사용하는 언어에 맞춰 클린 코드의 개념을 실천하는 데 큰 도움을 준다. 앞으로 이 책에서 배운 원칙들을 바탕으로 파이썬 테스트 코드의 품질을 높이고, 유지보수성과 확장성을 동시에 확보하는 방향에 도움이 될 것이다.

이 리뷰는 한빛미디어의 나는 리뷰어다 이벤트를 통해 책을 제공받아 작성했습니다.

관심 있는 챕터를 골라 읽는 재미가 있는 또 다른 Cookbook 시리즈!

 

책에서도 레시피들을 엄격한 규칙이 아닌 휴리스틱으로 생각하라 합니다. 내 취향, 경험을 비교하며 평가하고 공격적으로 읽으면 더 재밌게 읽을 수 있습니다. 저도 몇 개는 의견이 갈리고 몇 개는 이유를 다시 생각하게 하여 코드 짜는 방식을 점검하게 됐습니다. 그러다보니 책의 반이 지나갔습니다. 

이제는 어느 정도 익숙한 내용이 더 기억에 남습니다. 다양한 언어가 나와서 당황스럽긴 했지만 구체적인 코드가 좀 더 현실성 있게 다가와서 상황을 떠올리기 쉬웠습니다.

 

클린 코드의 의견을 둘러보며 한번 더 코드를 점검해보고 싶은 분들께 추천드립니다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 


 

 

 

안녕하세요

이번에 한빛미디어에서 실무로 통하는 클린 코드 (Clean Code Cookbook) 책이 나왔습니다.

책 내용은 제목 그대로 클린 코드 작성법입니다.

이 책의 장점 중 하나는 책에 나오는 언어가 한 개의 언어로 고정된 것이 아니라 여러 언어로 코드를 보여주는 것입니다.

 

1장에서는 클린 코드가 무엇인지와 코드 스멜이 무엇인지부터 정의하고

책 전반에 필요한 단어들을 정리합니다.

 

책의 구성은 문제 -> 해결 -> 설명으로 이루어져 있습니다.

문제가 뭔지 정의하고 바로 해결법을 알려주고 설명을 자세하게 해줍니다.

대부분 문제에 대해서 코드를 꼭 보여주고 넘어갑니다.

Java, Kotlin, Ruby, PHP, Python, Javascript 등등 여러 언어로 알려줍니다.

 

그리고 노트 영역을 활용해서 키포인트나 단어를 설명해 줍니다.

책의 일부를 찍어보았습니다. 6장에서는 선언전 코드 관련한 내용을 설명합니다.

재사용 변수 범위 좁히기, 문서화하기, 조건문 재작성하기 등 어떻게 선언적 코드를 작성하는지 알려줍니다.

 

11장은 블로터입니다. 블로터(bloater)는 코드가 커지고 많은 사람과 협업할 때 피할 수 없는 현상입니다.

성능에 문제를 일으키는 경우는 적지만 유지 관리 및 테스트 기능을 손상시켜 소프트웨어가 발전하는데 방해가 되는 것입니다. 저도 요즘 레거시를 만지고 있는데 코드가 심각하게 커서 유지 관리하기 어려움을 많이 겪고 있습니다. 11장 파트를 보면서 공감이 많이 되었네요

 

뚱뚱한 인터페이스 분리, 과도한 변수 줄이기, 과도한 메서드 제거, 객체에 너무 많은 속성이 있으면 나누기 등 큰 코드를 작은 코드로 나누는 법을 알려줍니다.

 

12장은 You aren't gonna need it의 줄임말인 YAGNI 원칙입니다.

저도 자주 놓치게 되는 원칙입니다. 현재 필요한 기능만 구현하면 되는 데 미래에 쓰이지 않을까 해서 개발하는 경우입니다.

 

Spring 코드에 보면 controller -> service interface -> service class -> repository interface -> reposity class 이렇게 인터페이스와 클래스와 일대일로만 대응이 되는 코드가 엄청나게 많이 있습니다.

개인적으로 굉장히 안 좋아하는 코드 스타일입니다. 이 방식은 오히려 코드 양만 많아지고 뎁스만 많아져서 보기가 불편해집니다.

책에서도 이런 일회성 인터페이스를 제거하는 걸 추천하고 있습니다.

 

테스트를 하다 보면 꼭 나오는 얘기인 private 메서드를 테스트해야 되나에 대해서도 알려줍니다.

 

22장은 예외 관련한 부분으로 예외 관련한 코드를 어떻게 작성해야 되는지 알려줍니다.

중첩된 try ~ catch를 지양하고 재작성하는 방법에 대해서 알려주고 있습니다.

 

책의 마지막에는 용어 사전이 있어서 궁금했던 용어를 찾아서 설명을 볼 수도 있습니다.

 

내가 코드를 제대로 짜고 있는 걸까?라는 생각이 드시는 분들한테 추천드리는 책입니다.

책을 읽게 되면 어떤 코드들이 코드 스멜을 풍기게 되는지 알 수 있게 되고 어떻게 코드를 짜야 가독성이 좋고 유지 보수하기 좋은지에 대해서 배울 수 있다고 생각이 듭니다. 또한 여러 언어로 코드를 설명해 주고 있어서 좀 더 다양한 상황에 대해서 배울 수 있다고 생각이 드네요

 

클린 코드에 대해서 배우고 싶은 분들에게 추천합니다!

 

 

"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

개발자라고하면 다른 동료들과 협업하지 않는 직군으로 생각하는 사람들이 많다. 그래서 개발자라고 하면 골방에 틀어박혀서(?) 자기만의 길을 가는 geek한 사람들을 연상하는 경우들도 많다. 하지만 실제 회사에서는 혼자서만 개발하는 사람보다 다른 개발자들과 협업하는 환경에서 일하는 개발자들이 훨씬 많다. 그렇다면 개발자들은 어떤 산출물로 소통을 하게 될까? 바로 코드이다. 위의 사진에서도 볼 수 있듯이, 개발자는 '코드'로 소통한다.

기존 1인 1프로젝트를 온전히 담당하다가 업무를 진행해가며 다른 사람들의 코드도 유지보수하고, 이전에 짜놨던 내 코드도 수정하며 클린코드에 대한 필요성을 크게 느끼던 중에 이 책을 읽게 되었다. 최근 발간되는 기술 책들의 장점이라면 실제 사례에 입각한 예시들이 많다는 것을 들 수 가 있는데, 이 책도 제목에서 알 수 있듯 '실무에서' 마주할 수 있는 이슈와 그에 대한 내용들을 정리해 둔 것이 특징이다.

실제 개발 업무를 하며 만날 수 있는 이슈 208개에 대해 각 이슈별로 분류하고 어떤 식으로 해소를 할 수 있는지, 관련된 다른 이슈는 어떤 것들이 있는지 정리해두어 참고할 수 있게 되어 있다. 다만 예시가 다양한 언어로 작성이 되어 있는데, 파이썬만 사용하는 나에게는 고마우면서도 다른 형식으로 적혀있는 코드들이 살짝의 심리적 장벽으로는 작동했다.

하지만 그럼에도 불구하고 친절한 예시와 분류덕에 현재 고민하고 있는 지점들을 어떻게 해결해야 할 지에 대한 감을 잡을 수 있었다. 그렇기 때문에 나와 비슷하게 코드 품질에 대해 고민을 하고 있는 분들이라면 책을 참고해봐도 좋을 것 같다.

 

한빛미디어 < 나는리뷰어다 > 활동을 위해서 책을 제공받아 작성된 서평입니다
 

"실무로 통하는 클린코드"는 클린 코드를 실무에 적용하는 구체적인 방법을 탐구하는 책이다. 다양한 프로그래밍 언어와 예제를 통해 가독성, 결합성, 테스트 가능성, 보안, 확장성 등의 클린 코드 핵심 개념을 다루고 있다. 또한, 복잡한 코드베이스를 효과적으로 확장하고 유지 관리하는 방법, 코드 스멜을 식별하고 해결하는 방법 등 실무에서 마주할 수 있는 문제들을 해결하는 다양한 기법들을 제시한다. 클린 코드를 이해하고 실천하고자 하는 모든 개발자들에게 실질적인 가이드가 되어주는 책이다.

이 책의 가장 큰 장점은 클린 코드를 실무에 바로 적용할 수 있도록 돕는다는 점이다. 각 장은 개념적인 설명뿐만 아니라, 실제 코드 예제와 리팩터링 사례들을 풍부하게 포함하고 있어 독자들이 쉽게 이해하고 따라 할 수 있도록 한다. 다양한 프로그래밍 언어를 다루기 때문에 특정 언어에 국한되지 않고, 모든 개발자들이 이 책을 통해 클린 코드의 중요성과 그것이 가져다주는 이점을 경험할 수 있다. 이 책은 개발자라면 꼭 읽어야 할 필독서로, 코드의 질을 향상시키고자 하는 모든 이에게 강력히 추천한다!

실무로 통하는 클린 코드(막시밀리아노 콘티에리, 2024)

 


책 소개

저자 : 막시밀리아노 콘티에리 (Contieri, Maximiliano )

제목 : 실무로 통하는 클린 코드

번역 : 이태영

출판사 : 한빛미디어

출간 연도 : 2024. 08.

원문 제목 : Clean Code Cookbook(2024. 01.)

페이지 : 488쪽

 


 

ChatGPT등의 생성형 AI를 통한 코드 구현이 활발해지면서 단순한 로직의 코드의 작성은 생성형 AI를 활용하고 있다. 실제 구현이 불가능한, 오류로 컴파일 할 수 없는 코드를 생성하던 시기를 지나, 실제 구현 가능한 코드를 제공하는 생성형 AI의 활용이 보편화되면서, '코드'에 대한, '클린 코드'의 중요성이 다시 떠오르고 있다.

(※ 클린 코드는 읽고, 이해하고, 유지 보수하기 쉬운 코드를 의미한다.)

 

코드 품질과 디자인 개선 방법을 안내하는 이 책은 각 테마별 '문제 - 해결 - 설명'의 형식으로 구성되어 있으며, 총 25개의 챕터, 208개의 소 주제로 다양한 프로그래밍 패러다임에 적용 가능한 '클린 코드 개념'을 제시한다.

책은 '객체'를 중심으로 코드 구현을 하는데, 예시 코드는 자바, 파이썬, C 등 다양한 프로그래밍 언어로 쓰여져 있지만, 타 프로그래밍 언어로 변경이 쉽도록 간결한 코드 예시를 제공한다. 

 

25개의 다양한 클린 코드 키워드 중, 'NULL'과 '예외처리' 파트가 인상 깊었다.

Chapter 15의 주제인 'NULL'은 코딩하며 자주 사용하는 조건 처리 방식인데, '값이 없거나 정의되지 않은 값' 혹은 '오류' 등 다양한 조건을 NULL 처리로 사용해왔어서 해당 챕터를 읽으며 코드 구현에 대해 조금 더 생각을 하게 되었다.  또한, Chapter 22. 예외처리에서는 불필요한 예외를 제거하고, 중첩된 예외 처리 코드의 처리 매커니즘을 다른 클래스나 함수로 추출하는 방법을 통해 코드 가독성 개선 방안 역시 고민해보게 되었다.


 책을 읽으며 좋았던 점은, '노트'로 제공되는 해당 장의 주요 키워드에 대한 정리 제공과, 부록에 실린 '용어사전'이다. 또한, 해당 장과 연관된 책의 다른 챕터를 바로 제시함으로써, 학습의 유기적 연속성을 지향하는 점이 책을 꼭 순서대로 읽지 않아도 관련된 내용을 더 효과적으로 이해 할 수 있어 좋았다.


 

책의 서문에 실린 옮긴이의 말에 나오는 두 가지 질문이 책을 관통하는 핵심 주제이다.

  •  사람들이 이해하기 쉬운 코드를 작성하려면 어떻게 해야 할까?
  •  코드를 오랬동안 안전하게 유지 보수할 수 있는 방법은 무엇일까?


 

이와 관련된 생각과 고민을 하고 있다면, 혹은 코드 리팩토링과 클린 코드에 관심이 있다면, '실무로 통하는 클린 코드'의 일독을 추천한다. 

 

 

 

  "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

내 코드를 좀 더 깔끔하게 하고 싶을 때 지침서

 

 

사실 책을 받아서 읽어 보기 전에도 이 안에는 어떠한 내용이 들어있을 지는 예상이 가긴 했다. 코드를 좀 더 안정적으로 작성하고, 깔끔하게 작성하고, 협업을 함에 있어 어 좋은 코드는 무엇인지... 사실 이러한 책은 주변에 둘러봐도 많이 있다. 당장 같은 출판사의 마틴 파울러 저자의 리팩토링마저도 좋은 코드를 어떻게 작성하고, 가꾸어 나가는지 알려주는 책이다.

약간 다른 면은 독자에게 질문이 주어지고 이 질문을 해결해 나가는 방식으로 기술 한다는 것이다. 이러한 방식은 상당히 마음에 들긴한다. 요점만 딱 얘기하여, 어떤식으로 코드가 고쳐질지에 대해서도 예측을 하는 재미도 있었다.

 

 

항상 주제가 주어지고 그 주제 전에 용어에 대한 설명을 하고, 이러한 코드가 왜 문제가 되는지에 대해서 좀 더 직관적으로 이해시키기 위해서 간단한 설명을 이어나간다.

 

 

이 책에서의 솔루션은 항상 문제 -> 해결 -> 설명으로 이루어진다. 마음에 들었던 부분이기도 하다. 독자들에게 문제를 주고 바로 어떤식으로 해결해야되는지 짧은 문장으로 설명해준다. 이를 코드로 설명을 이어나간다.

 

 

이 책은 언어에 종속되지 않고 여러가지 언어를 사용하고 있다. 또는 수도코드를 이용해서도 설명하고 있다. 코드를 깔끔하게 작성하고 정리하는 것이 한 언어의 종속된 것은 아니어서 해당 방식을 선택한 것 같다.

 

 

중간 중간에 리팩토링 한 방식에서 독자가 더 알면 좋을 것 같은 정보들을 노트에서 설명해준다. 디자인 패턴과 같은 중요한 정보들도 상기시킬 수 있다.

 

 

기대했던 바이다. 어떻게 하면 좋은 코드를 작성하고 좋은 코드로 바꿀 수 있는 지에 대한 지침서이다. 이러한 책은 굉장히 많지만 혹시라도 한 언어에 종속되어 있지 않으면서, 지침서처럼 보기 좋은 책을 고르라면 이 책을 선택할 수 있을 것이다.

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

실무로 통하는 클린 코드
- 코드 품질과 디자인을 개선하는 208가지 실전 레시피 -

안녕하세요. 율시시스SS입니다.
오늘 소개시켜드릴 개발 도서는 실무에서 개발을 할 때 좀 더 리팩토링을 잘 하고 싶고, 유연한 코드를 만들고 누가 봐도 알아보기 쉬운 코드를 만들고 싶은
생각이 누구나 있을겁니다. 이런 코드품질을 개선하는 방법을 담은 도서 '실무로 통하는 클린 코드'인데요.
코드 품질을 높히고 싶은 분들은 해당 도서를 꼭 읽어보시기를 추천드립니다.

 

 

 

실무로 통하는 클린 코드 입니다.
실무에서 일하고 계시는 개발자분들, 개발을 하면서 나중에 수정할 때 과거의 나가 짠 코드에 경악을 해 보신적이 있으신가요?
저는 ... 있는데요. 해당 도서를 읽으면서 과거에 개발할 때 하지 말아야 한짓이 책에 있었습니다. 과거의 기억을 되살리면서 앞으로 개발할 때도 클린 코드가 되도록 노력할 수 있는 도서입니다.

 

 

 

코드 품질, 개발할때마다 계속 생각하게 되는 단어 입니다.
누군가 내 코드를 볼 때 이해할 수 있을까? 이해하기 쉬울까? 유연성있게 개발한게 맞을까? 라는 생각을 계속 하게 되는데요.
협력하여 개발하기 때문에 코드 품질이 좋으면 좋을 수록 다른 개발자가 해당 코드를 이해하고 수정하기도 쉬워지죠.

 

실무로 통하는 클린 코드도서는 25개의 장으로 구성되어 있으며 클린코드를 올바르게 적용했을 떄와 그렇지 않았을 때의 장단점을 보여주는 여러 원칙과 기본 사항으로 시작하는데요.
각 장마다 보면 문제가 있으며 문제에 대한 해결과 설명을 통해 클린 코드를 도와줍니다.
각 장마다 문제를 보면 여러분이 실제 개발을 할 때 실수할 수 있는 부분이 굉장히 많습니다. 읽으면서 기억을 하시고 개발할 때 해결방안으로 개발 하면 좀 더 코드 품질이 좋아지지 않을까 싶네요.

 

 

요즘에는 플러그인으로 다양하게 코드 품질을 높힐 수가 있는데요. 해당 플러그인도 해당 도서에서 비슷하게 발견된 문제를 해결해주는 플러그인입니다. 그렇기 때문에 실무로 통하는 클린 코드 도서를 읽고 난 뒤 왜 플러그인이 수정해 주는지 이해를 하면 더욱더 좋을것 같습니다. 중간중간에 원칙으로 인해
문제를 수정하는 과정이 나오는데요. 해결에 대한 팁도 함께 나오기 때문에 이런 포인트도 보면서 함께 문제를 해결해 나가는 과정을 읽었으면 좋겠습니다.
저 또한 개발을 하면서 클린 코드를 지향합니다. 내 코드를 남이 봤을 때 또는 내가 남의 코드를 봤을 때 메소드의 기능을 명확하게 파악할 수 있어야 하고
유연한 코드면 수정하기도 편하기 때문인데요. 예측할 수 없는 코드를 볼 때면 수정하기도 힘들고 왜 이렇게 만들었는지 알기도 힘들기 때문입니다.
여러분도 해당 도서를 읽고 조금이나마 클린 코드를 했으면 좋겠습니다.

 

 

한빛미디어 < 나는리뷰어다 > 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

 

 

 

 

 

 

 

> 책에 대한 간단한 정보

208가지 실전 레시피를 기반으로 책을 저술했음을 알려준다.

실제로 상당한 내용이 하나하나의 요소로 적혀있다.

코드 품질을 개선하고자 하는 자들에게 구미가 당기도록 되어있다.

그리고 나름 책의 품질을 보증하는 오라일리 책이기 때문에 더욱 기대가 된다.


 

> 인상깊은 부분들


 

데메테르의 법칙

개인적으로 여러 파일이나 클래스를 가진 코드 작성시 중요하게 여기는 부분이 있다. 바로 서로간의 관계이다.

서로간의 관계가 느슨하게 하기 위해 노력해야 한다고 생각한다. 그래서 각 클래스나 인터페이스의 접점(호출부)이 간결하게 되어있는 것을 선호한다. 불가피하게 많이 참조하게 된다고 하더라도 그에 합당하게 읽혀지는 것을 선호하는데, 그에 대한 용어를 처음 알았다. '데메테르의 법칙'이다.


 

버그? 결함!

이것은 십수년간 일해온 나도 놓치고 있던 부분이다. 버그라는 용어를 많이 사용하고, 심지어는 회사의 공식 QA 시스템도, BTS(Bug Tracking System)이라고 부르는 것을 보면 말 다했다고 본다. '당연히 버그 아니야? 그래서 버그를 수정하지'라고 생각하며, 릴리즈노트에는 '버그 수정'이라는 항목을 만들어서 기록한 부분도 있으니 말이다.

하지만, 버그란 외부에서 준 요인에 의해 의도치 않은 동작을 일으킨 것이기 때문에, 코드의 부적절성으로 발생한 현상은 엄밀히 말하면 결함(Defect)이라고 하는 것이 맞다.


 

유령과도 같은 폴터가이스트

공포영화에서 나올법한 용어였다. 폴터가이스트 객체 제거하기이다.

좀 더 구조를 짜임새있게 작성하려다보면 하나의 객체를 만들기 위해 중간에 다른 객체를 만들어서 그것을 파라미터로 집어넣는 경우가 종종 있다. 하지만, 이것은 잠시 만들었다가 넣을때만 사용할 뿐이라고 봤을 때에는 과연 그것이 필요할지 고민해보라는 부분이다. 잠시 나타났다가 사라진다는 의미에서 '폴터가이스트 객체'라고 표현하였다. 구조상 틀린것은 아니지만, 이 정도로 잠시 나오는 객체는 더 줄일 수 있는 여지가 있기 때문에, 이에 대한 고민이 필요하다는 의미로 해석된다.


 

Impl 접미사.. NO

이는 내가 자주 사용하는 부분이기도 해서 눈에 띄었다.

인터페이스는 I 접두사를 붙이고, 그것을 구현하는 구현체는 Impl 접미사를 붙여서 해당 인터페이스의 구현체임을 표현하는 방법에 사용한다. 하지만, 여기에서는 실제 세계에서 하나의 개념에 인터페이스와 Impl의 개념이 혼재하여 사용되지는 않기 때문에, 실제 세계에서 사용할 법한 이름으로 사용하기를 권하는 것이다.

이는 실제 적용을 어떻게 하는 것이 좋을지 좀 더 연구가 필요해 보이기는 한다. 하지만 클래스의 속성을 접미사로 표현하는 것은 세련되지 않다는 점에는 나 역시 동의한다. 이것을 고려해서 코드 작성할 수 있도록 노력해보아야겠다.


 

싱글턴의 해악

싱글턴은 참 쉽게 쓰는 패턴이기는 하다. 이제는 패턴이라고 부르기 민망할 정도로 아주아주 구현도 쉽고, 이해도 쉽다. 하지만 그만큼 개발 전체적으로는 해악이 많다. 어느정도 있다고는 생각했지만, 이렇게 많을줄은 몰랐다. 현재 작성하는 코드 중 싱글턴 구현이 주로 되어있다면, 그것이 반드시 필요한지 점검해보고싶을 정도이다.


 

용어 부록의 일부

이곳에는 용어집이 함께 담겨있다.

용어집의 내용이 꽤 되어서 도움이 많이 되었다. 앞에서 설명한 내용에 대해서 다시 친절하게 정리한 것을 알 수 있었다.


 

> 괜찮은 부분


 

1. 카테고리를 적절히 나누어서 표현하였다.

208가지 레시피라고 표현한 것이 각각의 클린코드를 만드는 기법에 대한 것인데, 이것이 그냥 나열만 하면 각각을 보면 다 공감은 가겠지만, 머릿속에서 정리도 쉽지 않고, 그래서 남는것이 별로 없게 된다. 이것을 각각의 적절한 카테고리로 나누어 놓은 것인 매우 좋았다. 공리설정, 빈약한 모델, 기본형 집착, 가변성, 선언적 코드, 명명, 주석, 표준, 복잡성, 블로터, YAGNI 원칙, 빠른 실패, if문, null, 섣부른 최적화, 결합도, 전역, 계층, 테스트, 기술 부채, 예외, 메타프로그래밍, 타입, 보안으로 나눈 내용이 그것이다. 또한 이렇게 나누어 놓은 것으로 인해, 나의 관심사를 쉽게 접근할 수도 있고, 필요한 부분을 발췌하여 보기도 좋다. 때에 맞는 것을 찾아볼 경우가 더 많기 때문이다.


 

2. 다양한 언어를 예제로 사용하였다.

Java, PHP, Javascript, C#, Ruby 등 정말 다양한 언어를 이용하여 예시를 들었다. 각 요소의 상황에 맞는 언어를 맞게 표현하였기 때문에 잘 모르는 언어라고 하더라도 문제가 되지는 않았다. 사실 언어라는 것은 하나의 도구일 뿐, 언어 자체에 갖혀있는 것은 좋지 않다고 생각하기 때문에 이런 선택에 대해 긍정적으로 생각한다. 또한 특정 언어에 익숙한 사람만 타겟으로 되어있다면, 그 외의 언어를 다루는 사람들은 불편하게 볼 수 있거나 거리가 멀다고 생각하기 쉬운데, 이 책은 그렇지 않다.


 

3. 용어 정리에 공을 들였다.

글 중간에 용어를 새로 사용할 경우 그에 대한 설명을 잘 달아주는 것은 물론이고, 별도의 지면을 활용하기 어려운 경우에는 주석을 활용하기도 하였다. 또한 책의 뒷 부분에는 아예 용어를 모아놓은 곳도 있어서 그곳을 통해서 내가 모르거나 이해가지 않는 용어에 대해서 알 수 있도록 돕고 있다. 어떤 분야든 새로운 용어가 너무 많을 경우 그만큼 장벽을 느끼기 쉬운데, 이 책은 그런 부분에 대한 배려가 크다고 생각한다.


 

> 아쉬운 부분


 

1. 책의 물리적인 구성이 아쉽다.

이 책은 표지 부분이 말려있지 않다. 이런 책의 경우 수시로 꺼내보고 다시 넣고 하는 경우가 있는데, 이런 경우 책 표지가 상하기 쉬워보인다. 정말 정성스럽게 책을 관리하는 사람의 경우 이 책을 비닐로 감싸서 보는게 나을지도 모를 정도이다. 책의 퀄리티를 조금 더 올리는 방법으로 이런 것을 신경썼으면 하는 아쉬움은 있다.


 

> 추천 독자

- 개발자 지망상

- 현업 개발자


 

** 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

  • 쿡북 형식으로 다양한 프로그래밍 언어를 통해 실용적인 코드 작성법을 제안한다. 이론을 깊게 파고들거나, 학문적인 수준으로 설명을 하는 게 아님에도 불구하고, 책의 부피나(이 정도면 두께보다는 부피라고 말하는 게 적절할 거 같다), 각 장별 내용이 마냥 쉽게 읽고 이해하기는 어렵다. 로버트 마틴의 클린 코드를 알고 있다면 오히려 더 어려워할 지도 모르겠다.
  • 이 부담감만 잠시 내려놓을 수 있다면 수백개의 code snippet을 통해 세분화된 주제별로 나눠서 하나씩 살펴볼 수 있기에, 자신이 작성하는 코드의 품질을 고민하는 개발자라면 누구에게나 도움이 될 책이다. 언어도 하나만이 아니라, java, javascript, python, c, c++ 등 여러가지를 사용했는데, 하나의 언어로 제한하지 않고 대부분의 개발자들이 사용할 수 있기를 바라는 마음으로 저자가 노력했다는 느낌이다.
  • 어떤 주제들은 비교적 간단하지만(e.g. 문법에 관계된 Ch. 8 주석, Ch. 14 if 문 같은 챕터), 또 복잡해서 쉽게 적용하기 어려운 부분들도 있다(e.g. 설계에 관련된 Ch. 16 섣부른 최적화, Ch. 19 계층 같은 챕터). 난이도가 낮건 높건 무관하게, 항상 빨리 해야 하는(혹은 요구받는) business 기능들의 일정 때문에 실무에서 팀원들에게 이런 부분을 쉽게 주문하기 어렵고 미루기가 쉽다는 점은 잘 알고 있다. 이럴 때 이렇게 직접적인 도움이 되는 책과 함께 이야기하면 조금은 팀원들에게 이야기하기 쉬워지지 않을까? 하는 생각이다.
  • https://www.hanbit.co.kr/store/books/look.php?p_code=B2230430901
  • https://www.oreilly.com/library/view/clean-code-cookbook/9781098144715/
  • https://github.com/xosuma/clean-code-cookbook

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

'좋은 코드는 단순히 빨리 돌아가기만 해서는 안 된다사람이 읽히는 그런 코드여야 한다.'

협업을 하며 가장 고민되어야 하는 포인트는 바로 같이 일하는 동료들이 나의 코드를 보았을 때쉽게 이해가 가능하며 내가 수정한 사항이 다른 컴포넌트들과 맞물려 동작할 때 커플링이 없는지이다.

 

알고리즘 문제를 오랫동안 풀어왔고효율의 관점을 항상 1순위로 생각했던 필자의 경우에는 코드는 단순히 바이너리 (기계어)로 변환되어 cpu에 의해서 해석되는 하나의 명령어일 뿐 그 이상도 그 이하도 아니었다.

 

아마도 그동안 이런 부분을 최우선으로 바라보는 분들과 협업을 한 경험이 많지 않았기에 그럴 수도 있겠다는 생각이 든다. (어찌 된 게 이 필드에서 나름 20년 가까이 일하면서이런 문화를 가진 팀을 많이 만나본 적이 없었다그만큼 클린 코드에 관한 문화가 옛날에는 전반적으로 형성되지 않았음을 의미하는 것일 수 있다.)

 

프로그래밍의 전제는 돌아가는 무엇인가를 만드는 것도 있지만 앞서 언급한 것과 마찬가지로 만들어진 코드의 유지 보수가 용이한지흐름은 잘 이해되고 파악되는지를 아는 것에 있다고도 할 수 있다.

 

이번에 리뷰한 책은 앞서 언급했던 부분에 대해서 각각의 사례를 들어 평소 필자가 궁금해했던 부분을 시원하게 긁어주었으며 이론 외적으로도 알아두면 좋을 법한 팁들을 많이 수록하고 있었다.

 

【책의 구성】 "실무로 통하는 클린 코드"의 구성은?

 

위 책은 총 25개의 챕터로 이루어져 있으며 큰 주제를 바탕으로 소주제로 소분되어 대단원을 형성하고 있다무엇보다 이 책이 갖는 장점은 원하는 내용을 찾아 해당 단락만 읽어도 실사례와 이에 대해서 어떻게 대처해야 할지 각각을 분리하여 잘 정리해두었다는 점이다.

 

따라서 이 책은 한번은 쭉 정독을 해보고 이후에는 본인이 평소 궁금하였던 부분을 중심으로 회독을 해보길 권장한다.

 


 

5.1 : var const로 변경하기

초보 개발자의 가장 큰 실수는 하나의 변수를 선언하고 그 변수를 모든 flow에서 수시로 변조해가며 재활용한다는 부분에 있다.

 

하나의 변수는 특정 scope에서 특정 역할에 충실해야 되며 이미 선언된 경우에는 될 수 있으면 가변조가 발생하지 않고 그 값을 기능 수행이 완료되는 시점까지 유지하는 것이 다른 프로그래머와 기능의 흐름을 이해하는 부분에서 이점이 크다.

따라서 변수의 R&R이 결정되었다면 그 이상의 용도로는 절대로 사용하지 않도록 하자

 


 

10.1 : 반복되는 코드 제거하기

 

모든 함수기능은 코드로 구성되어 있다하지만 간혹 유사하거나 같은 기능을 하는 함수들이 이곳저곳 산재해있는 경우가 다분하다이런 경우, R&R을 기반으로 같은 코드는 하나의 클래스 메서드나 혹은 유틸리티 클래스로 뽑아 사용하는 것이 좋다.

 

그렇게 해야 추후 수정이 발생했을 때중복된 같은 코드의 로직을 수정하는 과정에서 누락이 빠지지 않을 수 있으며변경 포인트를 한곳으로 합침으로써 코드의 가독력을 향상시키는 데에 효율을 높일 수 있다.

 


 

16.2 : 섣부른 최적화 제거하기

 

'일어나지 않을지도 모르는 일에 대해서 추측하지 말라사람은 불안에 취약한 동물이다언제 일어날지 모르는 일을 대비하기 위해서 말도 안 되는 곳에 말도 안 되는 예산을 낭비하는 경향이 있다.

 

코드도 결이 같다경험적논리적 판단에 근거하지 않은 막연한 두려움에 없어도 될 코드들을 덕지덕지 붙이거나 이에 대해서 미리 최적화하여 가독력을 크게 떨어트리거나 혹은 코드의 흐름을 해친다.

 

좋은 코드는 지금에 집중하고 또한 경험을 바탕으로 실리적인 부분에 대해서만 최적화를 진행한 코드임을 명심하자.

 

 

【 실무로 통하는 클린 코드를 읽고 나서 】

 

'백문이 불여 일타라'

 

컴퓨터 업계에서 웃으게로 하는 말이다.

 

필자의 경우에도 수많은 소프트웨어 개발론과 클린 코드 개발론 책들을 읽으며 이론에 관해서는 어느 개발자 못지않은 전문성을 갖추고 있다.

 

하지만 책에서 읽었던 경험을 실무에서 녹여내는 것은 책을 읽으며 단순히 학습하는 것과 그 결이 사뭇 다르다.

 

많이 만들어보고 많이 실패해 보고 회고해 봐야 느는 영역인 것이다.

 

단연컴퓨터 학문뿐만 아니라 모든 학문이 이러한 것 같다.

 

#본 도서는 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

프로젝트를 진행하면서 구현에 급급했던 모습에서 한 단계 발전해서 ‘어떻게 하면 코드를 더 잘 쓸 수 있을까?’ 를 고민하는 나를 발견했다. 현업에서는 어떻게 코드를 작성하고 리팩토링하는지 알고 싶었다.

 

‘내가 지금 작성하고 있는 코드가 맞는 코드인가? 어떻게 하면 더 잘 쓸 수 있을까’ 코딩을 하면서 내가 작성한 코드에 대해 피드백을 받고 더 발전하고 싶은 욕심이 생겼다. GPT의 도움과 나의 검색 그리고 머리굴리기로 코드를 작성하고 있지만 늘 2%가 부족함을 느끼고 있었다.

 

그런 고민과 함께, 마침 서평을 쓸 기회를 얻게 되었는데, 내가 고민 하고 있는 두 단어가 떡하니 들어간 책이 눈에 들어왔다. 그것은 ‘실무’와 ‘클린코드’였다.

 

책의 첫 머리에는 내가 하고 있는 고민이 적혀 있는 것 같았다.

  • 사람들이 이해하기 쉬운 코드를 작성하려면 어떻게 해야 할까?
  • 코드를 오랫동안 안전하게 유지 보수 할 수 있는 방법은 무엇일까?

 

어떤 내용이 있나?

어떤 내용이 담겨 있을지 목차를 먼저 훑어봤다. 목차만 읽었음에도 꽤 흥미로운 주제들이 많았다. 평소에 궁금했던 내용들이 들어있었고, 책은 그에 대한 답을 어떻게 설명해 줄 지 기대되었다.

  • 코드 스멜이란 무엇인가? 리팩터링은 무엇인가? 왜 클린코드인가?
  • 객체의 본질 파악하기, 기본형 데이터 구체화하기, 문자열 남용 제거하기
  • var를 const로 변경하기, 본질 변경 금지하기, 지연된 초기화 제거하기, 호이스팅 방지하기
  • 명시적 반복 대체하기, 재사용 변수 범위 좁히기
  • 헬퍼와 유틸리티 이름 변경 및 분리하기, 추상적인 이름 변경하기
  • 주석을 함수명으로 변환하기, 주석을 테스트로 대체하기
  • 반복되는 코드 제거하기, 메서드를 객체로 추출하기, 기능 토글 제거하기
  • 과도한 인수/변수/괄호/메서드 줄이기

 

어떤 문제 상황을 설명할 때 하나의 언어로만 이야기 하지 않는다. JavaScript( or TS ), Ruby, Java, PHP 등 다양한 언어로 코드를 설명하기 때문에 JavaScript만 공부했던 나는 약간의 혼란이 오기도 했다. 하지만 클린코드는 특정 프로그래밍 언어에만 제한되는 것이 아니기 때문에 일부러 다양한 언어로 설명한다고 이야기하는 저자를 보며, ‘음 그렇지 클린코드는 프로그래머의 숙명이지’ 하며 내가 쓰는 언어에 적용해가며 이해하려고 했다.

 

각 장에서는 코드를 작성하며 일어날 수 있는 여러 상황들을 <문제><해결><설명>의 순으로 설명하는데 책에서는 이것을 레시피라고 칭햔다. 저자는 '책의 레시피를 최대한 활용하려면, 내가 사용하는 프로그래밍 언어와 디자인 솔루션으로 변환해 적용해보기를 추천한다. 레시피를 통해 문 제를 이해하고 원하는 결과를 파악하고 코드를 개선하는 방법을 배워봐라' 라고 이야기 한다.

 

나 또한  책의 스타일에 적응해가고 보니 내 코드로 변형해서 생각할 수 있는 활용력?이 생겼다. 책을 읽으면 읽을수록 내가 작성하고 있는 코드가 떠오르면서 ‘이렇게 고쳐볼 수 있겠다’는 아이디어가 떠올라서 굉장히 재미있게 읽고 있는 중이다.

 

어떻게 책을 활용해 볼 수 있을까?

실제로 책을 통해 아이디어가 떠올라 현재 진행하고 있는 프로젝트에 적용해보고 싶은 욕구가 뿜뿜했다. ‘당장 코드로!!!’ 이런 상황이 되는 것은 아니기 때문에 이렇게 아이디어가 떠오른 것을 어떻게 정리할 수 있을까 고민을 하던 중에 목차를 활용해야 겠다는 생각을 했다.

 

(1) 노션에 정리

각 장의 내용에서 내가 이해한 내용을 나만의 언어로 바꿔서 정리해봤다. ( 진 행 중 ) 이렇게 정리하고 보니 클린코드에 대한 개념이 훨씬 쉽게 다가왔다. 그래서 내 코드에도 적용해 볼 수 있을 것 같다는 자신감이 뿜뿜 커졌다.

 

(2) 목차 활용하기

또 다른 방법은 목차에 내용 요약해 놓는 것이다. 이 책은 번역본이기 때문에, 목차만 봤을 때 어떤 내용인지 감이 안 오는 경우가 종종 있다. 그리고 목차에 모든 내용을 담을 수 없기에 내가 꼭 적용해보고 싶은 부분이 어디인지 기억이 안나는 경우가 있을 수 있기에 해당 레시피를 간단하게 정리해서 목차에 써 놓고 있다. ( 진 행 중 )

 

이렇게 정리해서 옆에 요약본처럼 두고 싶을 정도로 알찐한 내용이 들어있었던 책이다. 현재 진행형으로 읽고 있는 책이라 앞으로 적용해 볼 수 있는 레시피들이 더욱 궁긍해진다.

첫 진입시 약간의 마음의 준비가 필요하지만 ㅋㅋㅋㅋㅋ ‘한번은 읽어보자’ 하고 마법을 걸고 시작만 한다면 분명 내 코드에도 변화가 있을 거라 생각한다.

 

"한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

실무로 통하는 클린 코드

 

  코딩을 처음배울 때는 내가 사용하는 언어의 문법을 배우는 데 바쁘고, 그 언어를 이용해 기능을 구현하는 것에 관심이 있어, 클린 코드라는 것을 들어도 귀에 들어오지 않는다. 이는 회사에 취직해서 회사의 플랫폼에 맞춰, 주어진 업무를 빠른 시간내에 구현하는 초기 개발자에게도 해당하는 이야기일 수 있다. 회사가 만드는 프로그램의 수명에 따라, 어떤 곳은 단품을 만들면 새로 코드를 만들어야 하고 어떤 곳은 10년이 지나도 동일한 코드 베이스에서 계속해서 기능 개발 및 버그 수정을 해야하는 곳이 있다. 후자의 경우, 시간이 지나면 지날 수록, 또 새로운 기능을 계속 개발하면 개발할 수록, 이전에 급한 일정때문에 기능에만 몰두해 개발한 코드는 부채처럼 나에게 계속 코드 관리의 어려움, 테스트의 어려움, 그리고 여기를 고치면 저기서 튀어나오는 버그들의 어려움으로 개발이 점점 더 어려워지게 된다.

  이와 같은 경험은 크던 작던 수년 이상 개발을 업으로 하는 분들에게는 적어도 한번 이상 해 본 경험일 것이다. 시간이 지나고 좋은 프로그래머가 되면 이런 경험은 사라지지는 않지만 많이 줄어들 것이다. 그러면 좋은 프로그래머는 어떤 프로그래머인가? 이런 고민을 할 때 켄트 벡이나 엉클밥(로버트 C. 마틴)의 책들에서 하는 이야기에 대해 관심을 기울이게 된다.
 

img.jpg

  엉클밥의 클린 코드를 읽었을 때 내심 공감이 되는 부분이 아주 많다. 그리고 책의 예제를 참조해서 이렇게 나도 코드에 적용해봐야지 하는 의욕도 넘치게 된다. 그런데, 클린 코드라는 것이 많은 경험을 통해 저자가 작성을 한 것이다보니, 저자의 의도를 이해했다 하더라도, 어떤 경우에 어떻게 사용해야하는 지, 막상 적용하려 했을 때 막막한 경우가 많이 있을 수 있다. “실무로 통하는 클린 코드”는 원제 그대로 Clean Code Cookbook 으로, 프로그래머들이 실제 프로그램을 작성하거나 오랜지시간 유지 보수를 하면서 마주하는 다양한 경우를 체계적으로 정리하고 그에 대한 해결책, 해결책의 의미를 다양한 언어를 이용하여 예시를 통해 설명을 하고 있다.

  책은 다른 Cookbook과 달리 책 전체를 관통하는 MAPPER라는 개념을 도입해, 프로그램과 실세계를 수학의 전단사 개념을 통해, 개발자가 추상적으로 생각하며 빠져들 수 있는 함정과 이를 실세계에 반영했을 때 어떻게 문제가 될 수 있는지도 함께 설명을 한다. 처음에는 코드에 무슨 전단사? 라고 생각할 수 있지만, 책을 읽어나가다보면, 이렇게 생각하는 훈련을 해 보는게 도움이 된다는 것을 느낄 수 있게 된다.

  이 책은 개발자가 겪게 되는 여러 문제들을 문제-해결-설명의 구조로, 어떤 경우에 어떻게 해결책을 생각해 볼 수 있는지 설명을 해 나가는데, 이런 구조는 생각보다 효율적이라 생각된다. 막상 클린 코드, TDD, 리팩터링 등의 책을 읽어보면, 읽을 때 아 그렇지… 하고 해당 부분에 대해서 공감하고 지나가지만, 그 외에 경우에 이것이 맞는 것인가? 라고 헷갈리거나 적용을 주저하게 되는 경우들이 많다. 이런 경우에 책에서 해당 부분을 찾아 보면, 쉽게 해당 부분이 눈에 들어오는 것은 물론 다양한 책에서 설명하는 이론들 중 어떤 부분이 이 내용과 연결되는 지도 좀 더 쉽게 이해를 할 수 있게 된다. 다음은 SoC(Separation of Concern)이라는 부분과 연결되는 책의 레시피 중 한 예시이다.

  저자는 다양한 언어를 통해 가장 주제를 잘 설명할 수 있는 언어로, 각 주제에 대해 설명을 하고 있는데, 이 부분은 독자에 따라 호불호가 될 수 있을 것으로 보인다. 개발을 수년 이상 해 본 프로그래머는 적어도 하나 이상의 언어를 배워 현상에서 사용하는 경험을 해 보았겠지만, 그렇지 않은 경우라면, 예시가 이해가 되지 않는 경우 매번 어떤 언어인지도 모르는 언어들을 원리도 원리지만 동작이 어떻게 되는지 코드를 확인해보는 것이 책의 흥미를 떨어뜨리는 요소가 될 수 있다. 요즘은 ChatGPT와 같은 AI 툴들이 있어 좀 더 쉽게 예제를 파악할 수 있겠지만, 이 역시 책에 대한 집중을 떨어뜨릴 수 있다.

  그럼에도 이 책은 개발자가 고민할만한 많은  경우들을 연관 주제별로 나누어, 클린 코드에 대해 좀 더 잘 이해할 수 있도록 도와준다.

  이 많은 레시피를 읽고나면 다 기억을 못할 것 같은데? 라고 생각하시는 분이 있을 수 있다. 맞는 말인데, 그런 점에서 이 책의 베타리더분이 작성한 다음 내용이 공감이 된다.

 

베타리더.png

 

  리뷰를 마치며 든 생각은, 개인마다 호불호가 있겠지만… ebook으로 제공받아 리뷰를 하였는데, 이러한 cookbook 성격의 책은 ebook보다는 offline 책이 더 효율적일 것 같다는 생각이 든다. ebook도 노란색으로 중요한 부분을 하이라이트 해 두고 그 부분을 찾아가며 빠르게 검색할 수 있지만, 아직은 중요한 내용에 형광펜으로 표기하고, 관련된 부분들을 tagging 해 두어 주루룩 넘기면서 빨리 찾아보는 것이 더 좋을 것 같다 ^^.

 

한빛미디어 < 나는리뷰어다 > 활동을 위해서 책을 제공받아 작성된 서평입니다.

개발자의 숙명, 그것은 끝없는 코드와의 싸움입니다. 특히, 마치 꼬인 실타래처럼 복잡하게 얽힌 코드를 일컫는 "스파게티 코드"는 개발자들을 좌절시키는 주범이죠. 저도 역시 아직까지 코드를 작성하면 할수록 스파게티 코드의 늪에서 헤어 나오지 못하고 디버깅에 허덕이고 있는 모습에서 벗어나지 못하고 있습니다. "실무로 통하는 클린 코드"라는 책이 이러한 늪에서 탈출할 수 있는 하나의 빛이 되어주지 않을까 하는 기대감으로 책을 펼쳤습니다.

이 책은 208가지의 실전 레시피를 통해 클리 코드 작성의 비법을 전수합니다. 마치 숙련된 요리사가 자신만의 레시피를 공유하듯, 다양한 상황에서 발생할 수 있는 코드 스멜을 제거하고, 가독성과 유지 보수성을 높이는 구체적인 방법을 제시합니다. 꼬인 실타래를 하나씩 풀어내듯, 복잡한 코드를 명확하고 간결하게 정리하는 방법을 알려주는 친절한 안내서로 소개할 수 있습니다.

하지만 모든 레시피가 완벽한 것은 아닙니다. 다양한 프로그래밍 언어로 예제를 보여주다 보니, 특정 언어에 익숙한 독자에게는 오히려 혼란을 가중시킬 수 있을 것 같다는 생각을 했습니다. 여러 나라의 언어가 뒤섞인 요리책을 본다면 당황스러울 것 같지 않나요? 일부 번역은 매끄럽지 않아 이해에 어려움을 겪기도 했습니다. "전단사"라고 번역한 용어는 매번 만날 때마다 의미가 와닿지 않아 글을 이해하는데 방해가 되었습니다.

그럼에도 불구하고, 이 책은 클린 코드 작성의 중요성을 일깨워 주고, 실질적인 개선 방법을 제시하는 좋은 글로 가득하다 생각합니다. 가변성을 줄여서 코드의 안정성을 높이고 예측 가능성을 증가시키는 방법이나, 반복되는 코드에 대해 중복을 줄여 유지 보수성을 높이고 버그를 줄이는 방법, 테스트 주도 개발을 통해 코드의 신뢰성을 높이는 방법 등에 관한 내용은 귀담아 야 할 내용으로 기억에 남습니다.

이 책이 클린 코드 작성을 위한 마법 같은 해결책은 아니지만, 꼬인 실타래를 풀어내는 데 필요한 실마리를 제공하는 유용한 안내서입니다. 스파게티 코드와의 전쟁에 지쳐있는 저를 포함한 개발자들은 이 책을 통해 새로운 전략을 세울 수 있을 것입니다.

"실무로 통하는 클린 코드"는 클린 코드 작성을 위한 여정에서 든든한 동반자가 되어줄 것입니다. 완벽한 해결책은 아니지만, 코드 품질 향상을 위한 노력에 긍정적인 영향을 줄 것이라 확신합니다. 코드 품질에 고민하는 개발자라면, 한 번은 읽어볼 만한 가치가 있는 책이라 추천합니다.

한빛미디어 < 나는리뷰어다 > 활동을 위해서 책을 제공받아 작성된 서평입니다.

코딩을 하다 보면 항상 변수에 대해 고민하게 되는 경우가 있다. 최근 들어서야 Prettier, Stylelint 같은 것들이 꽤 잘 나와서 작업자들 간에 공통된 규칙을 가지고 코딩이 가능했지만, 이전에는 외워서 해야만 하는 경우가 허다했다. 세상이 좋아졌는데 문제는 이런 것들을 빠르게 도입하기 어려운 환경도 있고 권한을 가진 사람이 도입을 몰라서 못하는 경우도 있는데 실무자라면 꼭 한번 읽어보면 좋을 것 같다는 생각이 들었다.

개인적으로 7장 명명을 가장 재미있게 읽을 수 있었던 것 같다. 변수를 선언할 때마다 항상 어떤 식으로 정해야 할지 막막하다. 결국 한글을 번역기를 돌려가며 사용하곤 하는데 뭔가 이마저도 잘 와닫지 않는 경우가 허다했다.

  • 충분히 길며 모호하지 않고 설명이 포함된 명칭
  • 클래스명을 정확히 하고 책임을 세분화
  • my-객체 이름 변경
  • 단순히 result가 아닌 역할을 암시하는 이름 사용
  • 이름은 설명을 포함하며 충분히 길어야 하지만 너무 길지 않도록
  • 추상적인 이름을 구체적인 이름으로 변경
  • 맞춤법에 주의
  • 이름은 중복되지 않도록. 이름은 문맥에 맞고 지역적이어야 함
  • 클래스 명은 단수를 사용. 클래스는 개념을 나타내며 개념은 단수로 되어있음
  • 인수는 역할에 따라 지정
  • 이름에 불필요한 접두사나 접미사를 사용하지 말 것
  • 변수명을 data로 지정하지 말것

8장 주석은 개인적으로도 신경 쓰고 있던 부분이라서 공감되는 부분이 있었다.

  • 더 이상 사용하지 않는 주석 제거
  • 게터 주석 제거. 사소한 기능에 대한 주석은 불필요
  • 함수가 수행해야 하는 작업을 설명하는 경우 해당 주석을 함수명으로 포함시켜 주석을 제거
  • 메서드 내부 주석 제거

9장 표준은 코딩의 규칙을 위해 최근의 프로젝트들에서는 거의 다 Prettier로 기본 스타일을 통일시키고 있는 추세다.

  • 조직 전체가 동일한 표준을 따르고 시행할 것
  • 들여 쓰기의 표준화
  • 대소문자 규칙 통일

등등 책에는 다양한 규칙들이 망라되어 있다.

자동화를 시키는 과정에서 무언가 규칙을 정해 나가는 과정에서 필요한 것들에 대해 꽤 다양한 정보를 얻을 수 있을 것이라 기대된다.


한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.


 

실무로 통하는 클린 코드(Clean Code Cookbook)‘는 소프트웨어 개발자에게 필수적인 클린 코드 작성법을 다루고 있는 책으로, 각 장마다 다양한 주제를 깊이 있게 탐구하고 있습니다. 책에서 제시하는 원칙과 기술들은 실무에서 바로 적용할 수 있는 유용한 팁들로 가득 차 있습니다. 이 후기를 통해 책의 주요 내용과 나의 생각을 정리해보겠습니다.

 

첫 번째로, 책은 클린 코드의 중요성을 강조하며, 코드 스멜, 리팩터링, 그리고 다양한 소프트웨어 설계 원칙에 대해 깊이 있는 설명을 제공합니다. 코드 스멜이란 코드를 읽기 어렵게 하거나 유지보수를 어렵게 만드는 요소를 의미하며, 이러한 문제를 해결하기 위한 리팩터링의 필요성을 잘 설명하고 있습니다. 각 장에서는 이론뿐만 아니라 실질적인 예제를 통해 독자가 쉽게 이해할 수 있도록 돕고 있습니다. 특히, 빈약한 모델과 기본형 집착을 다룬 장에서는 객체 지향 프로그래밍의 본질과 중요성을 다시금 깨닫게 해주었습니다.

 

다음으로, 다루는 내용이 매우 체계적이라는 점이 인상적이었습니다. 각 장이 독립적으로 구성되어 있어 필요에 따라 원하는 내용을 쉽게 찾아볼 수 있습니다. 예를 들어, ‘가변성’ 장에서는 변수 선언의 중요성과 올바른 가변성 관리를 강조하며, 코드의 안정성을 높이는 방법을 제시합니다. 이런 점에서 책은 개발자가 흔히 저지르는 실수를 피할 수 있도록 안내해 줍니다.

 

또한, ‘주석’ 장에서는 주석의 유용성과 함께 불필요한 주석을 제거하고 코드 자체로 의도를 명확히 할 수 있는 방법을 다룹니다. 주석은 코드를 보완하는 역할을 해야지, 코드의 대체물이 되어서는 안 된다는 점을 다시 한 번 상기시켜 주었습니다. 이와 같은 원칙들은 소프트웨어 품질을 높이는 데 큰 도움이 됩니다.

 

책의 후반부에서는 테스트와 예외 처리에 대한 내용도 다루고 있습니다. 소프트웨어의 신뢰성을 높이기 위해서는 철저한 테스트와 예외 처리가 필수적입니다. 테스트를 작성할 때는 어떤 상황에서 실패할 수 있는지를 고려하고, 예외 처리는 사용자에게 최악의 상황에서도 친절하게 정보를 제공할 수 있어야 한다는 점이 특히 인상 깊었습니다. 이러한 원칙들은 실제 프로젝트에서 많은 도움이 될 것이라 확신합니다.

 

마지막으로, 이 책은 단순히 이론적인 지식을 제공하는 데 그치지 않고, 실무에서 바로 활용할 수 있는 다양한 팁과 기법들을 제시합니다. 각 장에서 제안하는 리팩터링 기법이나 코드 개선 방법들은 모두 실제 사례를 기반으로 하여 실용적입니다. 따라서, 개발자들이 자신의 코드를 점검하고 개선하는 데 큰 도움이 될 것입니다.

 

결론적으로, ‘실무로 통하는 클린 코드‘는 개발자라면 누구나 읽어야 할 필독서입니다. 코드의 품질을 높이고, 유지보수를 용이하게 하며, 팀원들과의 협업을 더욱 원활하게 만들어 줄 수 있는 다양한 원칙과 기술이 담겨 있습니다. 이 책을 통해 많은 것을 배웠고, 앞으로의 개발에 있어 큰 도움이 될 것이라 생각합니다. 클린 코드를 작성하는 것은 단순한 선택이 아니라, 프로페셔널한 개발자로 성장하기 위한 필수적인 과정임을 다시 한 번 깨닫게 해준 책이었습니다.

 

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B2230430901

실무로 통하는 클린 코드

당신의 코드를 변화시킬 클린 코드 혁명. 개발자 성장을 위한 최적의 코드 작성법

www.hanbit.co.kr

 

해도 해도 어렵고 알면서도 못하는 클린코드에 관한 책이 나와 읽어보게 되었다.

책은 총 25장으로 이루어져있다. 꽤 많은 장으로 이루어져있다.

다루는 내용 중에는 복잡성, if문, null, 결합도, 계층, 테스트, 예외 등 다양한 내용들을 다룬다.

 

정리

 

 

가독성과 성능 어떤 것을 더 우선으로 할 것인가에 대한 고민을 누구나 한번 쯤 해보지 않았을까? 책 초반에는 위와 같은 내용이 나온다. 관련해서는 '섣부른 최적화' 를보면 좋을 것 같다.

 

 스스로 잘 지키지 못했던 부분 중 하나가 책에서 나와서 놀랐다. 코드를 짜다보면 이중 부정이 되는 경우가 간혹 있다. 그럴때 최대한 긍정조건으로 바꾸려고 하는 편이지만 또 쉽게 안될 때가(핑계..) 있기도 했었는데 다음부터는 조금 더 조심할 수 있도록 해야겠다는 생각이 들었다.

 

예제에 너무 극단적인 예제가 나온게 아닌가 싶기도 했다 ㅋㅋㅋ 하지만 누군가는 이렇게 짜고 있을 지도..? 그렇다면 꼭 수정하길 바란다.

 

가끔 네이밍에 시간을 엄청 사용한다. GPT에게 의견을 묻기도, 팀원들에게 묻기도 한다. 그만큼 내가 지은 변수명이 명확할 수록 다른 사람이 내 코드를 봐도 이해하기 쉽기 때문이라는 생각이 커서 그런것 같다. 약어로 적은 부분을 확장하기도 하고 그렇지만 너무 긴 단어는 약어로 쓸 필요도 있어보이기도 한다.(협의 하에)

 

 

책을 보다가 뜨끔한 부분이 참 많았는데 인터페이스 부분도 그렇다. 언젠가 쓰겠지 라는 생각으로 인터페이스를 선언하고 사용하는데(테스트 하기도 편하기 때문에) 일회성을 제거하라고 되어 있어서 신기했다. 관점이 다를 수도 있겠구나 싶은 부분도 책에서는 존재한다. 책에서는 '모의 객체를 실제 객체로 대체하기' 에서 해당 내용을 다룬다.

 

책 전반적으로 코드 클린을 다루고 있고 한번 쯤은 겪게 되는 코드에 대한 고민을 해보게 해주니 읽어보는 것을 추천한다. 나도 읽다보니 스스로를 계속 반성하게 되었다. 반성에게 그치는 것이 아니라 코드에도 반영한다면 내 코드를 보는 누군가에게 큰 도움이 되지 않을까 생각이 든다.

 

 

한빛미디어 < 나는리뷰어다 > 활동을 위해서 책을 제공받아 작성된 서평입니다.

처음 Coding을 배웠던 시절이 기억납니다.

 

for, if-else, switch, goto…

 

제어문을 이용해서 내가 원하는 결과를 얻었을 때는 정말 내가 창조주가 된 것 마냥 기뻤습니다.

실무를 배우게 되고 제품의 규모가 커지고 Code의 양도 늘어나고 같이 일하는 사람들도 늘어나면서 그들이 만들어내는 수많은 Code들이 합쳐지면서 점점 유지 보수나 관리, 확장은 기하급수적으로 더 어려워지게 됩니다.

최근에는 AI / LLM의 눈부신 발전으로 인해서 단순한 Coding의 영역은 많은 도움을 받고 있지만, 아직까지도 근본적인 설계 및 유지관리, 보수를 AI Model에게 맡기는 것은 무리가 있는 것 같습니다.

현재는 AI와 인간이 같이 개발을 하고 있는 과도기라고 할 수 있습니다.

하지만, 앞서 말한 근본적인 설계의 영역은 여전히 사람들의 몫이라고 할 수 있습니다.

이와 같은 근본적인 설계 및 유지 보수와 직결되는 부분 중의 하나가 바로 ‘Clean Code’입니다.

개발자들은 Code로써 소통한다고 해도 과언이 아닙니다. 이 말은 좋은 Code는 훌륭한 의사소통 도구이며, Clean Code를 작성한다는 것은 자신은 물론 동료들을 배려하고 위하는 것이기도 합니다.

본인이 작성한 Code는 시간이 흘러 나중에 본인이 볼 수도 있는 것입니다.

예전에 작성한 본인의 Code를 보고 ‘내가 왜 저렇게 했지? 무슨 생각으로 저렇게 했었지?’라는 의문을 가지는 경우도 종종 있었을 것입니다.

개발자들은 모두 스스로 Clean Code의 중요성을 본능적으로 잘 알고 있습니다.

하지만, 실제로 Coding할 대 Clean Code를 적용하는 것은 생각만큼 쉽지 않습니다.

이 책은 다양한 환경에서 개발자들이 자주 마주치는 난감한 상황에 대한 해결 방법을 레시피 형식으로 제공합니다.

200여 개가 넘는 레시피는 Clean Code 작성 노하우 및 상황에 맞는 적절한 도움말과 해결책을 제시합니다.

단순히 설명한 하는 것이 아니라, 문제 상황을 설명하는 예제 Code를 제시하고, 이를 Clean Code로 변경하는 방법도 제안합니다.

다양한 예제들을 통해 Clean Code에 대한 ‘감’을 잡을 수 있게 도와주는 가이드 역할을 하는 것이죠.

편하니깐 혹은 이렇게 하면 쉽고 빠르게 문제를 개선할 수 있으니깐라는 생각으로 무심코 지나쳤던 제 자신의 Coding 습관을 여러 번 돌아보게 만들어 주었습니다.

혹은 Clean Code를 작성하고 싶지만, 실제로 어떻게 해야 할지 모르는 경우에도 훌륭한 지침서가 되어줄 거라고 확신합니다.

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 상품명 :
실무로 통하는 클린 코드
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
실무로 통하는 클린 코드
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
실무로 통하는 클린 코드
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실

최근 본 상품1