반응형

Design Pattern 5

Observer pattern, 옵저버 패턴

Observer Pattern 이란 어떤 객체에서 데이터의 변경이 발생했을 때, 그 객체에 의존하지 않고 데이터의 변경을 통보할 때 사용한다. 그래서 통보 받는 대상은 수평적으로 비교적 쉽게 기능을 확장 될 수 있다. Observer Pattern 적용 아래는 스타크래프트의 테란 Factory가 벌쳐, 탱크 그리고 골리앗을 생산완료 했을 때, 인구수가 늘어나는 것을 보여주는 SupplyViewService와 생산이 완료 됐음을 알려주는 Notification Service에 생산이 완료됐음을 통보해 인구수를 업데이트, 생산된 직후 사용자에게 알림을 하는 것을 구현한 것이다. 보통 보면 observer를 구현하는 객체가 Subject를 구체화한 클래스의 객체를 가져아 하는 것 같은데 생략하고 notify할..

Design Pattern 2020.05.18

State pattern, 스테이트 패턴

State pattern 이란 객체가 상태에 따라 같은 메소드가 다른 행위를 하도록 위임하는 디자인 패턴이다. 공통 메소드의 인터페이스를 통해, 각 상태는 클래스로 분리시켜 표현한다. State pattern 적용 아래 예는 스타크래프트의 시즈탱크의 시즈모드 활성화, 비활성화를 State 패턴을 적용해본 것이다. 시즈탱크의 시즈모드는 멱등성을 가진다. 즉, 시즈탱크는 시즈모드가 활성화 됐을 때 시즈모드를 할 수 없고 시즈모드 비활성화만 할 수 있다. 반대로 비활성화 된 경우 시즈모드 활성화를 할 수 있지만 비활성화는 할 수 없다. 이런 구현을 state 패턴으로 할 수 있다. 또한 같은 공격(attack) 메소드라 할지라도 시즈모드 활성화, 비활성화 상태에 따라 공격하는 방식이 다른데 이런 구현도 가능하..

Design Pattern 2020.04.28

Command Pattern, 커맨트 패턴

커맨트 패턴은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용할 때 유용하다. 아래 타입스크립트 코드를 보자. 예를 들어, 스타크래프트에서 attack 버튼과 move 버튼이 있을 경우, attack, move 등의 기능을 수정하기 위해 button 클래스를 직접 수정해야 해서 즉, onPressed 메소드를 수정해야 하므로 OCP를 위반하게 되는 것이다. type Command = 'attack' | 'move'; class Button { private attack: Attack; private move: Move; private command: Command; constructor(command: Command) { this.a..

Design Pattern 2020.04.13

Singleton pattern, 싱글톤 패턴

싱글톤 패턴이란 Singleton pattern(싱글톤 패턴)은 인스턴스가 오직 하나만 생성되고, 어디서든지 이 인스턴스에 접근할 수 있게 하는 디자인 패턴이다. 객체를 생성하는 과정 없이 static method인 getInstance로 인스턴스를 바로 사용한다. 스타크래프트의 SCV가 Mineral, Gas를 수집하고, 사용하는데 전역적으로 사용되는 객체인 자원 Mineral과 Gas는 Singleton pattern으로 표현될 수 있다. 이를 다음과 같이 표현할 수 있겠다. 클래스 다이어그램 Resource를 추상클래스로 두고 Mineral과 Gas는 상속 받는다. 메소드의 행위는 같고 자원의 속성 값(amount)만 다르기 때문이다. 코드 타입스크립트 코드로 나타내면 다음과 같다. Main 함수에..

Design Pattern 2020.04.02

Strategy pattern, 스트레이티지 패턴

Strategy pattern 이란 컴퓨터 프로그래밍에서 Strategy pattern(스트레이티지 패턴) 혹은 Policy pattern은 런타임에 알고리즘을 선택할 수 있는 behavioral(행위) 소프트웨어 설계 패턴이다. 코드에 알고리즘을 직접 구현하지 않고, 사용할 알고리즘을 런타임에 수신되도록 한다. Strategy는 알고리즘을 사용하는 클라이언트와 독립되도록 한다. Strategy pattern을 스타크래프트의 테란 유닛을 typescript로 구현 하는 예로 설명한다. 간단히 설명하기 위해 공격 가능한 유닛 'Marine'과 'Ghost'를 구현해볼 예정이다. 'Marine'은 체력이 40, 크기는 소형, 공격형은 일반형이다. 'Ghost'는 체력이 45, 크기는 소형, 공격형은 진동형이..

Design Pattern 2020.04.01
반응형