한빛출판네트워크

IT/모바일

리팩토링: 코드 품질을 개선하는 객체지향 사고법

한빛미디어

번역서

절판

리팩토링: 코드 품질을 개선하는 객체지향 사고법
좋아요: 61
  • 저자 : 마틴 파울러
  • 역자 : 김지원
  • 출간일 : 2012-11-09
  • 페이지 : 500쪽
  • ISBN : 9788979149715
  • 물류코드 :1971
  • 개정판정보 :개정판이 새로 출간되었습니다. [개정판 보기]

합계 : 27,000

  • 객체지향은 제대로 잘 해야 한다!

    당신은 객체지향 프로그래머인가?
    프로그램이 돌아가기면 하면 객체지향인가? 객체지향이라는 도구를 제대로 활용하지 못하고 마구잡이로 작성한 코드에는 악취가 진동한다.
    리팩토링은 코드의 동작이나 의도는 유지하면서 코드의 구조, 재사용성, 가독성을 개선해 코드의 악취를 제거하고 전체 디자인을 개선하는 방법이다.독자는 72가지 리팩토링 기법을 통해 코드를 점진적으로 개선하는 방법을 학습할 수 있으며, 이 책을 마쳤을 때는 객체지향 프로그래밍 능력이 한 단계 향상될 것이다.

    코딩 스타일이 바뀐다
    객체지향 언어의 문법을 익혔다고 저절로 객체지향 프로그래밍을 할 수 있는 게 아니다. 리팩토링 카탈로그를 통해 어떤 코드를 고쳐야 하는지, 왜 고쳐야 하는지, 고친 코드가 왜 좋은지 이해할 수 있다. 이런 과정을 통해 객체지향에 어울리는 코드 디자인을 배우게 되고, 자신의 코딩 스타일도 바뀌게 된다. 이 책을 읽기 전과 후는 코드의 품질에 결정적인 차이를 가져오게 된다.

    어떤 독자를 위한 책인가?
    • 좋은 코드를 작성하고, 코드의 품질을 개선하고 싶은 1-2년차 개발자
    • 자바로 객체지향 프로그래밍을 제대로 하고 싶은 개발자
  • [저자] 마틴 파울러

    ThoughtWorks 수석 과학자. 엔터프라이즈 소프트웨어 설계에 주력한다. 특히 좋은 설계와 설계 개선에 관심이 많다. 소프트웨어 개발 관련 다수의 책을 집필했고, 제어 역전(Inversion of Control)과 의존성 주입(Dependency Injection) 용어를 대중화시킨 장본인이다.

    [역자] 김지원

    여가 시간에는 플래시 아이템 제작, 컴퓨터 음악 작곡 등을 하며, 때로는 구성이 잘 된 웹디자이너들의 사이트를 탐색하면서 아이디어를 구상하기도 한다. 뜨거운 감자인 웹 표준에 관해서도 큰 관심을 갖고 있으며, 이와 관련해서 유용한 보충 자료를 수집해 블로그를 통해 제공할 예정이다. 최근 우리말 번역에 있어서 기술 용어의 일관성에 대해 고민하고 있다. 건국대학교 신소재공학과를 졸업한 후, 기술문서, 매뉴얼 등을 위주로 번역해왔으며 유비쿼터스 IT 관련 논문들의 번역 작업에 참여했다. 2004년부터 현재까지 정보기술, 건축, 화학, 디자인, 사운드 등의 분야에서 프리랜서 번역가로 활동 중이다.
  • CHAPTER 01 맛보기 예제

      원래의 프로그램 

      리팩토링 첫 단계 

      statement 메서드 분해와 기능 재분배 

      가격 책정 부분의 조건문을 재정의로 교체 

      고찰 

     

    CHAPTER 02 리팩토링 개론

      리팩토링은 무엇인가 

      리팩토링은 왜 해야 하나 

      리팩토링은 어떨 때 필요한가 

      팀장에게 어떻게 말을 꺼내나 

      리팩토링 관련 문제들 

      리팩토링과 설계 

      리팩토링과 성능 

      리팩토링의 유래 

     

    CHAPTER 03 코드의 구린내

      중복 코드 Duplicated Code 

      장황한 메서드 Long Method 

      방대한 클래스 Large Class 

      과다한 매개변수 Long Parameter List 

      수정의 산발 Divergent Change 

      기능의 산재 Shotgun Surgery 

      잘못된 소속 Feature Envy 

      데이터 뭉치 Data Clumps 

      강박적 기본 타입 사용 Primitive Obsession 

      switch 문 Switch Statements 

      평행 상속 계층 Parallel Inheritance Hierarchies 

      직무유기 클래스 Lazy Class 

      막연한 범용 코드 Speculative Generality 

      임시 필드 Temporary Field 

      메시지 체인 Message Chains 

      과잉 중개 메서드 Middle Man 

      지나친 관여 Inappropriate Intimacy 

      인터페이스가 다른 대용 클래스 Alternative Classes with Different Interfaces 

      미흡한 라이브러리 클래스 Incomplete Library Class 

      데이터 클래스 Data Class 

      방치된 상속물 Refused Bequest 

      불필요한 주석 Comments 

     

    CHAPTER 04 테스트 작성

      JUnit 테스트 프레임워크 

      테스트 추가 

     

    CHAPTER 05 리팩토링 기법 카탈로그에 대해

      참조 검색 

      리팩토링 기법의 성숙도 

     

    CHAPTER 06 메서드 정리

      메서드 추출 Extract Method 

      메서드 내용 직접 삽입 Inline Method 

      임시변수 내용 직접 삽입 Inline Temp 

      임시변수를 메서드 호출로 전환 Replace Temp with Query 

      직관적 임시변수 사용 Introduce Explaining Variable 

      임시변수 분리 Split Temporary Variable 

      매개변수로의 값 대입 제거 Remove Assignments to Parameters 

      메서드를 메서드 객체로 전환 Replace Method with Method Object 

      알고리즘 전환 Substitute Algorithm 

     

    CHAPTER 07 객체 간의 기능 이동

      메서드 이동 Move Method 

      필드 이동 Move Field 

      클래스 추출 Extract Class 

      클래스 내용 직접 삽입 Inline Class 

      대리 객체 은폐 Hide Delegate 

      과잉 중개 메서드 제거 Remove Middle Man 

      외래 클래스에 메서드 추가 Introduce Foreign Method 

      국소적 상속확장 클래스 사용 Introduce Local Extension 

     

    CHAPTER 08 데이터 체계화

      필드 자체 캡슐화 Self Encapsulate Field 

      데이터 값을 객체로 전환 Replace Data Value with Object 

      값을 참조로 전환 Change Value to Reference 

      참조를 값으로 전환 Change Reference to Value 

      배열을 객체로 전환 Replace Array with Object 

      관측 데이터 복제 Duplicate Observed Data 

      클래스의 단방향 연결을 양방향으로 전환 Change Unidirectional Association to Bidirectional 

      클래스의 양방향 연결을 단방향으로 전환 Change Bidirectional Association to Unidirectional 

      마법 숫자를 기호 상수로 전환 Replace Magic Number with Symbolic Constant 

      필드 캡슐화 Encapsulate Field 

      컬렉션 캡슐화 Encapsulate Collection 

      레코드를 데이터 클래스로 전환 Replace Record with Data Class 

      분류 부호를 클래스로 전환 Replace Type Code with Class 

      분류 부호를 하위클래스로 전환 Replace Type Code with Subclasses 

      분류 부호를 상태/전략 패턴으로 전환 Replace Type Code with State/Strategy 

      하위클래스를 필드로 전환 Replace Subclass with Fields 

     

    CHAPTER 09 조건문 간결화

      조건문 쪼개기 Decompose Conditional 

      중복 조건식 통합 Consolidate Conditional Expression 

      조건문의 공통 실행 코드 빼내기 Consolidate Duplicate Conditional Fragments 

      제어 플래그 제거 Remove Control Flag 

      여러 겹의 조건문을 감시 절로 전환 Replace Nested Conditional with Guard Clauses 

      조건문을 재정의로 전환 Replace Conditional with Polymorphism 

      Null 검사를 널 객체에 위임 Introduce Null Object 

      어설션 넣기 Introduce Assertion 

     

    CHAPTER 10 메서드 호출 단순화

      메서드명 변경 Rename Method 

      매개변수 추가 Add Parameter 

      매개변수 제거 Remove Parameter 

      상태 변경 메서드와 값 반환 메서드를 분리 Separate Query from Modifier 

      메서드를 매개변수로 전환 Parameterize Method 

      매개변수를 메서드로 전환 Replace Parameter with Explicit Methods 

      객체를 통째로 전달 Preserve Whole Object 

      매개변수 세트를 메서드로 전환 Replace Parameter with Method 

      매개변수 세트를 객체로 전환 Introduce Parameter Object 

      쓰기 메서드 제거 Remove Setting Method 

      메서드 은폐 Hide Method 

      생성자를 팩토리 메서드로 전환 Replace Constructor with Factory Method 

      하향 타입 변환을 캡슐화 Encapsulate Downcast 

      에러 부호를 예외 통지로 교체 Replace Error Code with Exception 

      예외 처리를 테스트로 교체 Replace Exception with Test 

     

    CHAPTER 11 일반화 처리

      필드 상향 Pull Up Field 

      메서드 상향 Pull Up Method 

      생성자 내용 상향 Pull Up Constructor Body 

      메서드 하향 Push Down Method 

      필드 하향 Push Down Field 

      하위클래스 추출 Extract Subclass 

      상위클래스 추출 Extract Superclass 

      인터페이스 추출 Extract Interface 

      계층 병합 Collapse Hierarchy 

      템플릿 메서드 형성 Form Template Method 

      상속을 위임으로 전환 Replace Inheritance with Delegation 

      위임을 상속으로 전환 Replace Delegation with Inheritance 

     

    CHAPTER 12 복합 리팩토링

      상속 구조 정리 Tease Apart Inheritance 

      절차 코드를 객체로 전환 Convert Procedural Design to Objects 

      도메인 로직을 표현과 분리 Separate Domain from Presentation 

      계층구조 추출 Extract Hierarchy 

     

    CHAPTER 13 리팩토링, 재사용, 현실성

      개발자가 리팩토링을 꺼리는 이유 

      현실성 다시 검토하기 

      리팩토링 자료와 참고문헌 

      소프트웨어 재사용과 기술 변경이 미치는 영향 

      끝 인사 

      참고문헌 

     

    CHAPTER 14 리팩토링 도구

      도구를 이용한 리팩토링 

      리팩토링 도구의 기술적 요건 

      리팩토링 도구의 실무적 요건 

      맺음말 

  •  

    • 예전 10년쯤 전에 리팩토링 책을 보았었다.

      그땐 리팩토링이나 디자인패턴에 많이 관심이 있던터라

      이렇게 저렇게 많이 프로그램을 바꿔보았던 기억이 난다.



      예전 리팩토링 책의 내용은

      리팩토링의 카테고리들에 대해서 쭈욱 소제목으로 해서

      설명이 있었다면



      이 책은

      그러한 카테고리 전

      리팩토링이 어떤것인지 간단한 예제로 한번 돌려보는 과정을 보여주는

      챕터가 하나 있고

      리택토링이 무엇인지 설명하는 부분이 있다.

      그리고 각각의 리택토링 에 대한 카테고리별 설명부가 있다.



      그러다보니

      내용이 조금 중복적인 부분이 좀 있어 아쉬웠다.



      소스의 구조 변경이 이전과 이후에 대한 구별할 수 있는 표시가 되어있다면

      좀더 보기에 편하지 않았을까 하는 아쉬움이 있었다.





      리팩토링에 관심이 있다면 읽어보면 좋은 책이다

    • 처음 코드를 작성하게되면 가장 큰 문제가 주석처리를 하지 않으면 코드를 작성한 사람조차 어떻게 구성되어 있는지 알기가 어렵다는 것이다. 이번에 소개할 책은 이러한 문제를 해결하는데 많은 도움을 줄 수 있는 책이다. 바로 "리팩토링"이다. 리팩토링은 개발자를 위한 책 답게 심플하고 간결하다. 읽기에도 어렵지 않게 단계별로 설명되어 있던 점 이 좋았다.



      이 책은 코드를 정리하는 법만을 알려주고 있지 않다. 어떻게 하면 한눈에 이해하기 쉽고 최대한 간결하게 코드를 작성하는 방법을 알려주고 있다. 기존의 프로그래밍 서적의 경우 앞에 원리에 관한 이야기를 주저리주저리 이야기하고 있다면 이 책은 필요한 만큼만 소개하고 있어서 이해하는것이 쉬웠다. 이 책을 보고 실습을 해보았는데, 단순히 따라만 하기 보다는 원리에 대한 설명과 방법론적인 이야기를 많이 하고 있어서 많은 도움이 되었다. 그리고 코드를 보는 시각이 많이 바뀌게 되었던것 같다. 복잡한 코드 사이에서 어떻게 하면 보다 간결하게 작성할 수 있을 지를 고민하게 되었고 다른 사람들이 작성한 코드를 살펴보는 기회도 가지게 되었다.



      

      아직 자신이 작성한 코드에 자신이 없거나 천줄이 넘는 코드를 작성하고 있는 개발자라면 이 책을 꼭 한번 읽어보기를 추천한다. 비 개발자의 경우 이 책을 읽기에는 많은 어려움을 겪을 것이다. ( 이 부분에 있어서 가장 아쉬움이 남는다. 비 개발자도 쉽게 보고 이해할 수 있고 코드를 작성할 수 있도록 안내하는 다음 책이 나오길 기대해본다.)

  • 내용이 없습니다.
    • 코딩의 기술 : C와 C++ 게임 코드로 알아보는

      오즈 모리하루

    • 좋은 코딩 나쁜 코딩 : 단순한 코드가 좋은 코드다 (2판)

      박진수

    • 읽기 좋은 코드가 좋은 코드다: 더 나은 코드를 작성하는 간단하고 실전적인 테크닉

      더스틴 보즈웰 , 트레버 파우커

    • 읽기 좋은 자바스크립트 코딩 기법: 유지보수가 쉬운 코드로 팀의 생산성을 높이자

      니콜라스 자카스

    • Effective Unit Testing : 클린 코드와 좋은 설계를 이끄는 단위 테스트

      라쎄 코스켈라

닫기

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