작심삼일

4주차-1. Prototype 본문

스터디/디자인 패턴

4주차-1. Prototype

yun_s 2021. 5. 13. 23:02
728x90
반응형

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

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

어떤 패턴인가

Prototype method. 한글로는 원형 패턴이라고 한다.

난 이 '원형'이 circular list처럼 circle이라는 뜻인 줄 알았는데, 그게 아니라 '원본'의 뜻이었다;;

Prototype의 의미먼저 생각해봤으면 이런 일은 없었을텐데 멍청하게 왜그랬을까...

 

아무튼 이 패턴도 매우 간단하다. 쉽게 말해 ctrl+C/V, 복붙을 할 때 사용하면 된다.

똑같은 객체를 매번 만들기 귀찮으니 cloning을 하는 것이다.

예시를 보면 이해가 빠르다.


어떻게 쓰는가

Prototype: 인터페이스 정의

ConcretePrototype: 복제 연산 구현

Client: prototype에 자기 자신의 복제를 요청해서 새로운 객체 생성

오목이나 바둑의 흰/검은 돌을 예시로 들겠다. 제대로 작성하려면 바둑판에 각 돌의 위치도 저장해야하는데 그부분은 생략하겠다.

아래 코드를 보면 한 번 흰/검은 돌 클래스를 만들어두면 나중에 그대로 가져다 쓰면 된다.

class white:
    def __init__(self, h=None, w=None):
        self.height = h
        self.width = w

class black:
    def __init__(self, h=None, w=None):
        self.height = h
        self.width = w
        
        
1_white = white(1, 2)
1_black = black(5, 3)
2_white = white(7, 9)

어디서 활용되는가

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

1. 인스턴스화할 클래스를 런타임에 지정할 때

2. 제품 클래스 계통과 병렬적으로 만드는 팩토리 클래스를 피하고 싶을 때

3. 클래스의 인스턴스들이 서로 다른 상태 조합 중에 어느 하나일 때

 

그리고 인터넷을 찾아보니 DB에서 가져온 데이터를 저장한 후 계속해서 사용할 때 자주 사용된다고 한다.


My Opinion

앞선 패턴들보다 되게 쉬워서 바로 와닿았다. 덕분에 이번 스터디 준비 시간이 많이 줄었다.

이 패턴은 이름만 몰랐지 종종 사용하고 있어서 금방 와닿은 것 같다.

728x90
반응형

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

5주차-1. Decorator Pattern  (0) 2021.05.26
4주차-2. Template Method  (0) 2021.05.13
3주차-2. Singleton  (0) 2021.04.30
3주차-1. Factory Method  (0) 2021.04.30
2주차. Abstract Factory Pattern (추상 팩토리 패턴)  (0) 2021.04.22
Comments