8. 상태 패턴 (State)
객체의 내부 상태가 바뀔 때 행동도 함께 변하게 하는 상태 패턴을 알아봅니다.
자판기에 동전이 없을 때 버튼을 누르면 안 나오고, 동전이 있을 때 버튼을 누르면 음료수가 나오죠? 이렇게 ’현재 상태’를 나타내는 객체를 따로 두고 상태를 교체해가며 행동을 바꾸는 것이 상태 패턴이에요. 만약-그렇지않다면(if-else) 덩어리를 없애주는 마법 같은 패턴이랍니다!
(참고: 상태가 가져야 할 행동을 규정해요)
[상태]를 규정하자:
<동전넣기>가 있어야 한다 ()
<뽑기>가 있어야 한다 ()
(참고: 자판기는 상태 객체에게 일을 맡겨요)
[자판기]를 설계하자:
'현재상태'를 [상태]인 비어있음으로 정하여 숨기자
처음 만들어질 때 () 다음과 같이 하자:
'나'의 '현재상태'를 새로운 [동전없음상태]('나')로 정하자
<상태바꾸기>를 만들자 ([상태]인 '새상태'):
'나'의 '현재상태'를 '새상태'로 정하자
<동전넣기>를 만들자 ():
'나'의 '현재상태'의 <동전넣기>()를 실행하자
<뽑기>를 만들자 ():
'나'의 '현재상태'의 <뽑기>()를 실행하자
(참고: 동전이 없는 상태일 때의 행동)
[상태]를 따르는 [동전없음상태]를 설계하자:
'기계'를 [자판기]인 비어있음으로 정하여 숨기자
처음 만들어질 때 ([자판기]인 '기계') 다음과 같이 하자:
'나'의 '기계'를 '기계'로 정하자
<동전넣기>를 만들자 ():
"동전을 넣었습니다."를 출력하자
'나'의 '기계'의 <상태바꾸기>(새로운 [동전있음상태]('나'의 '기계'))를 실행하자
<뽑기>를 만들자 ():
"동전을 먼저 넣어주세요!"를 출력하자
(참고: 동전이 있을 때의 행동)
[상태]를 따르는 [동전있음상태]를 설계하자:
'기계'를 [자판기]인 비어있음으로 정하여 숨기자
처음 만들어질 때 ([자판기]인 '기계') 다음과 같이 하자:
'나'의 '기계'를 '기계'로 정하자
<동전넣기>를 만들자 ():
"이미 동전이 있습니다."를 출력하자
<뽑기>를 만들자 ():
"음료수가 나옵니다! 덜컹!"을 출력하자
'나'의 '기계'의 <상태바꾸기>(새로운 [동전없음상태]('나'의 '기계'))를 실행하자
'기계1'을 [자판기]인 새로운 [자판기]()로 정하자
'기계1'의 <뽑기>()를 실행하자
'기계1'의 <동전넣기>()를 실행하자
'기계1'의 <뽑기>()를 실행하자