Refactoring -Encapsulate Collection -Replace Record with Data Class -Replace Type Code with Class                        아...
Encapsulate Collection컬랙션(Collection)을 리턴하는 메소드가 있으면,그 메소드가 read-only View를 리턴하도록 만들   고, add/remove 메소드를 제공하라.
Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록    만들고, add/remove 메소드를 제공하라.• 동기 – 컬랙션(컨테이너)를 포함하고 있는 클래스 에서 종...
Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록    만들고, add/remove 메소드를 제공하라.• 절차 – 기존 코드       -메인부분
Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록    만들고, add/remove 메소드를 제공하라.• 절차 – 컬랙션에 대해 적절한 수정자를 만든다 add / ...
Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록    만들고, add/remove 메소드를 제공하라.• 절차 – set 메소드 몸체를 수정한다.
Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록    만들고, add/remove 메소드를 제공하라.• 절차 – set 메소드 사용하는것을 add/remove를 ...
Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록    만들고, add/remove 메소드를 제공하라.• 절차 – 동작을 적절한 위치로 옮기기
Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록    만들고, add/remove 메소드를 제공하라.• 절차 – 기타의 동작 수정
Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록    만들고, add/remove 메소드를 제공하라.• 배열의 캡슐화 – 기존 코드 – 수정자 제공 – 배열 저체...
Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록    만들고, add/remove 메소드를 제공하라.• 배열의 캡슐화 – 기존 get 수정 – 기존 코드 모두 변...
Replace Record with Data Class전통적인 프로그래밍 환경에서의 레코드 구조에 대한 인터페이 스가 필요한 경우, 그 레코드를 위한 데이터 객체를 만들라.
Replace Record with Data Class 전통적인 프로그래밍 환경에서의 레코드 구조에 대한 인터페이  스가 필요한 경우, 그 레코드를 위한 데이터 객체를 만들라.• 동기 – 전통적인 레코드 구조를 인터페이...
Replace Type Code with Class 클래스의 동작에 영향을 미치지 않는 숫자로 된 타입코드(numberic type code)가 있으면 숫자를 클래스로 바꿔라.
Replace Type Code with Class       숫자로 된 타입코드를 클래스로 바꿔라.• 동기 – 타입코드나 열거형으로 만든 상징적 이름은 이해하기 쉽다. – BUT, 컴파일러에선 어차피 숫자형식으로 타입...
Replace Type Code with Class       숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 기존코드
Replace Type Code with Class       숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 타입 코드 위한 새로운 클   래스 만든다.   • 코드 필드   • Get / Set 메소드   • 적절...
Replace Type Code with Class       숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 소스 클래스에서 새로만든 클래스 사용하도록 수정    • 예전 코드의 인터페이스는 유지.
Replace Type Code with Class       숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 소스 클래스에서 새로만든 클래스 사용하도록 수정    • 새로만든 클래스를 사용하는 새로운 메소드 만듬  ...
Replace Type Code with Class       숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 클라이언트 코드에 새로운 인터페이스 적용 – 기존의 정수를 사용하는 메소드, 생성자 상수를 모두제거
Replace Type Code with Class       숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 기존의 정수를 사용하는 메소드, 생성자 상수를 모두제거 – BloodGroup에서 코드를 사용하는 메소드를...
Upcoming SlideShare
Loading in …5
×

Refactoring

717 views
650 views

Published on

refactoring

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
717
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Refactoring

  1. 1. Refactoring -Encapsulate Collection -Replace Record with Data Class -Replace Type Code with Class 아꿈사 http://cafe.naver.com/architect1 김용락 http://blog.naver.com/subhill
  2. 2. Encapsulate Collection컬랙션(Collection)을 리턴하는 메소드가 있으면,그 메소드가 read-only View를 리턴하도록 만들 고, add/remove 메소드를 제공하라.
  3. 3. Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록 만들고, add/remove 메소드를 제공하라.• 동기 – 컬랙션(컨테이너)를 포함하고 있는 클래스 에서 종종 그 컬랙션에 대해 직접적으로 get/set 메소드를 가지고 있는 경우에 컬랙션은 약간 다른 프로토콜을 사용해야 한다.• 이유 – 클라이언트코드가 컬랙션을 가지고 있는 클래스가 알지 못하는 사이에 컬렉션의 내용을 조작할 수 있기 때문. – 객체의 내부 데이터 구조를 너무 많이 드러나기 때문. – 컬랙션에 대해 set 메소드가 있으면 안됨 – set대신 element를 add/remove하는 operation을 추가. – 이런 프로토콜로 컬랙션을 적절히 캡슐화, 클라이언트코드와 클래스의 결합을 줄일 수 있다.
  4. 4. Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록 만들고, add/remove 메소드를 제공하라.• 절차 – 기존 코드 -메인부분
  5. 5. Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록 만들고, add/remove 메소드를 제공하라.• 절차 – 컬랙션에 대해 적절한 수정자를 만든다 add / remove
  6. 6. Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록 만들고, add/remove 메소드를 제공하라.• 절차 – set 메소드 몸체를 수정한다.
  7. 7. Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록 만들고, add/remove 메소드를 제공하라.• 절차 – set 메소드 사용하는것을 add/remove를 사용하도록 바꾼다 – get 메소드를 통해 내부의 컬랙션 수정하는것을 찾아 수정. – get 메소드가 수정불가능한 뷰를 리턴하게 바꾸어 get검사
  8. 8. Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록 만들고, add/remove 메소드를 제공하라.• 절차 – 동작을 적절한 위치로 옮기기
  9. 9. Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록 만들고, add/remove 메소드를 제공하라.• 절차 – 기타의 동작 수정
  10. 10. Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록 만들고, add/remove 메소드를 제공하라.• 배열의 캡슐화 – 기존 코드 – 수정자 제공 – 배열 저체값 설정 오퍼레이션 추가
  11. 11. Encapsulate Collection컬랙션을 리턴하는 메소드를 read-only View를 리턴하도록 만들고, add/remove 메소드를 제공하라.• 배열의 캡슐화 – 기존 get 수정 – 기존 코드 모두 변경했으면 get 이 복사본 리턴하도록 수정. – 이제 배열을 List로 바꾸자.
  12. 12. Replace Record with Data Class전통적인 프로그래밍 환경에서의 레코드 구조에 대한 인터페이 스가 필요한 경우, 그 레코드를 위한 데이터 객체를 만들라.
  13. 13. Replace Record with Data Class 전통적인 프로그래밍 환경에서의 레코드 구조에 대한 인터페이 스가 필요한 경우, 그 레코드를 위한 데이터 객체를 만들라.• 동기 – 전통적인 레코드 구조를 인터페이스를 통해 제어하고자 할 때• 절차 – 레코드를 표현할 클래스 만든다. – 캡슐화 한다 (private 필드로 추가, get/set method 추가)• 배열의 요소가 인덱스에 따라 특별한 의미를 갖는경우 – 앞서 배운 Replace Array with Object(220)를 사용다.
  14. 14. Replace Type Code with Class 클래스의 동작에 영향을 미치지 않는 숫자로 된 타입코드(numberic type code)가 있으면 숫자를 클래스로 바꿔라.
  15. 15. Replace Type Code with Class 숫자로 된 타입코드를 클래스로 바꿔라.• 동기 – 타입코드나 열거형으로 만든 상징적 이름은 이해하기 쉽다. – BUT, 컴파일러에선 어차피 숫자형식으로 타입체크(그놈이그놈) – 따라서 버그 가능성 존재 – 가독성도 좋고 강력한 타입체크를 할 수 있는 클래스로 바꾸자.
  16. 16. Replace Type Code with Class 숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 기존코드
  17. 17. Replace Type Code with Class 숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 타입 코드 위한 새로운 클 래스 만든다. • 코드 필드 • Get / Set 메소드 • 적절한 static 메소드
  18. 18. Replace Type Code with Class 숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 소스 클래스에서 새로만든 클래스 사용하도록 수정 • 예전 코드의 인터페이스는 유지.
  19. 19. Replace Type Code with Class 숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 소스 클래스에서 새로만든 클래스 사용하도록 수정 • 새로만든 클래스를 사용하는 새로운 메소드 만듬 • 인터페이스의 이름들도 변경하여 명확하게 만듬.
  20. 20. Replace Type Code with Class 숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 클라이언트 코드에 새로운 인터페이스 적용 – 기존의 정수를 사용하는 메소드, 생성자 상수를 모두제거
  21. 21. Replace Type Code with Class 숫자로 된 타입코드를 클래스로 바꿔라.• 절차 – 기존의 정수를 사용하는 메소드, 생성자 상수를 모두제거 – BloodGroup에서 코드를 사용하는 메소드를 Private

×