파이브 라인스 오브 코드 (다섯 줄 제한 규칙으로 시작하는 체계적이고 효과적인 리팩터링 수련법)

파이브 라인스 오브 코드 (다섯 줄 제한 규칙으로 시작하는 체계적이고 효과적인 리팩터링 수련법)

$28.76
Description
구체적인 규칙에 초점을 맞춰 모든 메서드를 5줄 이하로 줄이는 리팩터링을 가르쳐 준다!
기존 코드를 개선하는 것(리팩터링)은 프로그래머가 맞닥뜨리는 가장 일반적인 작업 중 하나다. 《파이브 라인스 오브 코드》는 코드 스멜과 같은 감각적인 판단에 의존하지 않고, 적용할 수 있는 명확하고 실행 가능한 리팩터링 규칙을 알려준다. 구체적인 원칙을 따르다 보면 리팩터링과 코드 스멜을 익힐 수 있다는 저자의 전문적인 관점에 따라 언제 코드를 리팩터링해야 하는지, 어떤 문제에 어떤 패턴을 적용할지, 재작업이 필요한 코드에는 어떤 특성이 있는지 배우게 된다.
프로그래머가 다루는 모든 코드 베이스에는 찾아서 수정해야 하는 실수와 효율적인지 않은 부분이 있다. 올바른 방법으로 리팩터링하면 코드가 세련되고 읽기 쉽고 유지 관리가 쉬워진다. 이 책에서는 모든 메서드를 5줄 이하로 구현하는 리팩터링에 대한 독창적인 접근 방식을 배운다.
이 책은 모든 기술 수준의 개발자가 읽을 수 있으며, 예제는 자바 및 C#과 동일한 스타일로 읽기 쉬운 타입스크립트를 사용한다.

★ 이 책에서 다루는 내용 ★

◎ 나쁜 코드의 특성
◎ 코드를 이해하지 않고도 안전하게 코드를 개선하는 방법
◎ 최적화와 코드 일반성의 균형 맞추기
◎ 적절한 컴파일러의 활용
◎ 메서드 추출 및 전략 패턴의 도입과 그 밖의 다양한 리팩터링 패턴
◎ 코드 추가를 통해 변경을 가능하게 하는 안정적인 코드 작성
◎ 주석이 필요 없는 코드 작성
◎ 훌륭한 리팩터링을 위한 실제 사례
저자

크리스찬클라우젠

ChristianClausen
크리스찬클라우젠은컴퓨터과학석사학위를보유하고있다.그는프로그래밍언어,특히소프트웨어품질과버그없이코딩하는방법을전공했다.소프트웨어품질에관한두개의동료리뷰논문을공동집필했으며,이는권위있는저널과콘퍼런스에게재되었다.그는파리의한연구그룹에서코시넬(Coccinelle)이라는프로젝트의소프트웨어엔지니어로일했으며,두대학에서객체지향프로그래밍언어와함수형프로그래밍언어에대한입문및고급프로그래밍주제를가르쳤다.크리스찬은5년동안컨설턴트및기술책임자로일했다.

목차

▣1장:리팩터링리팩터링하기
1.1리팩터링이란무엇인가?
1.2스킬:무엇을리팩터링할것인가?
__1.2.1코드스멜의예
__1.2.2규칙의예
1.3문화:리팩터링은언제할까?
__1.3.1레거시시스템에서의리팩터링
__1.3.2언제리팩터링을하지말아야할까?
1.4도구:(안전한)리팩터링방법
1.5시작하는데필요한도구
__1.5.1프로그래밍언어:타입스크립트
__1.5.2편집기:비주얼스튜디오코드1
__1.5.3버전관리:Git
1.6핵심예제:2D퍼즐게임
__1.6.1연습만이살길이다:두번째코드베이스
1.7실제환경에서소프트웨어에대한주의사항
요약

▣2장:리팩터링깊게들여다보기
2.1가독성및유지보수성향상
__2.1.1코드개선
__2.1.2코드가하는일을바꾸지않고유지보수하기
2.2속도,유연성및안정성확보
__2.2.1상속보다는컴포지션사용
__2.2.2수정이아니라추가로코드를변경
2.3리팩터링과일상업무
__2.3.1학습방법으로서의리팩터링
2.4소프트웨어분야에서‘도메인’정의하기
요약

▣3장:긴코드조각내기
3.1첫번째규칙:왜다섯줄인가?
__3.1.1규칙:다섯줄제한
3.2함수분해를위한리팩터링패턴소개
__3.2.1리팩터링패턴:메서드추출
3.3추상화수준을맞추기위한함수분해
__3.3.1규칙:호출또는전달,한가지만할것
__3.3.2규칙적용
3.4좋은함수이름의속성
3.5너무많은일을하는함수분리하기
__3.5.1규칙:if문은함수의시작에만배치
__3.5.2규칙적용
요약

▣4장:타입코드처리하기
4.1간단한if문리팩터링
__4.1.1규칙:if문에서else를사용하지말것
__4.1.2규칙적용
__4.1.3리팩터링패턴:클래스로타입코드대체
__4.1.4클래스로코드이관하기
__4.1.5리팩터링패턴:클래스로의코드이관
__4.1.6불필요한메서드인라인화
__4.1.7리팩터링패턴:메서드의인라인화
4.2긴if문의리팩터링
__4.2.1일반성제거
__4.2.2리팩터링패턴:메서드전문화
__4.2.3switch가허용되는유일한경우
__4.2.4규칙:switch를사용하지말것
__4.2.5if제거하기
4.3코드중복처리
__4.3.1인터페이스대신추상클래스를사용할수는없을까?
__4.3.2규칙:인터페이스에서만상속받을것
__4.3.3클래스에있는코드의중복은다무엇일까?
4.4복잡한if체인구문리팩터링
4.5필요없는코드제거하기
__4.5.1리팩터링패턴:삭제후컴파일하기
요약

▣5장:유사한코드융합하기
5.1유사한클래스통합하기
__5.1.1리팩터링패턴:유사클래스통합
5.2단순한조건통합하기
__5.2.1리팩터링패턴:if문결합
5.3복잡한조건통합하기
__5.3.1조건을위한산술규칙사용
__5.3.2규칙:순수조건사용
__5.3.3조건산술적용
5.4클래스간의코드통합
__5.4.1클래스관계를묘사하기위한UML클래스다이어그램소개
__5.4.2리팩터링패턴:전략패턴의도입
__5.4.3규칙:구현체가하나뿐인인터페이스를만들지말것
__5.4.4리팩터링패턴:구현에서인터페이스추출
5.5유사함수통합하기
5.6유사한코드통합하기
요약

▣6장:데이터보호
6.1getter없이캡슐화하기
__6.1.1규칙:getter와setter를사용하지말것
__6.1.2규칙적용하기
__6.1.3리팩터링패턴:getter와setter제거하기
__6.1.4마지막getter삭제
6.2간단한데이터캡슐화하기
__6.2.1규칙:공통접사를사용하지말것
__6.2.2규칙적용하기
__6.2.3리팩터링패턴:데이터캡슐화
6.3복잡한데이터캡슐화
6.4순서에존재하는불변속성제거하기
__6.4.1리팩터링패턴:순서강제화
6.5열거형을제거하는또다른방법
__6.5.1비공개생성자를통한열거
__6.5.2숫자를클래스에다시매핑하기
요약

▣7장:컴파일러와의협업
7.1컴파일러에대해알아보기
__7.1.1약점:정지문제는컴파일시알수있는것을제한한다
__7.1.2장점:도달성검증은메서드의반환을보장한다
__7.1.3장점:확정할당은초기화되지않은변수에대한접근을막는다
__7.1.4장점:접근제어로데이터캡슐화를지원한다
__7.1.5장점:타입(형)검사기는속성을보증한다
__7.1.6약점:null을역참조하면애플리케이션이손상된다
__7.1.7약점:산술오류는오버플로나손상을일으킨다
__7.1.8약점:아웃-오브-바운드오류는애플리케이션을손상시킨다
__7.1.9무한루프는애플리케이션을지연시킨다
__7.1.10약점:교착상태및경쟁상태로인해의도하지않은동작이발생한다
7.2컴파일러사용
__7.2.1컴파일러활용
__7.2.2컴파일러와싸우지말것
7.3컴파일러신뢰하기
__7.3.1컴파일러에게불변속성가르치기
__7.3.2컴파일러의경고에주의를기울일것
7.4컴파일러만신뢰할것
요약

▣8장:주석자제하기
8.1오래된주석제거
8.2주석처리된코드제거
8.3불필요한주석제거
8.4메서드의이름으로주석대신하기
__8.4.1계획을위한주석사용
8.5불변속성을문서화한주석유지
__8.5.1프로세스의불변속성
요약

▣9장:코드삭제의미학
9.1다음시대는코드를지우는시대일것이다
9.2복잡성을제거하기위한코드삭제
__9.2.1경험부족으로인한기술적무지
__9.2.2시간압박으로인한기술적낭비
__9.2.3환경에따른기술적부채
__9.2.4성장에따른기술적장애물
9.3친밀도에따른코드분류
9.4레거시시스템에서의코드삭제
__9.4.1스트랭글러무화과나무패턴
__9.4.2코드개선을위한스트랭글러무화과나무패턴사용
9.5동결된프로젝트에서코드삭제
__9.5.1바람직한결과를기본값으로설정
__9.5.2스파이크와스태빌라이즈(안정화)로낭비줄이기
9.6버전관리에서브랜치삭제
__9.6.1브랜치제한으로낭비최소화
9.7코드문서삭제
__9.7.1지식을문서화하는방법을결정하는알고리즘
9.8테스트코드삭제
__9.8.1낙관적테스트삭제
__9.8.2비관적테스트삭제
__9.8.3불안정테스트수정또는삭제
__9.8.4복잡한테스트를제거하기위한코드리팩터링
__9.8.5속도를높이는테스트문화
9.9설정코드삭제
__9.9.1설정의예상수명으로범위지정
9.10라이브러리제거를위한코드삭제
__9.10.1외부라이브러리에대한의존도제한
9.11작동중인기능에서코드삭제
요약

▣10장:코드추가에대한두려움떨쳐내기
10.1불확실성받아들이기:위험감수
10.2두려움극복을위한스파이크사용
10.3낭비나위험에대한두려움극복을위한사용시간비율지정
10.4불완전성에대한두려움극복을위한점진적개선
10.5복사및붙여넣기가속도에미치는영향
10.6확장성을통한추가에의한변경
10.7추가에의한변경으로이전버전과의호환성확보
10.8기능토글(켜기/끄기)로추가에의한변경
10.9‘추상화를통한분기’로추가에의한변경
요약

▣11장:코드구조따르기
11.1범위와출처에따른구조분류
11.2행위를코드화하는세가지방법
__11.2.1제어흐름에행위코드화하기
__11.2.2데이터구조에행위코드화하기
__11.2.3데이터에행위코드화하기
11.3구조노출을위한코드추가
11.4예측대신관찰,그리고경험적기술사용
11.5코드를이해하지않고도안전성을확보하는방안
__11.5.1테스트를통한안전성확보
__11.5.2숙달을통한안전성확보
__11.5.3도구의지원을통한안전성확보
__11.5.4공식인증을통한안전성확보
__11.5.5내결함성을통한안전성확보
11.6활용되지않은구조이용
__11.6.1추출및캡슐화에공백활용
__11.6.2통합에중복코드활용
__11.6.3캡슐화로공통접사활용
__11.6.4동적실행으로런타임유형활용
요약

▣12장:최적화및일반화회피
12.1단순성추구
12.2일반화의시기와방법
__12.2.1구현의최소화로일반화지양하기
__12.2.2안정성이유사한것통합하기
__12.2.3불필요한일반화제거
12.3최적화시기와방법
__12.3.1최적화전리팩터링
__12.3.2제약이론에따른최적화
__12.3.3측정지표를사용한최적화
__12.3.4좋은알고리즘과데이터구조선택하기
__12.3.5캐시사용하기
__12.3.6최적화된코드분리하기
요약

▣13장:나쁜코드를식별가능하게만들기
13.1나쁜코드에대처하는자세
13.2깨끗한코드와레거시코드로분리
__13.2.1깨진유리창이론
13.3나쁜코드를찾는방법
__13.3.1이책의규칙:단순하고구체적인코드
__13.3.2코드스멜:완전하고추상적인코드
__13.3.3순환복잡도:알고리즘(객관적)
__13.3.4인지복잡도:알고리즘(주관적)
13.4코드를안전하게나쁜코드로보이기위한규칙
13.5나쁜코드를나쁘게보이기위한방법
__13.5.1열거형사용
__13.5.2정수형및문자열을타입코드로사용
__13.5.3코드에매직넘버넣기
__13.5.4코드에주석넣기
__13.5.5코드에공백넣기
__13.5.6이름을기준으로항목을그룹화하기
__13.5.7이름에컨텍스트추가하기
__13.5.8긴메서드만들기
__13.5.9메서드에많은매개변수넘기기
__13.5.10getter와setter사용하기
요약

▣14장:마무리
14.1이책의여정을돌아보며
__14.1.1소개:동기
__14.1.21부:구체화하기
__14.1.32부:지평넓히기
14.2기본철학탐구
__14.2.1항상더작은단계찾기
__14.2.2기본구조찾기
__14.2.3협업을위한규칙사용
__14.2.4