작심삼일

7주차-2. Visitor 본문

스터디/디자인 패턴

7주차-2. Visitor

yun_s 2021. 6. 23. 22:04
728x90
반응형

디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.

틀린 부분은 알려주시면 감사하겠습니다.

어떤 패턴인가

객체 구조를 이루는 원소에 대해 수행할 연산을 표현한다.

연산을 적용할 원소의 클래스를 변경하지 않고도 새로운 연산을 정의할 수 있게 한다.

 

작업 대상과 작업 내용을 분리할 때 주로 사용한다.


어떻게 쓰는가

자료 구조(데이터)와 자료 구조를 처리하는 로직(알고리즘)을 분리해야할 때 사용하기 때문에

Deep learning쪽에 종사하는 내 입장에서 생각해보면 데이터를 preprocessing할 때 주로 사용한다.

class Visitor:
    def preprocess(self, data):
        data.token_ids = self.deq2tok(data.seq)
        
    def seq2tok(self, data):
        # seq를 tok로 바꾸는 코드
        return tok

class Data1:
    def __init__(self):
        self.seq = '안녕'
        self.tok = None
        
----------------------------------------------------------------------
data = Data1()
Visitor.preprocess(data)
print(data.token_ids)	# '5 17 23 4 2'

어디서 활용되는가

이는 책의 내용 (p. 428)을 그대로 가져왔다.

1. 다른 인터페이스를 가진 클래스가 객체 구조에 포함되어 있으며, 구체 클래스에 따라 달라진 연산을 이들 클래스의 객체에 대해 수행하고자 할 때

2. 각각 특징이 있고, 관련되지 않은 많은 연산이 한 객체 구조에 속해있는 객체들에 대해 수행될 필요가 있으며, 연산으로 클래스들을 "더럽히고" 싶지 않을 때

3. 객체 구조를 정의한 클래스는 거의 변하지 않지만, 전체 구조에 걸쳐 새로운 연산을 추가하고 싶을 때


My Opinion

처음에는 내용을 완전 잘못이해하고 있었다.

하지만 스터디원 중 한 분이 '자료 구조(데이터)와 자료 구조를 처리하는 로직(알고리즘)을 분리해야할 때 사용한다'라고 해주셔서 이해하기 쉬웠다.

위에서 예시로 들었던 것처럼 데이터 preprocessing할 때 종종 사용해야겠다.

728x90
반응형

'스터디 > 디자인 패턴' 카테고리의 다른 글

8주차-2. Iterator  (0) 2021.07.08
8주차-1. Chain of responsibility  (0) 2021.07.08
7주차-1. Flyweight  (0) 2021.06.23
6주차-2. Strategy  (0) 2021.06.09
6주차-1. Adapter  (0) 2021.06.09
Comments