관리 메뉴

버리야 날자

[디자인패턴] State, Strategy Pattern 본문

나만의 작업

[디자인패턴] State, Strategy Pattern

버리 버리야 2007.05.30 01:04

/***************************************

***** Design Pattern 정리 - flyburi.com 버리****

***************************************/

 

State Pattern - Design Pattern

 

Problem

1. How can you change the class of an object at run-time?

2. How can you model a finite state machine using OO techniques?

 

Example 1.

스타크래프트에서 플레이어가 테란 유닛들 중에서 마린, 벌처, 탱크에게 임의의 공격명령을 내렸을 자신의 상태에 따라 행위가 달라질 적용가능?

공격(abstract class) 이라는 하나의 공통적인 행위안에 세가지 또는 이상의 상태를 나타낼수 있습니다.

 

마린공격, 벌처공격, 탱크공격 - ConcreteState마린, ...

마린은 총을 쏠것이고, 벌처는 마인을 박거나 던지기, 탱크는 퉁퉁때리기와 시즈모드에서 공격하는것. 자신의 상태에 따라 공격하는 행위가 달라지는데 이럴때 적용가능할 같은데.. 맞나요? ^^;;

 

Example 2.

은행사이트에서 시간의 변화에 따라 (이체 이용시간) 서비스가 허용되는 상태

 

Example 3.

The State pattern allows an object to change its behavior when its internal state changes. This pattern can be observed in a vending machine. Vending machines have states based on the inventory, amount of currency deposited, the ability to make change, the item selected, etc. When currency is deposited and a selection is made, a vending machine will either deliver a product and no change, deliver a product and change, deliver no product due to insufficient currency on deposit, or deliver no product due to inventory depletion. [Michael Duell, "Non-software examples of software design patterns", Object Magazine, Jul 97, p54

  

State Pattern 이렇다.

객체의 행위가 별도로 분리된 상태(state) 따라 달라지도록 해준다.

이때 상태 정보는 클래스로 정의된다.

상태의 정보를 캡슐화하여 프로그램 실행 중에 특정 객체의 행위를 변경하는 패턴

 

 

참고할 URL

 

충북대학교에서 번역한 자료

Using the STATE Design Pattern in Java(예제)

 

Strategy Pattern

 

Strategy Pattern은 이렇다.

알고리즘군의 교체

동일 목적 알고리즘의 선택 적용 문제

프로그램 작성하다가 한가지 작업을 수행하는데 사용할 수 있는 알고리즘이 여러개 존재하는 경우

 

적용시기와 효과가 비슷하게 보이는 State Pattern Strategy Pattern의 차이점

State Pattern은 상태에 따라 행위가 달라지지만, Strategy Pattern은 동일한 결과에 과정을 다르게 교체하여 도출한다.

6 Comments
  • BlogIcon Belle 2007.05.31 00:07 신고 디자인 패턴은 우리가 프로그램을 짜는 모든일에서 사실 암묵적으로 실시되고 있던 것 같네요.


    우리가 알게 모르게 시행해오고 있던 것이었지만, 이젠 표현을 해보자라고 이슈로 떠올랐고, 그 후로 많은 용어가 나타났는데 디자인 패턴도 같은 맥락이라고 봐야겠지요.


    그만큼 이런것이 이제 중요한 사항으로 대두되고 있다는 반증이기도 하고요.


    역사를 살펴보면 생뚱맞게 사건이 일어나는 것이 아닌, 앞, 뒤 이야기가 다 있습니다. 이바닥도 마찬가지입니다. 좀더 높은 눈을 가지게 되면 왜 이런 이야기들이 나오는지 알게 됩니다. 요즘 이게 뜨더라 하면 무작정 그걸 공부해야지 하는 것도 좋지만 왜 그것이 뜨고 있는지에 대한 이해도 중요하겠지요.


    그것은, 우리가 이바닥에서 즐겨야 할 기쁨임과 동시에 슬픔이기도 하고요.
  • BlogIcon 버리 2007.05.31 09:57 신고 저도 아주 처음에 공부할때 배웠던 소스중에서 그게 패턴인지도 모르고 썼던것이 패턴을 공부하고 보니 factory 패턴이었더라구요

    factory는 많이 쓰이기도 하지만, 다른 패턴들도 찾아보면
    모르는 사이에 쓰이고 있는것 같습니다.

    ^^;; 이 바닥 안떠나시는 거죠?ㅋㅋ
  • BlogIcon kindlion 2007.06.01 10:03 신고 디자인 패턴 정말 중요하지~
    시스템 설계할때 멋지게(?) 하고 싶다면 말이쥐~
    POS도 나중에 한번 읽어보렴~ 나도 아직 읽어보진 않았는데...
    그것까지 읽고 적용이 원활하다면 실력 급상승 하게 될꺼야~
  • BlogIcon 버리 2007.06.03 14:14 신고 아직은 멀은 얘기같은 설계지만,
    기본에 충실하면서 설계도 고려하며 코딩을 해야겠어요
    근데 pos가 뭔지 몰겠어요~ㅠㅠ
  • Sharr 2007.06.01 15:26 신고 스타크래프트에 적용하니까 이해가 쉽네요 ㅎ

    저희 교수님이 항상 설명해줄때..

    스타크래프트를 어찌나 좋아하시던지 ㅎㅎ

    실력은 검증불가 ...;;

    anyway..

    Attack 명령을 내렸을때

    각 유닛마다의 공격방법을 차별화 할 수 있겠군요

    끄덕끄덕...
  • 버리 2007.06.03 14:16 신고 공부와 놀이를 접목하면 좋은데 그게 잘 떠오르지 않을때가 문제겠지만,이렇게 이해하니깐
    나중에 절대 안까먹을것 같아요
댓글쓰기 폼