Your SlideShare is downloading. ×
0
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Refactoring
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Refactoring

434

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

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

×