- Today
- Total
작심삼일
5주차-2. State Pattern 본문
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.
틀린 부분은 알려주시면 감사하겠습니다.
어떤 패턴인가
전자과에서는 디지털논리회로인가하는 과목에서 이 state를 이용해서 회로를 설계한다.그래서그런지 이 패턴이 반갑게 느껴졌다.그때 배웠던 것처럼 state에 따라 행동을 다르게 하는데, 그것을 그대로 함수로 구현하는 것이 State Pattern이다.
객체 내부 상태에 따라 스스로 행동을 변경할 수 있게 허가하는 패턴으로, 이렇게 하면 객체는 마치 자신의 클래스를 바꾸는 것처럼 보인다.
어떻게 쓰는가
각 상태에 따라 다르게 행동해야할 때 사용한다.
예를 들면, 횡단보도의 신호등이 빨간불일 때 브레이크를 밟고 초록불일 때 악셀 밟는 식으로 생각할 수 있다.
신호등이라는 존재는 그대로지만, 그 state가 빨간불인지, 초록불인지의 상태로 존재한다.
class Car:
def __init__(self, state='RED'):
self.state = state
def Pedal(self):
if self.state == 'RED':
print('STOP')
elif self.state == 'GREEN':
print('GO')
-------------------------------------------------
car = Car()
car.Pedal() # 'STOP'
car.state = 'GREEN'
car.Pedal() # 'GO'
어디서 활용되는가
이는 책의 내용 (p. 396)을 그대로 가져왔다.
1. 객체의 행동이 상태에 따라 달라질 수 있고, 객체의 상태에 따라서 런타임에 행동이 바뀌어야 합니다.
2. 어떤 연산에 그 객체의 상태에 따라 달라지는 다중 분기 조건 처리가 너무 많이 들어있을 때, 객체의 상태를 표현하기 위해 상태를 하나 이상의 나열형 상수로 정의해야 합니다.
위 두가지 모두 상태를 여러 개 두고, 그 상태에 따라 행동하도록 함수를 지정한다는 뜻으로 이해했다.
My Opinion
뭐랄까, 딱히 어려운 패턴은 아니라서 크게 할 말은 없다.
하지만 실생활에도 저렇게 state에 따라서 다르게 동작하는 경우가 많으므로, 앞으로 유용하게 사용할 패턴이라고 생각한다.
'스터디 > 디자인 패턴' 카테고리의 다른 글
6주차-2. Strategy (0) | 2021.06.09 |
---|---|
6주차-1. Adapter (0) | 2021.06.09 |
5주차-1. Decorator Pattern (0) | 2021.05.26 |
4주차-2. Template Method (0) | 2021.05.13 |
4주차-1. Prototype (0) | 2021.05.13 |