SlideShare una empresa de Scribd logo
1 de 25
Refactoring 아꿈사café.naver.com/architect1 김광중 visualwizard@gmail.com
7장. 객체간의 기능 이동 8장. 데이터 구성 Self Encapsulate Field Introduce Foreign Method Introduce Local Extension
7장. 객체간의 기능 이동 Foreign Method Server class Client class Server Class쪽에서 xx한 메소드가 필요해.!!
7장. 객체간의 기능 이동 Foreign Method Server class Client class Server Class의 코드를 수정할 수가 없어! “안돼. 안되잖아.” – 하프라이프 더빙
7장. 객체간의 기능 이동 Foreign Method Server Class 측의 소스를 변경할 수 없으니, Client Class 측에서 필요로 하는 곳에 기능을 추가 기능이 필요한 곳이 여러군데이다.!? 기능에 대한 코드를 Method로 만들어 놓고, 필요한 곳에서 Method를 호출하도록 하자.!
7장. 객체간의 기능 이동 Foreign Method Server Class 측의 소스를 변경할 수 없으니, Client Class 측에서 필요로 하는 곳에 기능을 추가 기능이 필요한 곳이 여러군데이다.!? 기능에 대한 코드를 Method로 만들어 놓고, 필요한 곳에서 Method를 호출하도록 하자.!
7장. 객체간의 기능 이동 Foreign Method 이 함수는 다른 클래스에 존재했어야 하는 함수이다.!!
7장. 객체간의 기능 이동 Foreign Method Server class Client class 필요한 건 이렇게 되는 것인데.!
7장. 객체간의 기능 이동 Foreign Method 구현 절차. Server class Client class 1. Client Class에 필요한 기능의 메소드를 만든다. Client Class의 어떤 부분에도 접근해서는 안된다.  => Server Class에서 Client Class에 접근할 수는 없으니.
7장. 객체간의 기능 이동 Foreign Method 구현 절차. Server class Client class 2. 첫번째파라미터로Server Class의 인스턴스를 받는다. , ,
7장. 객체간의 기능 이동 Foreign Method 구현 절차. Server class Client class 3. 주석을 달아놓자.! , , // foreign method
7장. 객체간의 기능 이동 Local Extension Server class Client class
7장. 객체간의 기능 이동 Local Extension Server class Client class Server Class의 코드 수정 불가.!
7장. 객체간의 기능 이동 Local Extension Client class Server class , , // foreign method , , Foreign Method 가 많아지게 된 상황.! // foreign method , , // foreign method
7장. 객체간의 기능 이동 Local Extension Foreign Method 가 많아지게 된 상황.! Foreign Method 를 적당한 곳으로 모아놓자.! Foreign Method를 모아놓은 클래스를 만들자.! ,[object Object]
Wapper Class,[object Object]
7장. 객체간의 기능 이동 Local Extension Sub Class or Wapper 원래의 Server Class를 사용하는 것이 아닌, Local Extension 을 만들어서 사용할 수 있는 것.
7장. 객체간의 기능 이동 Local Extension Sub Class  Wrapper Class Server class Server class Foreign Method들을 한 곳으로 모아놓지 않으면, 다른 클래스들이 복잡해 지고Method들의 재사용이 힘들어 진다.
7장. 객체간의 기능 이동 Local Extension Sub Class  Wrapper Class Server class Server class 무엇을 사용할 것인지는 여러분의 선택.!
7장. 객체간의 기능 이동 Local Extension 제작 절차 … 변환 생성자를Extension클래스에 추가한다. … … … => 생성자는 원래 클래스를 인자로 받는다.
8장. 데이터 구성
8장. 데이터 구성 Self Encapsulate Field 필드에 직접 접근할 것인지 or  접근자를 사용하여 간접적으로 접근할 것인지.
8장. 데이터 구성 Self Encapsulate Field 필드에 직접 접근할 것인지 or  접근자를 사용하여 간접적으로 접근할 것인지.
8장. 데이터 구성 Self Encapsulate Field 생성자에서 필드에 대해 간접 접근자를 사용할 때 주의해야 한다. 생성자에서 사용할 필드 초기화 메소드를 만든다. or 생성자에서는 필드에 직접 접근한다.
The fin.

Más contenido relacionado

Destacado

TEST DE LA TARJETA MADRE
TEST DE LA TARJETA MADRE TEST DE LA TARJETA MADRE
TEST DE LA TARJETA MADRE Kelin Arango
 
Nouns, Articles, Quantifiers
Nouns, Articles, QuantifiersNouns, Articles, Quantifiers
Nouns, Articles, QuantifiersDustin French
 
study refactoring
study refactoringstudy refactoring
study refactoring재원 최
 
Bnf seeg ws
Bnf seeg wsBnf seeg ws
Bnf seeg wsbbongcsu
 
실패한 프로젝트들의 개발문화_개발방법론
실패한 프로젝트들의 개발문화_개발방법론실패한 프로젝트들의 개발문화_개발방법론
실패한 프로젝트들의 개발문화_개발방법론Suwon Chae
 
Cleancode ch16 serialdate_refactoring
Cleancode ch16 serialdate_refactoringCleancode ch16 serialdate_refactoring
Cleancode ch16 serialdate_refactoringKyungryul KIM
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화HyeonSeok Choi
 
The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraftbbongcsu
 

Destacado (13)

PAA Presentation 17-4-2010
PAA Presentation 17-4-2010PAA Presentation 17-4-2010
PAA Presentation 17-4-2010
 
TEST DE LA TARJETA MADRE
TEST DE LA TARJETA MADRE TEST DE LA TARJETA MADRE
TEST DE LA TARJETA MADRE
 
Nouns, Articles, Quantifiers
Nouns, Articles, QuantifiersNouns, Articles, Quantifiers
Nouns, Articles, Quantifiers
 
Refactoring
RefactoringRefactoring
Refactoring
 
Refactoring#9
Refactoring#9Refactoring#9
Refactoring#9
 
study refactoring
study refactoringstudy refactoring
study refactoring
 
Bnf seeg ws
Bnf seeg wsBnf seeg ws
Bnf seeg ws
 
실패한 프로젝트들의 개발문화_개발방법론
실패한 프로젝트들의 개발문화_개발방법론실패한 프로젝트들의 개발문화_개발방법론
실패한 프로젝트들의 개발문화_개발방법론
 
Cleancode ch16 serialdate_refactoring
Cleancode ch16 serialdate_refactoringCleancode ch16 serialdate_refactoring
Cleancode ch16 serialdate_refactoring
 
Refactoring Seminar
Refactoring SeminarRefactoring Seminar
Refactoring Seminar
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화
 
The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraft
 
Bnf seeg
Bnf seegBnf seeg
Bnf seeg
 

Similar a Refactoring -chapter 7,8-

파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례선협 이
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern대영 노
 
스마일게이트 서버개발캠프 - QuadCore - BTS Deck
스마일게이트 서버개발캠프 - QuadCore - BTS Deck스마일게이트 서버개발캠프 - QuadCore - BTS Deck
스마일게이트 서버개발캠프 - QuadCore - BTS DeckServerDevCamp
 
Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial우림 류
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리Injae Lee
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object민태 김
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지Yoonwhan Lee
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장 Shin heemin
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
Effective java
Effective javaEffective java
Effective javaHaeil Yi
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
 
Architecture patterns with python (2)
Architecture patterns with python (2)Architecture patterns with python (2)
Architecture patterns with python (2)동환 김
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with AngularJT Jintae Jung
 
Java script 기본과 jquery의 활용
Java script 기본과 jquery의 활용Java script 기본과 jquery의 활용
Java script 기본과 jquery의 활용정기 김
 

Similar a Refactoring -chapter 7,8- (20)

파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
스마일게이트 서버개발캠프 - QuadCore - BTS Deck
스마일게이트 서버개발캠프 - QuadCore - BTS Deck스마일게이트 서버개발캠프 - QuadCore - BTS Deck
스마일게이트 서버개발캠프 - QuadCore - BTS Deck
 
Anatomy of Realm
Anatomy of RealmAnatomy of Realm
Anatomy of Realm
 
Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
Effective java
Effective javaEffective java
Effective java
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
Architecture patterns with python (2)
Architecture patterns with python (2)Architecture patterns with python (2)
Architecture patterns with python (2)
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with Angular
 
Java script 기본과 jquery의 활용
Java script 기본과 jquery의 활용Java script 기본과 jquery의 활용
Java script 기본과 jquery의 활용
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
 
Java class
Java classJava class
Java class
 

Refactoring -chapter 7,8-

  • 2. 7장. 객체간의 기능 이동 8장. 데이터 구성 Self Encapsulate Field Introduce Foreign Method Introduce Local Extension
  • 3. 7장. 객체간의 기능 이동 Foreign Method Server class Client class Server Class쪽에서 xx한 메소드가 필요해.!!
  • 4. 7장. 객체간의 기능 이동 Foreign Method Server class Client class Server Class의 코드를 수정할 수가 없어! “안돼. 안되잖아.” – 하프라이프 더빙
  • 5. 7장. 객체간의 기능 이동 Foreign Method Server Class 측의 소스를 변경할 수 없으니, Client Class 측에서 필요로 하는 곳에 기능을 추가 기능이 필요한 곳이 여러군데이다.!? 기능에 대한 코드를 Method로 만들어 놓고, 필요한 곳에서 Method를 호출하도록 하자.!
  • 6. 7장. 객체간의 기능 이동 Foreign Method Server Class 측의 소스를 변경할 수 없으니, Client Class 측에서 필요로 하는 곳에 기능을 추가 기능이 필요한 곳이 여러군데이다.!? 기능에 대한 코드를 Method로 만들어 놓고, 필요한 곳에서 Method를 호출하도록 하자.!
  • 7. 7장. 객체간의 기능 이동 Foreign Method 이 함수는 다른 클래스에 존재했어야 하는 함수이다.!!
  • 8. 7장. 객체간의 기능 이동 Foreign Method Server class Client class 필요한 건 이렇게 되는 것인데.!
  • 9. 7장. 객체간의 기능 이동 Foreign Method 구현 절차. Server class Client class 1. Client Class에 필요한 기능의 메소드를 만든다. Client Class의 어떤 부분에도 접근해서는 안된다. => Server Class에서 Client Class에 접근할 수는 없으니.
  • 10. 7장. 객체간의 기능 이동 Foreign Method 구현 절차. Server class Client class 2. 첫번째파라미터로Server Class의 인스턴스를 받는다. , ,
  • 11. 7장. 객체간의 기능 이동 Foreign Method 구현 절차. Server class Client class 3. 주석을 달아놓자.! , , // foreign method
  • 12. 7장. 객체간의 기능 이동 Local Extension Server class Client class
  • 13. 7장. 객체간의 기능 이동 Local Extension Server class Client class Server Class의 코드 수정 불가.!
  • 14. 7장. 객체간의 기능 이동 Local Extension Client class Server class , , // foreign method , , Foreign Method 가 많아지게 된 상황.! // foreign method , , // foreign method
  • 15.
  • 16.
  • 17. 7장. 객체간의 기능 이동 Local Extension Sub Class or Wapper 원래의 Server Class를 사용하는 것이 아닌, Local Extension 을 만들어서 사용할 수 있는 것.
  • 18. 7장. 객체간의 기능 이동 Local Extension Sub Class Wrapper Class Server class Server class Foreign Method들을 한 곳으로 모아놓지 않으면, 다른 클래스들이 복잡해 지고Method들의 재사용이 힘들어 진다.
  • 19. 7장. 객체간의 기능 이동 Local Extension Sub Class Wrapper Class Server class Server class 무엇을 사용할 것인지는 여러분의 선택.!
  • 20. 7장. 객체간의 기능 이동 Local Extension 제작 절차 … 변환 생성자를Extension클래스에 추가한다. … … … => 생성자는 원래 클래스를 인자로 받는다.
  • 22. 8장. 데이터 구성 Self Encapsulate Field 필드에 직접 접근할 것인지 or 접근자를 사용하여 간접적으로 접근할 것인지.
  • 23. 8장. 데이터 구성 Self Encapsulate Field 필드에 직접 접근할 것인지 or 접근자를 사용하여 간접적으로 접근할 것인지.
  • 24. 8장. 데이터 구성 Self Encapsulate Field 생성자에서 필드에 대해 간접 접근자를 사용할 때 주의해야 한다. 생성자에서 사용할 필드 초기화 메소드를 만든다. or 생성자에서는 필드에 직접 접근한다.