Refactoring -chapter 7,8-

  • 528 views
Uploaded on

 

More in: Technology , Sports
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
528
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Refactoring
    아꿈사café.naver.com/architect1
    김광중 visualwizard@gmail.com
  • 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의
    인스턴스를 받는다.
    ,
    ,
    Client Class의 어떤 부분에도 접근해서는 안된다. => Server Class에서 Client 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. 7장. 객체간의 기능 이동
    Local Extension
    Foreign Method 가 많아지게 된 상황.!
    Foreign Method 를 적당한 곳으로 모아놓자.!
    Foreign Method를 모아놓은 클래스를 만들자.!
    • Sub Class
    • 16. Wapper Class
  • 7장. 객체간의 기능 이동
    Local Extension
    Server class
    Client class
    Sub Class or Wapper
  • 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클래스에 추가한다.



    => 생성자는 원래 클래스를 인자로 받는다.
  • 21. 8장. 데이터 구성
  • 22. 8장. 데이터 구성
    Self Encapsulate Field
    필드에 직접 접근할 것인지
    or
    접근자를 사용하여 간접적으로 접근할 것인지.
  • 23. 8장. 데이터 구성
    Self Encapsulate Field
    필드에 직접 접근할 것인지
    or
    접근자를 사용하여 간접적으로 접근할 것인지.
  • 24. 8장. 데이터 구성
    Self Encapsulate Field
    생성자에서 필드에 대해 간접 접근자를 사용할 때 주의해야 한다.
    생성자에서 사용할 필드 초기화 메소드를 만든다.
    or
    생성자에서는 필드에 직접 접근한다.