본문 바로가기

Design Patterns

State Pattern ①

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
후.. 이번에는 스테이트 패턴이군요.. -_-;; 한 이틀동안 봤는데.. 공부를 하면서 느낀건.. 너무 헷깔린다는 겁니다. GoF의 패턴 UML을 봐도 그렇고.. 스트레티지랑 너무 헷깔려서 짜증났습니다 -_-;; 그냥 그렇다구요.. 그래도 공부는 해야죠.. ㅠㅠ.

일단 멍청한 프로그램을 만들었습니다. 물론.. 제가 멍청하다는건 아니고 -_-;;; 그럴수도 있지만..;;; 책 처럼 일단 시작을 해봣습니다. 뭔가 상태에 따라서 반응이 틀려지는 그런게 뭐가 있을까.. 고민고민하다가 찾아낸 것이.. 엄마의 잔소리 입니다. -_-;; 그래서 만들어 봤습니다. 전혀 개인적인걸 섞지 않았고 가급적이면, 인터넷에서 찾은 내용들로 객관적? 으로 엄선해봣습니다.

소스코드는 아래와 같습니다. (너무 길어 숨겨주는 센스!)

자 그럼 이 소스코드를 그림으로 한번 그려볼까요...? 머 그릴것도 없이 한번에 나오죠..?

사용자 삽입 이미지
이런 클래스가 생겨나구요.. 소스를 보시면 알겠지만.. 말하는 대상이 누구냐에 따라서 해야하는 말이 다르기 때문에 그 대상(상태)이 누구냐인지를 알기위해서 조건문을 남발하여 사용을 하였습니다. 물론 문제 없이 원하는 리액션을 보여주고 있습니다.

하지만 여지껏 배운 여러가지 디자인 원칙에 위배되는 것이 너무 많지요.. 예를 들어서 여기선 가족 구성원이 남편, 아들, 딸 이 있지만.. 예를들어 아이를 하나 더 가져서 갓난 아이가 생길 수도 있고... (여기서는 아들 딸이 백수, 고등학생을 전제로 했습니다.) 언제든지 가족구성원에 따라 변할수 있어야 하지요. 그리고 여담이지만 UML 하나 떵그러니 그려놓고 -_-;; 저건 객체지향 디자인이라고 볼 수가 없는거 같습니다.

뭐 그래서 상태 패턴이라는 것을 가지고 리팩토링을 해보려고 합니다. 자~ 준비되셨나요 고고씽~