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

한빛출판네트워크

Java 언어로 배우는 리팩토링 입문

  • 저자 : 히로시 유키
  • 번역 : 박건태
  • 출간 : 2007-08-28
  • 페이지 : 468 쪽
  • ISBN : 9788979145113
  • 물류코드 :1511
TAG :
초급 초중급 중급 중고급 고급
0점 (0명)
좋아요 : 18
리팩토링 카탈로그를 하나씩 실습하여 프로그램 체질을 개선하는 노하우를 습득한다!

이 세상에 완벽한 프로그램은 없다. 시간이 지나면서 기능을 추가해야 하고 버그가 발생되면 디버깅도 해야 한다. 그러나, 프로그램의 소스코드가 지저분하다면? 수많은 클래스들이 얽히고 섥혀 기능 추가도 힘들 뿐떠러 디버깅할 엄무가 나지 않는다면? 그냥 당장의 편의만을 생각하며 기능을 추가하거나 수정을 해버릴까? 프로그래머들은 누구나 이런 상황에 직면하게 된다.
바로 이 때문에 프로그램의 체질을 개선해야 한다. 체질을 개선하는 것은 프로그램의 동작은 변경하지 않고 프로그램의 내부구조를 개선하는 일이며 바로 "리팩토링"이라고 부른다.
이 책에서는 수많은 리팩토링 기법 중에 프로그래머라면 반드시 알아야 할 것들을 선별하여 Java 언어로 된 샘플소스로 하나씩 실습해가며 친절하게 알려주는 리팩토링 활용 입문서이다. 리팩토링 전/후의 프로그램을 비교분석해주어 프로그램이 어떻게 달라졌는지를 일목요연하게 보여주어 "왜 그렇게 해야 하는지"를 누구나 쉽게 이해할 수 있다. 또한, 각 장 뒤에 연습문제를 두어, 응용력을 높일 수 있게 구성하였다.

독자대상 및 필요한 선수지식
  • 보다 좋은 프로그램을 쓰고 싶다고 생각하는 사람
  • 리팩토링에 흥미가 있는 사람
  • 자바 프로그래머
이 책을 읽기 위해서는 자바 언어에 관한 기본적인 지식이 필요하다. 구체적으로는 클래스와 인터페이스, 필드(변수)와 메소드에 관해 어느 정도 이해하고 있고, 주어진 자바 언어의 소스를 자신이 컴파일하고 실행할 수 있는 정도의 지식이다.
단, 중요한 포인트에서는 자바 언어에 관해 보충설명을 하고 있으므로 자바 언어를 매우 상세히 알고 있지 않은 독자도 리팩토링이 어떤 것인가에 관해 이해할 수 있다. 자바 언어를 처음부터 이해하고 싶은 분들은 이 책을 읽기 전에 자바 프로그램에 관한 책을 먼저 볼 것을 권장한다.

이 책의 특징
Java 언어로 작성된 샘플 프로그램
리팩토링의 목적은 소프트웨어의 체질 개선이므로 설명에는 구체적인 샘플 프로그램이 빠질 수 없다. 이 책에서는 자바 언어로 만들어서 널리 사용되고 있는 샘플 프로그램으로 리팩토링을 배운다. 각 샘플 프로그램은 가능한 쉬운 예제를 통해 리팩토링의 절차를 알기 쉽게 하는 것에 주안점을 두고 있다.

중요한 리팩토링을 자세히 설명
마틴 파울러(Martin Fowler)의 『Refactoring』에는 70여 개의 리팩토링이 설명되어 있다. 이 책에서는 모든 리팩토링을 균등하게 설명하는 것이 아니라 중요한 리팩토링을 중심으로 자세히 설명한다. 본문 중에 상세하게 설명하지 않은 리팩토링은 요점을 정리한 "부록 A. 리팩토링 목록"에서 소개한다.

연습문제로 기초지식 확인
리팩토링을 설명하는 과정에서는 세세한 것까지 설명하고 있기 때문에 중요한 포인트를 간과할 우려가 있다. 이 책 각 장의 끝에는 연습문제를 두어 그 장에서 배운 기초지식을 확인할 수 있게 하였다. 연습문제를 통해 중요한 포인트를 꼭! 확인하자.

연습문제를 통해 "Bad Smells in Code(코드의 악취)"를 없앤다.
리팩토링을 할 때는 프로그램에서 "Bad Smells in Code(코드의 악취)"를 없애는 것이 중요하다. "프로그램에서 이 곳을 개선하는 것이 좋지 않을까"라고 느끼지 못한다면 리팩토링을 아무리 공부하더라고 의미가 없다.
이 책의 연습문제에는 코드의 악취를 없애는 문제가 포함되어 있다. 프로그램을 작성하지 않아도 확인할 수 있게 구성되어 있으므로 공부할 시간이 부족한 독자라도 가볍게 도전해 볼 수 있다.
저자

히로시 유키

저자는 1990년 초반부터 C 언어 및 Perl 그리고 Java 관련 분야에서 십수 권의 책을 집필하였다. 국내에 소개된 책으로는 『Java 언어로 배우는 디자인 패턴 입문』(영진, 2002)과 『Java 언어로 배우는 디자인 패턴 입문: 멀티쓰레드편』(영진, 2003) 등이 있다.
역자

박건태

임베디드 프로그래머로 프로젝트 팀 FOL1기 회장이다. 초등학교시절 8비트 컴퓨터를 처음 접한 것을 시작으로 대학에서 소프트웨어공학과를 전공하였으며 각종 프로젝트에 참여하여 “블랙잭”,”SKY BLOG”,”Photo Puzzle”등을 개발하였다. 카메라를 이용한 모바일 게임관련 특허 출원 중에 있으며 2005년 소프트엑스포에 이 작품을 전시한 바 있다. 현재는 임베디드리눅스 기반 모바일 프로젝트에 참여 중이다.

00장 리팩토링이란  
리팩토링이란  
  _리팩토링의 정의
  _리팩토링 퀴즈
  _리팩토링과 유닛테스트(unit test)
  _리팩토링의 목적
  _리팩토링의 한계
리팩토링과 코드의 악취  
  _코드의 악취란
  _코드의 악취를 나타내는 표현
  _리팩토링 카탈로그
  _리팩토링 카탈로그란
  _조직적 수정
리팩토링의 에센스  
  _Step by Step: 한 번에 2개씩 수정하지 않는다
  _Step by Step: 후에 돌아오기 쉽게
  _Step by Step: 단계마다 확인
  _step by step: 오래된 것을 새로운 것으로 바꿔가자
리팩토링 Q&A  
  _리팩토링은 만병통치약인가
  _리팩토링을 배우는 것은 가치가 있는가
  _움직이는 코드에 손을 대는 것은 좋은 것인가
  _어디까지가 "외부"인가
  _초기 설계를 제대로 해두는 것이 유효하지 않을까
  _적절한 리팩토링을 발견하는 것은
  _모두 기억할 필요가 있는가
  _익스트림 프로그래밍과 관계가 있는가
  _디자인 패턴과 관계가 있는가
  _지금의 현장 업무에서 리팩토링은 어렵다?
연습문제  

1장. 매직넘버를 심볼릭 정수로 치환하기: 소스에 "100"이라고 쓰여져 있다면  
리팩토링  
  _매직넘버는 심볼릭 정수로 치환하기
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
  _리팩토링후
생각 넓히기  
  _타입코드를 클래스로 치환하기
  _enum
  _심볼릭 정수로 하지 말아야 하는 경우
  _바이트코드에 쓰여있는 정수에 주의
연습문제  

2장.  제어 플래그의 삭제: 제어 플래그 때문에 코드를 읽기 힘들다면  
리팩토링  
  _제어 플래그의 삭제
샘플 프로그램(FindInt)  
  _리팩토링전
  _리팩토링실행(break를 사용하는 경우)
  _리팩토링 실행(return을 사용하는 경우)
샘플 프로그램(SimpleDatabase)  
  _리팩토링전
  _리팩토링 실행
생각 넓히기  
  _break나 return으로 인해 가독성이 높아지는 이유
  _인스턴스 필드로 된 제어 플래그의 위험성
  _플래그의 이름
  _boolean 이외의 플래그
  _정규표현 패키지를 사용해 보면
연습문제  

3장.assertion의 도입: "이것이 성립될 것"이라고 하는 주석이 있으면  
리팩토링  
  _assertion의 도입
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
  _리팩토링후
  _컴파일과 실행
  _assertion의 동작 확인하기
생각 넓히기  
  _Java의 assertion 기법
  _Java의 assertion은 클래스 라이브러리가 아니다
  _assertion의 완전 삭제
  _그외의 언어 환경에서의 assertion
연습문제  

4장. NULL 오브젝트 도입: Null 체크가 너무 많다면  
리팩토링  
  _Null 오브젝트의 도입
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
리팩토링후  
생각 넓히기  
  _Factory Method 패턴
  _Singleton 패턴
  _Null 오브젝트로 네스트한 클래스를 사용
  _Null 체크는 모두 나쁘다?
  _패턴광이 되지 않게
  _정수로서의 Null 오브젝트
  _isNull 메소드는 필요한 것인가
  _원래 클래스를 수정할 수 없을 때는 어떻게 할까
연습문제  

5장. 메소드의 추출: 코드가 너무 길어 읽기 힘들다면   
리팩토링  
  _메소드의 추출
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
  _리팩토링후
생각 넓히기  
  _역 리팩토링
  _메소드의 추출은 당연하다?
  _메소드는 길어져 가는 것
연습문제  

6장. 클래스의 추출: 클래스의 책임이 너무 많다면  
리팩토링  
  _클래스의 추출
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
  _리팩토링후
생각 넓히기  
  _쌍방향 링크는 피한다
  _기능추가와 리팩토링
  _Immutable Interface
  _역 리팩토링 클래스의 인라인화
연습문제  

7장. 타입코드를 클래스로 치환하기: 오브젝트 식별에 int가 사용되고 있다면  
리팩토링  
  _타입코드를 클래스로 치환하기
샘플 프로그램  
  _리팩토링전
  _기본형을 사용하는 타입코드의 문제점
  _리팩토링 실행
  _리팩토링후
생각 넓히기  
  _기본형을 사용한 타입코드의 문제점
  _enum
연습문제  

8장. 타입코드를 서브클래스로 치환하기: 타입코드마다 동작이 다르다면(1)  
리팩토링  
  _타입코드를 서브클래스로 치환
  _구조와 동작
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
  _리팩토링 후
생각 넓히기  
  _switch문과 instanceof 연산자는 코드의 악취가 난다
  _오브젝트만 생성하는 switch문은 삭제
  _Factory Method를 여러 개 준비한다
  _어디까지 리팩토링해야 하는가
연습문제  

9장. 타입코드를 State/Strategy로 치환하기: 타입코드마다 동작이 다르다면(2)  
리팩토링  
  _타입코드를 State/Strategy로 치환하기
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
  _리팩토링후
코드의 추가 수정  
  _enum 사용하기
  _상태의존 코드를 상태 오브젝트로 이동하기
  _정리하기
생각 넓히기  
  _타입코드를 치환한 3개의 방법 비교
  _"State 패턴"과 "Strategy 패턴"의 차이점
  _다형적인 해결과 default의 소실
연습문제  

10장. 오류 코드를 예외로 치환하기: 오류 처리가 어지럽게 흩어져 있다면  
리팩토링  
  _오류 코드를 예외로 치환하기
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
  _리팩토링후
코드의 추가 수정  
  _타입코드를 State/Strategy로 치환하기
생각 넓히기   
  _체크되는 예외와 체크되지 않는 예외
  _예외의 계층
  _java.io.EOFException을 둘러싼
  _체크되지 않는 예외와 사전 체크용 메소드
  _오류 아토믹성
연습문제  

11장. 생성자를 Factory Method로 치환하기: 클래스명이 new로 하드코딩 되어 있다면  
리팩토링  
  _생성자를 Factory Method로 치환하기
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
  _리팩토링후
  _타입코드를 서브클래스로 치환하는 리팩토링의 실행
  _리팩토링후
생각 넓히기  
  _프로바이더(provider)
  _인수의 문제
  _Factory Method와 Creation Method
연습문제  

12장. 관찰되는 데이터의 복제: 모델과 뷰가 혼재되어 있다면   
리팩토링  
  _관찰되는 데이터의 복제
샘플 프로그램  
  _리팩토링전
  _리팩토링 실행
  _리팩토링후
생각 넓히기  
  _이벤트에 포함된 정보
  _무엇을 이벤트 리스너로 할까
  _무한 루프에 주의
  _별도의 이벤트 리스너 추가
연습문제  

13장. 상속을 위임으로 치환하기: IS-A 관계가 아님에도 불구하고 상속하고 있다면  
상속과 위임  
  _상속
  _위임
  _상속과 위임의 비교
리팩토링  
  _상속을 위임으로 치환하기
샘플 프로그램  
  _리팩토링전
  _의문
  _리팩토링 실행
  _리팩토링후
  _Chain Constructors
생각 넓히기  
  _상속은 최후의 무기
  _리스코프의 치환원칙
  _IS-A 관계와 HAS-A 관계
연습문제  

14장. 위임의 은폐: 위임 클래스까지 보인다면  
리팩토링  
  _위임의 은폐
 샘플 프로그램  
  _리팩토링전
  _첫 번째 리팩토링의 실행
  _첫 번째 리팩토링후
  _두 번째 리팩토링 실행
  _두 번째 리팩토링후
생각 넓히기  
  _숨기는 것의 중요성
  _다양한 은폐
중개자의 삭제  
  _클래스의 인라인화
연습문제  

15장. 상속의 분할: 상속이 얽혀 있다면  

리팩토링  
  _상속의 분할
샘플 프로그램  
  _리팩토링전
  _의문점
  _리팩토링 실행
  _리팩토링후
생각 넓히기  
  _직교성
  _상속과 @Override
연습문제  

부록 A 리팩토링 목록   
부록 B JUnit   
부록 C 참고문서와 웹사이트  
연습문제 해답  
찾아보기

  • 첫번째 리뷰어가 되어주세요.
부록/예제소스
자료명 등록일 다운로드
DOWNLOAD 예제소스 2016-04-06 다운로드
결재하기
• 문화비 소득공제 가능
• 배송료 : 0원배송료란?

배송료 안내

  • 책, 아이템 등 상품을 3만원 이상 구매시 무료배송
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

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

닫기

리뷰쓰기

닫기
* 도서명 :
Java 언어로 배우는 리팩토링 입문
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

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

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

오탈자 등록

닫기
* 도서명 :
Java 언어로 배우는 리팩토링 입문
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
Java 언어로 배우는 리팩토링 입문
구입처*
구입일*
부가기호*
부가기호 안내

* 회원가입후 도서인증을 하시면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한됩니다.

* 절판도서, eBook 등 일부 도서는 도서인증이 제한됩니다.

닫기

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

자료실