본문 바로가기

Software Design Pattern

컬랙션에 작용하는 두번째 예제

컬랙션에 작용하는 두번째 예제


s안에 있는 모든 요소를 2배로 출력하고 싶다.

1. 루프를 수행하면서 모든 요소를 2배로 한 후 추력하면 된다.

2. 특정 작업을 자주하게 된다면 메소드로 추가해주는 것이 좋다.

3. SList 뿐 아니라 모든 컬렉션에서 해당 작업을 자주 하게 된다.

    모든 컬렉션에 해당 메소드가 추가되어야 한다.

=> 방문자 패턴을 사용하면 좋다.


방문자(Visitor)  패턴

: 컬렉션 또는 복합 객체의 내부 구조와 상관없이 요소에 연산을 수행하는 패턴


모든 방문자 객체의 인터페이스

interface Visitor{

     void visit(Object value)

}


방문의 대상 객체의 인터페이스

interface Acceptor {

     void accept(Visitor visitor);

}


방문자 패턴의 핵심은  accept메소드.. 이것만 정확하게 이해하면 된다.


이제 다양한 방문자를 제공하면 된다.


방문자 패턴의 문제점 : 초기에 세운 캡슐화 전략을 위배할 수 있다...

애초에 title은 setter를 만들지 않았는데, 예제처럼만들려면 title에 대해 setter가 제공되어야 하므로

초기에 세운 캡슐화 전략을 위반할 수 있다.