Refactoring -chapter 7,8-

744 views

Published on

Published in: Technology, Sports
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
744
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Refactoring -chapter 7,8-

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

×