2011년 5월 26일 목요일

Encapsulate Collection



컬렉션을 리턴하는 메소드가 있으면 그 메소드가 읽기전용 뷰를 리턴하도록 만들고, add/remove 메소드를 제공하라.

! 동기
  • 클라이언트 코드가 컬렉션을 가지고 있는 클래스가 알지 못하는 사이에 컬렉션의 내용을 조작할 수 없게 해야한다.
  • 클라이언트 코드에 객체의 내부 데이터 구조를 너무 많이 드러내지 않도록 해야 한다.
  • 컬렉션에 대한 set 메소드가 있으면 안된다. 대신 컬렉션에 요소를 추가 삭제하는 오퍼레이션이 있어야 한다.

! 절차
  • (컬렉션을 포함하고 있는 클래스에) 컬렉션에 대한 add/remove 메소드를 추가한다.
  • 필드를 빈 컬렉션으로 초기화한다.
  • set 메소드를 호출하는 코드를 찾는다.
  • set 메소드를 add/remove 오퍼레이션을 사용하도록 수정한다.
  • 또는 클라이언트 코드가 set 메소드 대신 오퍼레이션을 호출하도록 수정한다.
  • get메소드를 사용하여 컬렉션을 수정하는 코드를 찾아서 add/remove메소드를 사용하도록 수정한다. 각각의 변경에 대해 컴파일, 테스트를 한다.
  • get 메소드를 사용하여 컬렉션을 수정하는 코드를 모두 바꾸었으면, get 메소드가 컬렉션의 읽기전용 뷰를 리턴하도록 수정한다.
  • get 메소드를 사용하는 코드를 찾는다. 호스트 객체에 있어야 하는 코드가 있는지 본다. Extract Method와 Move Method를 사용하여 코드를 호스트 객체로 옮긴다.
    TIP
    자바 1.1에서는 클라이언트가 Enumeration을 사용하는 것이 좋다.
    • 현재의 get 메소드의 이름을 바꾸고 Enumeration을 리턴하는 새로운 get 메소드를 추가한다.
    • 예전의 get 메소드를 사용하는 코드를 찾아 새로운 메소드를 사용하도록 수정한다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...