본문으로 바로가기
평면표지(2D 앞표지)
입체표지(3D 표지)
2D 뒤표지

실무로 통하는 클린 코드

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


  • ISBN-13
    979-11-6921-277-9 (93000)
  • 출판사 / 임프린트
    한빛미디어(주) / 한빛미디어
  • 정가
    35,000 원 확정정가
  • 발행일
    2024-08-05
  • 출간상태
    출간
  • 저자
    막시밀리아노 콘티에리
  • 번역
    이태영
  • 메인주제어
    컴퓨터프로그래밍 / 소프트웨어공학
  • 추가주제어
    프로그래밍기법 , 소프트웨어엔지니어링
  • 키워드
    #클린 코드 #리팩터링 #가독성 #결합성 #테스트 가능성 #확장성 #코드 스멜 #가변성 #YAGNI #기술 부채 #메타프로그래밍 #쿡북 #프로그래밍기법 #소프트웨어엔지니어링 #컴퓨터프로그래밍 / 소프트웨어공학
  • 도서유형
    종이책, 무선제본
  • 대상연령
    모든 연령, 성인 일반 단행본
  • 도서상세정보
    183 * 235 mm, 488 Page

책소개

클린 코드를 실무에 어떻게 적용해야 할지 고민하고 있다면,깔끔하게 작성한 코드로 훌륭하게 협업하고 싶다면,개발자라면 꼭 읽어야 할 클린 코드 실습서 코드를 작성하는 것은 예술과도 같습니다. 클린 코드를 통해 여러분의 프로그래밍 작품을 더 아름답게 만들어보세요. 이 책은 개발자가 실제 업무에서 직면하는 다양한 문제를 클린 코드의 원칙을 통해 해결하는 방법을 소개합니다. 단순히 좋은 코드와 나쁜 코드를 구분하는 것을 넘어, 실제 개발 환경에서 클린 코드를 구현하고 유지하는 구체적인 방법론을 제공합니다. 자바, 파이썬, PHP, C, 자바스크립트 등 다양한 언어의 예제를 통해 클린 코드의 원칙을 실제로 적용해보고, 가독성이 높고 유지 보수하기 용이한 코드를 작성하는 방법을 배워보세요. 누가 이 책을 읽어야 할까요?클린 코드를 구현하고 싶은 프로그래머, 소프트웨어 개발자, 아키텍트 등 현업 개발자이제 막 개발자의 길에 들어선 초보 개발자, 관련 학부생, 개발자 취업 준비생 어떤 내용을 배우나요?클린 코드가 개발자에게 왜 필요한지, 실제 업무에 어떻게 적용할 수 있는지 설명합니다.구체적인 예제와 실습을 통해 클린 코드의 원칙을 직관적으로 이해할 수 있습니다.리팩터링의 기술을 단계별로 터득하고, 코드 스멜을 식별하고 해결하는 방법을 알아봅니다. 개발자로서의 성장과 더 나은 코드 작성을 위한 실질적인 지침을 얻을 수 있습니다. 이 책은 실무에 바로 적용 가능한 클린 코드 비법을 소개하는 실습서입니다. 이론적인 설명과 실제 예제 코드를 통해 클린 코드 개념을 명확하게 이해해보세요. 이 개념을 여러분의 코드에 직접 적용해보면 클린 코드를 작성하는 스킬이 차근차근 향상될 것입니다. 코드의 품질을 높이고, 유지 보수를 용이하게 하며, 개발자로서의 경쟁력을 강화하고 싶다면 이 책을 통해 클린 코드의 세계로 첫발을 내딛을 차례입니다.

목차

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 %00; _15.0 소개 _15.1 %00; 객체 생성하기 _15.2 선택적 체이닝 제거하기 _15.3 선택적 속성을 컬렉션으로 변환하기 _15.4 실제 객체로 %00; 대체하기 _15.5 %00;을 사용하지 않고 알려지지 않은 위치 표현하기 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 객체 역직렬화 방지하기 용어 사전

본문인용

-

서평

-

저자소개

저자 : 막시밀리아노 콘티에리
25년 동안 소프트웨어 업계에 종사했으며 동시에 대학에서도 강의를 해왔습니다. 클린 코드, 리팩터링, 테스트 주도 개발 및 코드 스멜에 관해 꾸준히 글을 쓰고 있으며 인기 블로그 플랫폼에 매주 두어 편의 기사를 작성합니다. 선언적 및 행동적 코드의 팬이며 소프트웨어 기본 사항을 사용해 우아하고 강력한 솔루션을 구축하기를 즐깁니다.
번역 : 이태영
해외에서 유년 시절을 보내면서 컴퓨터 공학 학사, 석사 학위를 취득하고 이후에는 스타트업부터 대규모 기업 들을 다니면서 애드테크, 마케팅 등의 도메인에서 필요로 한 소프트웨어 개발 업무 경험을 쌓아왔습니다. 다양한 개발 경험을 기반으로 현재는 스타트업에서 소프트웨어 엔지니어로 일합니다.
상단으로 이동