반응형
Notice
Recent Posts
Recent Comments
- Today
- Total
작심삼일
7주차-2. Visitor 본문
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