노무현 대통령 배너

Tag: 헤드퍼스트

Observer Pattern 옵저버 패턴을 액션스크립트로 컨버팅 – Head First Design Pattern

by on 5.19, 2009, under Design Pattern

the_observerHead First Design Pattern 의 제 2 장 내용인 옵저버 패턴(Observer Pattern) 으로 들어가 보겠습니다. 역시 이번에도 자바 코드를 액션스크립트로 컨버팅 하였습니다.

다음은 책 본문에 있는 옵저버 패턴에 대한 설명입니다.

“옵저버 패턴 – 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다.

사실 위의 정의만 보고는 뭐가 뭔지 알쏭달쏭한데요, 차근차근 풀어나가보겠습니다.
(계속 읽기…)

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

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...

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