프로토타입 패턴

김대익·2022년 3월 29일
0
import copy

class Cat:
  def __init__(self):
    self.color = None
    self.eye_color = None
    self.nose_color = None
    self.tail_color = None
    self.name = None

  def clone(self):
    return copy.deepcopy(self)

프로토타입 패턴은 완전히 일치하는 복제 객체를 만들고 싶을 때
복제하고 싶은 객체의 상태를 가지고 있는 패턴이다.

kitty = Cat()
kitty.color = 'white'
kitty.eye_color = 'white'
kitty.nose_color = 'white'
kitty.tail_color = 'white'
kitty.name = 'kitty'

nabi = Cat()
nabi.color = 'white'
nabi.eye_color = 'white'
nabi.nose_color = 'white'
nabi.tail_color = 'white'
nabi.name = 'nabi'

reference기반 언어들은 객체가 reference로 동작하기 때문에
nabi = kitty처럼 쓰면 객체가 복사가 되는 것이 아니라
하나의 객체를 가리키는 reference가 2개가 되는 것일 뿐이다.

따라서 위와같이 clone() 메서드를 지원해주는 방법이다.

#abstract structure prototype
class BlackCat(Cat):
  def __init__(self):
    super().__init__()
    self.color = 'black'

class WhiteCat(Cat):
  def __init__(self):
    super().__init__()
    self.color = 'white'

black_cat = BlackCat()
black_cat.nose_color = 'pink'
black_cat.tail_color = 'green'

#black_cat is prototype
kitty = black_cat.clone()
kitty.eye_color = 'white'
kitty.name = 'kitty'

nabi = black_cat.clone()
nabi.eye_color = 'blue'
nabi.name = 'nabi'

위 코드는
color가 black인 BlackCat 프로토타입을 복사하여 눈 색과 이름을 변경하는 예이다

0개의 댓글