이 상품은 구매 후 지원 기기에서 예스24 eBook앱 설치 후 바로 이용 가능한 상품입니다.
1장 깨끗한 코드코드가 존재하리라나쁜 코드나쁜 코드로 치르는 대가__ 원대한 재설계의 꿈__ 태도__ 원초적 난제__ 깨끗한 코드라는 예술?__ 깨끗한 코드란?우리들 생각우리는 저자다보이스카우트 규칙프리퀄과 원칙결론참고 문헌2장 의미 있는 이름들어가면서의도를 분명히 밝혀라그릇된 정보를 피하라의미 있게 구분하라발음하기 쉬운 이름을 사용하라검색하기 쉬운 이름을 사용하라인코딩을 피하라__ 헝가리식 표기법__ 멤버 변수 접두어__ 인터페이스 클래스와 구현 클래스자신의 기억력을 자랑하지 마라클래스 이름메서드 이름기발한 이름은 피하라한 개념에 한 단어를 사용하라말장난을 하지 마라해법 영역에서 가져온 이름을 사용하라문제 영역에서 가져온 이름을 사용하라의미 있는 맥락을 추가하라불필요한 맥락을 없애라마치면서3장 함수작게 만들어라!__ 블록과 들여쓰기한 가지만 해라!__ 함수 내 섹션함수 당 추상화 수준은 하나로!__ 위에서 아래로 코드 읽기: 내려가기 규칙Switch 문서술적인 이름을 사용하라!함수 인수__ 많이 쓰는 단항 형식__ 플래그 인수__ 이항 함수__ 삼항 함수__ 인수 객체__ 인수 목록__ 동사와 키워드부수 효과를 일으키지 마라!__ 출력 인수명령과 조회를 분리하라!오류 코드보다 예외를 사용하라!__ Try/Catch 블록 뽑아내기__ 오류 처리도 한 가지 작업이다.__ Error.java 의존성 자석반복하지 마라!구조적 프로그래밍함수를 어떻게 짜죠?결론참고 문헌4장 주석주석은 나쁜 코드를 보완하지 못한다코드로 의도를 표현하라!좋은 주석__ 법적인 주석__ 정보를 제공하는 주석__ 의도를 설명하는 주석__ 의미를 명료하게 밝히는 주석__ 결과를 경고하는 주석__ TODO 주석__ 중요성을 강조하는 주석__ 공개 API에서 Javadocs나쁜 주석__ 주절거리는 주석__ 같은 이야기를 중복하는 주석__ 오해할 여지가 있는 주석__ 의무적으로 다는 주석__ 이력을 기록하는 주석__ 있으나 마나 한 주석__ 무서운 잡음__ 함수나 변수로 표현할 수 있다면 주석을 달지 마라__ 위치를 표시하는 주석__ 닫는 괄호에 다는 주석__ 공로를 돌리거나 저자를 표시하는 주석__ 주석으로 처리한 코드__ HTML 주석__ 전역 정보__ 너무 많은 정보__ 모호한 관계__ 함수 헤더__ 비공개 코드에서 Javadocs__ 예제참고 문헌5장 형식 맞추기형식을 맞추는 목적적절한 행 길이를 유지하라__ 신문 기사처럼 작성하라__ 개념은 빈 행으로 분리하라__ 세로 밀집도__ 수직 거리__ 세로 순서가로 형식 맞추기__ 가로 공백과 밀집도__ 가로 정렬__ 들여쓰기가짜 범위팀 규칙밥 아저씨의 형식 규칙6장 객체와 자료 구조자료 추상화자료/객체 비대칭디미터 법칙__ 기차 충돌__ 잡종 구조__ 구조체 감추기자료 전달 객체__ 활성 레코드결론참고 문헌7장 오류 처리오류 코드보다 예외를 사용하라Try-Catch-Finally 문부터 작성하라미확인unchecked 예외를 사용하라예외에 의미를 제공하라호출자를 고려해 예외 클래스를 정의하라정상 흐름을 정의하라null을 반환하지 마라null을 전달하지 마라결론참고문헌8장 경계외부 코드 사용하기경계 살피고 익히기log4j 익히기학습 테스트는 공짜 이상이다아직 존재하지 않는 코드를 사용하기깨끗한 경계참고 문헌9장 단위 테스트TDD 법칙 세 가지깨끗한 테스트 코드 유지하기__ 테스트는 유연성, 유지보수성, 재사용성을 제공한다깨끗한 테스트 코드__ 도메인에 특화된 테스트 언어__ 이중 표준테스트 당 assert 하나__ 테스트 당 개념 하나F.I.R.S.T.결론참고 문헌10장 클래스클래스 체계__ 캡슐화클래스는 작아야 한다!__ 단일 책임 원칙__ 응집도Cohesion__ 응집도를 유지하면 작은 클래스 여럿이 나온다변경하기 쉬운 클래스__ 변경으로부터 격리참고 문헌11장 시스템도시를 세운다면?시스템 제작과 시스템 사용을 분리하라__ Main 분리__ 팩토리__ 의존성 주입확장__ 횡단(cross-cutting) 관심사자바 프록시순수 자바 AOP 프레임워크AspectJ 관점테스트 주도 시스템 아키텍처 구축의사 결정을 최적화하라명백한 가치가 있을 때 표준을 현명하게 사용하라시스템은 도메인 특화 언어가 필요하다결론참고 문헌12장 창발성(創發性)창발적 설계로 깔끔한 코드를 구현하자단순한 설계 규칙 1: 모든 테스트를 실행하라단순한 설계 규칙 2~4: 리팩터링중복을 없애라표현하라클래스와 메서드 수를 최소로 줄여라결론참고 문헌13장 동시성동시성이 필요한 이유?__ 미신과 오해난관동시성 방어 원칙__ 단일 책임 원칙Single Responsibility Principle, SRP__ 따름 정리corollary: 자료 범위를 제한하라__ 따름 정리: 자료 사본을 사용하라__ 따름 정리: 스레드는 가능한 독립적으로 구현하라라이브러리를 이해하라__ 스레드 환경에 안전한 컬렉션실행 모델을 이해하라__ 생산자-소비자Producer-Consumer__ 읽기-쓰기Readers-Writers__ 식사하는 철학자들Dining Philosophers동기화하는 메서드 사이에 존재하는 의존성을 이해하라동기화하는 부분을 작게 만들어라올바른 종료 코드는 구현하기 어렵다스레드 코드 테스트하기__ 말이 안 되는 실패는 잠정적인 스레드 문제로 취급하라__ 다중 스레드를 고려하지 않은 순차 코드부터 제대로 돌게 만들자__ 다중 스레드를 쓰는 코드 부분을 다양한 환경에 쉽게 끼워 넣을 수 있게 스레드 코드를 구현하라__ 다중 스레드를 쓰는 코드 부분을 상황에 맞게 조율할 수 있게 작성하라__ 프로세서 수보다 많은 스레드를 돌려보라__ 다른 플랫폼에서 돌려보라__ 코드에 보조 코드instrument를 넣어 돌려라. 강제로 실패를 일으키게 해보라__ 직접 구현하기__ 자동화결론참고 문헌14장 점진적인 개선Args 구현__ 어떻게 짰느냐고?Args: 1차 초안__ 그래서 멈췄다__ 점진적으로 개선하다String 인수결론15장 JUnit 들여다보기JUnit 프레임워크결론16장 SerialDate 리팩터링첫째, 돌려보자둘째, 고쳐보자결론참고 문헌17장 냄새와 휴리스틱주석__ C1: 부적절한 정보__ C2: 쓸모 없는 주석__ C3: 중복된 주석__ C4: 성의 없는 주석__ C5: 주석 처리된 코드환경__ E1: 여러 단계로 빌드해야 한다__ E2: 여러 단계로 테스트해야 한다함수__ F1: 너무 많은 인수__ F2: 출력 인수__ F3: 플래그 인수__ F4: 죽은 함수일반__ G1: 한 소스 파일에 여러 언어를 사용한다__ G2: 당연한 동작을 구현하지 않는다__ G3: 경계를 올바로 처리하지 않는다__ G4: 안전 절차 무시__ G5: 중복__ G6: 추상화 수준이 올바르지 못하다__ G7: 기초 클래스가 파생 클래스에 의존한다__ G8: 과도한 정보__ G9: 죽은 코드__ G10: 수직 분리__ G11: 일관성 부족__ G12: 잡동사니__ G13: 인위적 결합__ G14: 기능 욕심__ G15: 선택자 인수__ G16: 모호한 의도__ G17: 잘못 지운 책임__ G18: 부적절한 static 함수__ G19: 서술적 변수__ G20: 이름과 기능이 일치하는 함수__ G21: 알고리즘을 이해하라__ G22: 논리적 의존성은 물리적으로 드러내라__ G23: If/Else 혹은 Switch/Case 문보다 다형성을 사용하라__ G24: 표준 표기법을 따르라__ G25: 매직 숫자는 명명된 상수로 교체하라__ G26: 정확하라__ G27: 관례보다 구조를 사용하라__ G28: 조건을 캡슐화하라__ G29: 부정 조건은 피하라__ G30: 함수는 한 가지만 해야 한다__ G31: 숨겨진 시간적인 결합__ G32: 일관성을 유지하라__ G33: 경계 조건을 캡슐화하라__ G34: 함수는 추상화 수준을 한 단계만 내려가야 한다__ G35: 설정 정보는 최상위 단계에 둬라__ G36: 추이적 탐색을 피하라자바__ J1: 긴 import 목록을 피하고 와일드카드를 사용하라__ J2: 상수는 상속하지 않는다__ J3: 상수 대 Enum이름__ N1: 서술적인 이름을 사용하라__ N2: 적절한 추상화 수준에서 이름을 선택하라__ N3: 가능하다면 표준 명명법을 사용하__ N4: 명확한 이름__ N5: 긴 범위는 긴 이름을 사용하라__ N6: 인코딩을 피하라__ N7: 이름으로 부수 효과를 설명하라테스트__ T1: 불충분한 테스트__ T2: 커버리지 도구를 사용하라!__ T3: 사소한 테스트를 건너뛰지 마라__ T4: 무시한 테스트는 모호함을 뜻한다__ T5: 경계 조건을 테스트하라__ T6: 버그 주변은 철저히 테스트하라__ T7: 실패 패턴을 살펴라__ T8: 테스트 커버리지 패턴을 살펴라__ T9: 테스트는 빨라야 한다결론참고 문헌부록A 동시성 II클라이언트/서버 예제__ 서버__ 스레드 추가하기__ 서버 살펴보기__ 결론가능한 실행 경로__ 경로 수__ 가능한 순열 수 계산하기__ 심층 분석__ 결론라이브러리를 이해하라__ Executor 프레임워크__ 스레드를 차단하지 않는non blocking 방법__ 다중 스레드 환경에서 안전하지 않은 클래스메서드 사이에 존재하는 의존성을 조심하라__ 실패를 용인한다__ 클라이언트-기반 잠금__ 서버-기반 잠금작업 처리량 높이기__ 작업 처리량 계산 - 단일스레드 환경__ 작업 처리량 계산 - 다중 스레드 환경데드락__ 상호 배제Mutual Exclusion__ 잠금 & 대기Lock & Wait__ 선점 불가No Preemption__ 순환 대기Circular Wait__ 상호 배제 조건 깨기__ 잠금 & 대기 조건 깨기__ 선점 불가 조건 깨기__ 순환 대기 조건 깨기__ 다중 스레드 코드 테스트__ 스레드 코드 테스트를 도와주는 도구결론자습서: 전체 코드 예제__ 클라이언트/서버 - 단일스레드 버전__ 클라이언트/서버 - 다중 스레드 버전부록B org.jfree.date.SerialDate부록C 휴리스틱의 교차 참조 목록에필로그용어 대역표약어 목록찾아보기
|
Robert C. Martin
로버트 C. 마틴의 다른 상품
박재호 의 다른 상품
이해영의 다른 상품
나쁜 코드도 돌아는 간다. 하지만 코드가 깨끗하지 못하면 개발 조직은 기어간다. 매년 지저분한 코드로 수많은 시간과 상당한 자원이 낭비된다. 그래야 할 이유가 없다. 로버트 마틴은 이 책에서 혁명적인 패러다임을 제시한다. 그는 오브젝트 멘토(Object Mentor)의 동료들과 힘을 모아 ‘개발하며’ 클린 코드를 만드는 최상의 애자일 기법을 정제해 책 한 권에 담았고, 이 책은 소프트웨어 장인 정신의 가치를 심어 주며 프로그래밍 실력을 높여줄 것이다. 여러분이 노력만 한다면.어떤 노력이 필요하냐고? 코드를 읽어야 한다. 아주 많은 코드를. 그리고 코드를 읽으면서 그 코드의 무엇이 옳은지, 그른지 생각도 해야 한다. 좀 더 중요하게는 전문가로서 자신이 지니는 가치와 장인으로서 자기 작품에 대한 헌신을 돌아보게 된다. 이 책은 세 부분으로 나뉜다. 처음 몇 장은 클린 코드를 작성하는 원칙, 패턴, 실천을 설명한다. 둘째 부분은 사례 연구를 몇 가지 소개하는데, 점점 더 복잡해진다. 각 사례 연구는 코드를 깨끗하게 고치는, 즉 문제가 있는 코드를 좀 더 튼튼하고 효율적인 코드로 바꾸는 연습이다. 셋째 부분은 결말이다 사례 연구를 만들면서 수집한 휴리스틱과 ‘냄새’를 마지막 장에서 열거한다. 그 결과로 코드를 읽고, 짜고 정리하는 과정에서 우리가 생각하는 방식을 묘사한 지식 기반을 얻는다. 이 책을 읽은 독자는 다음 내용을 알게 된다. * 좋은 코드와 나쁜 코드를 구분하는 방법* 좋은 코드를 작성하는 방법과 나쁜 코드를 좋은 코드로 바꾸는 방법* 좋은 이름, 좋은 함수, 좋은 객체, 좋은 클래스를 작성하는 방법* 가독성이 높아지도록 코드 형식을 맞추는 방법* 코드 논리를 흩뜨리지 않고서 오류 처리를 완벽하게 구현하는 방법* 단위 테스트와 테스트 주도 개발을 적용하는 방법이 책은 더 나은 코드를 만들려고 애쓰는 프로그래머, 소프트웨어 공학도, 프로젝트 관리자, 팀 리더, 시스템 분석가가 반드시 읽어야 할 책이다.
|