노무현 대통령 배너

Design Pattern

Strategy Pattern 스트래티지 패턴으로 액션어드밴쳐 게임 만들기

by on 5.17, 2009, under Design Pattern

zelda_and_link헤드퍼스트 디자인 패턴 책에는 오리를 이용하여 스트래티지 패턴을 설명하였습니다. 스트래티지 패턴은 OOP의 중요한 원칙 중 하나인 “상속보다는 합성” 원칙을 직접 표현하고 있기 때문에 반복학습을 통한 확실한 이해를 하기 위해 오리가 아닌 액션어드벤쳐 게임을 주제로 삼아 이 패턴을 다시한번 설명하도록 하겠습니다.

전체 클래스와 인터페이스를 한눈에 보기 위해 starUML을 이용해 클래스 다이어그램을 작성해 보았습니다.

Strategy Pattern - Action Adventure Game

Strategy Pattern - Action Adventure Game

먼저 Character 클래스는 Knight 와 Wizard 클래스의 추상층입니다. 각 직업들이 가지는 공통적인 특성을 정의하여 서브클래스에서 확장(상속) 사용하도록 합니다.

모든 캐릭터들은 무기를 사용할 수 있고 갑옷을 입을 수 있기 때문에 이 두가지의 기능을 커다란 알고리즘으로 분류하여 각각 인터페이스를 만듭니다.
무기를 사용하는 것은 useWeapon() 메서드를 호출하여 무기를 사용하는 모습을 그래픽으로 처리하게 하고, 갑옷을 착용하면 갑옷 종류에 따라 다른 보너스 hp 를 얻도록 할 계획입니다.

(계속 읽기…)

7개의 댓글 :, , , , , , , , , , , , , , , more...

Strategy Pattern 스트래티지 패턴을 액션스크립트로 컨버팅 – Head First Design Pattern

by on 5.16, 2009, under Design Pattern

strategy_pattern_chess이번에는 Head First Design Pattern 의 제 1 장 내용인 스트래티지 패턴(Strategy Pattern : 전략 패턴) 입니다. 역시 이번에도 자바 코드를 액션 스크립트로 컨버팅 하였습니다.

책에는 스트래티지 패턴을 이렇게 정의하고 있습니다.

“스트래티지 패턴(Strategy Pattern)에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지 패턴을 사용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다”

슈퍼클래스에 구체적인 행동에 대한 메서드가 있는 경우 서브클래스에서 의도하지 않은 오류가 발생할 수 있는 가능성이 있습니다. 오리는 무조건 날 수 있을거라고 생각하고 슈퍼클래스인 Duck에 fly() 메서드를 만들고 구체적으로 날라다니는 구현을 한 경우 고무오리나 모형오리도 날라다니는 오류를 책에서 예를 들어 설명하고 있습니다.

그래서 Duck 클래스에서 개별적인 행동을 빼내서 인터페이스로 만들고 그 인터페이스를 구상하는 클래스들을 만들고, Duck 클래스를 상속받아 세부적인 구현을 하는 서브클래스들에서 인터페이스를 통해 구상 클래스를 사용하게 됩니다.

(계속 읽기…)

댓글남기기 :, , , , , , , , , , , , , , more...

Adapter Pattern 어댑터 패턴을 액션스크립트로 컨버팅 – Head First Design Pattern

by on 5.14, 2009, under Design Pattern

Head First Design Pattern제가 참여하고 있는 스터디에서 교재로 사용하고 있는 오라일리/한빛출판사에서 발간된 Head First Design Pattern 입니다. 스터디에 대한 이해도를 높이고자 어댑터 패턴에 관한 자바 코드를 액션스크립트 코드로 컨버팅해 보았습니다.

책에는 어댑터 패턴을 이렇게 정의하고 있습니다.

“어댑터 패턴(Adapter Pattern) – 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어탭터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다.”

호스트코드에서 어떤 특정한 구상 클래스를 인터페이스를 통해  사용하고 있는 상황에서, 새로운 구상 클래스의 요건이 생겨서 제 3의 클래스가 생겼습니다. 이 때 호스트코드와 인터페이스의 코드는 변경하지 않고 (게다가 동일한 사용 방법으로) 제 3의 구상클래스의 메소드도 추가 사용할 수 있도록 해주는 패턴이라 할 수 있겠습니다.

(계속 읽기…)

4개의 댓글 :, , , , , , , , , , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Meta