- Today
- Total
작심삼일
4주차-1. Prototype 본문
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.
틀린 부분은 알려주시면 감사하겠습니다.
어떤 패턴인가
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
앞선 패턴들보다 되게 쉬워서 바로 와닿았다. 덕분에 이번 스터디 준비 시간이 많이 줄었다.
이 패턴은 이름만 몰랐지 종종 사용하고 있어서 금방 와닿은 것 같다.
'스터디 > 디자인 패턴' 카테고리의 다른 글
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 |