SlideShare a Scribd company logo
1 of 23
Download to read offline
스테이트 패턴 (state pattern) 
-정의 - 객체가 상태를 가지고 있고 현재 상태에 따라 행동이 달라지는 것을 말한다. 
– 어떤 클래스(=객체)는 할 수 있는 행동이 정해져 있고 객체의 상태에 따라 행동이 달 라진다. 
-예제
FSM(Finite State Machine) 
-정의 – 유한 상태 기계 -> 유한한 개수의 상태들로 구성된 간단한 기계 
- 하나의 입력을 받고 그에 대해 “현재 상태에서 다른 어떤 상태”로 전이 
- 게임의 기본 AI에 사용 
-특징 – 유한 수의 상태를 가진다. - 자신의 상태를 시험할 수 있다. (?) 
- 외부로부터 입력을 받는다. - 이산된 시간의 단계에 그 자신의 상태를 변화 시킬 수 있다. 
- 자신의 상태와 외부의 입력에 근거한 일단의 규칙에 따라 자신의 상태를 변화시킬 수 있다. 
-예제 
<유한 수의 상태> 
대기 
탐색 
전투 
도주 
공격
<상태 전이> 
*FSM과 State Pattern 
-얼핏 보면 FSM과 State Pattern은 비슷해 보인다. 
-FSM은 완성품이라면 State Pattern은 완성품을 만들 기술 
-FSM은 if else를 이용해 만들 수도 있다. 
대기 
탐색 
전투 
도주 
공격 
적을 찾기 위해 
탐색상태로 전환 
탐색 중에 적을 발견 전투 상태로 전환 
도주를 성공하거나 이기면 대기 상태로 전환
옵저버 패턴 (Observer Pattern) 
-정의 – 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들(observers)에게 전해지고 자동으로 내용이 갱신되는 일대 다(one-to-many) 양식의 패턴 
-특징 – 데이터의 주체인 ‘subject’를 통해서 여러 객체의 데이터에 접근해서 보다 깔끔한 객체 프로그래밍을 할 수 있다. 
- ‘observer’와 ‘observer’ 혹은 ‘observer’와 ‘subject’ 관계를 느슨하게 만들어 준다. 
- 각각이 바뀌어도 서로에게 영향을 주지 않는다. 
- 새로운 형식의 ‘observer’가 와도 ‘subject’는 바꾸지 않아도 된다. 
- ‘observer’는 언제든지 새로 추가할 수 있다. 
- ‘subject’와 ‘obeserver’는 각각 독립적으로 재사용이 가능하다.
-예제
옵저버 패턴을 구현하기 위해 Observer에는 여러 가지가 있을 수 있는 다는 것을 고려하여 미리 Observer라는 인터페이스를 생성하여 이것을 상속받도록 하였다.
Subject는 각각의 Observer의 정보를 알 필요가 없다. 그렇기 때문에 Subject는 공통으로 사용 될 인터페이스와 Observer의 등록, 해제 함수만 가지고 있으면 된다.
->결과
비지터 패턴 (Visitor Pattern) 
-정의 – 기존 객체 지향 프로그래밍에서 객체가 자신의 오퍼레이션을 가지고 있던 반면 ‘비지터 패턴’은 객체의 구조와 기능을 분리 시키는 패턴이다. 
- 객체의 구조는 변하지 않고 기능만 따로 추가, 확장 시켜야 할 때 사용 
- 비객체 지향 특성을 가진다. 하지만 이를 통해 유연한 객체 지향 프로그래밍을 할 수 있다. 
-언제 사용하는가? 
- 객체 구조는 이미 짜여 있는 데 그 객체에 적용되어야 하는 오퍼레이션이 정해져 있지 않아서 객체의 오퍼레이션을 줄 수 없을 때 
- 자주 변경 될 메소드가 존재할 때 
- 객체 -> Element 오페레이션 -> Visitor 
- Element의 적용되어야 할 메소드는 Visitor에 정의 되어 있다. 
- Elemnet가 Visitor의 메소드를 사용할 때 Element에게 Visitor를 넘겨 준다. (visitor pattern)
-예제 
-Element로 Color 추상 클래스 선언 
-Visitor의 메소드를 호출할 때 Visitor를 받기 위한 accept 함수를 만든다.
-CountVisitor 클래스를 통해 Element가 Accept 했을 때 Visit 함수에 몇 번 호출 되었는지 센다. 
-CallVisitior 클래스를 통해 기존의 Element 내부에 있는 다른 객체에서 Visitor를 accept 했을 때 CallVistitor의 visit를 호출하여 메소드를 호출하는 구성이다.
->결과
Composite Pattern 
-정의 – 객체(혹은 클래스)를 트리구조로 구성한다. 
- 추상적인 상위 클래스를 하나 만들고 그 클래스를 상속 받는 개별 객체와 복합객체(composite)를 만든다. 
- 개별 객체는 실제 사용되는 말단 객체, 복합 객체는 또 다른 객체의 집합을 구성하는 상위 객체 
- 클라이언트에서는 두 객체를 마치 같은 종류의 클래스 다루듯이 사용할 수 있다. 
-특징 – 클라이언트를 단순화 시킨다. 
- 복합객체를 사용하는지 개별 객체를 사용하는지 신경 쓰지 않아도 된다. 
- 새로운 종류의 추상 클래스를 쉽게 추가할 수 있다. 
- 지나치게 범용적인 디자인이 될 수도 있다. (주의) 
-예제 
<트리구조 클래스>
<코드> 
-최상위 Component class
-Component class에서 상속받는 Leaf class -> 실질적인 객체
-Component에서 상속 받은 Composite class 
-Leaf 객체를 담기 위한 함수를 가지고 있다 
-Leaf에 대한 관리와 행동을 정의한다.
-Component 하위 클래스인 composite 와 leaf 클래스 객체 생성 후 값을 넣어 사용한다.
CBD(Component Based Development) 
-정의 – 컴포넌트 기반 개발 
- 시스템을 하나의 일체형으로 구축하지 않고 레고 블록처럼 요소들을 부품화한다. 
-특징 – 소프트웨어의 생산성을 높인다. 
- 이미 사용되고 있는 컴포넌트는 다른 SW에서도 사용되어 여러 번 테스트를 거쳤기 때문에 신뢰도가 높다.

More Related Content

What's hot

NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준영준 박
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기KWANGIL KIM
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링TonyCms
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box대영 노
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지강 민우
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기MinGeun Park
 
언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.Wuwon Yu
 
게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해
게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해
게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해Seungmo Koo
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가Seungmo Koo
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1Hong-Gi Joe
 
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템Chaeone Son
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현Bongseok Cho
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집 게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집 CookApps
 
Unreal animation system
Unreal animation systemUnreal animation system
Unreal animation systemTonyCms
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
 

What's hot (20)

NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
 
언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.
 
게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해
게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해
게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1
 
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집 게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
 
Unreal animation system
Unreal animation systemUnreal animation system
Unreal animation system
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 

Similar to 게임 개발에 자주 사용되는 디자인 패턴

디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13Shin heemin
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준HoJun Sung
 
헤드퍼스트 디자인패턴 - 스테이트
헤드퍼스트 디자인패턴 - 스테이트헤드퍼스트 디자인패턴 - 스테이트
헤드퍼스트 디자인패턴 - 스테이트진화 손
 
디자인 패턴(Observer, visitor)
디자인 패턴(Observer, visitor)디자인 패턴(Observer, visitor)
디자인 패턴(Observer, visitor)세빈 정
 
Android Programming
Android ProgrammingAndroid Programming
Android ProgrammingJake Yoon
 
Android Programming - Input
Android Programming - InputAndroid Programming - Input
Android Programming - InputJake Yoon
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Androidtaeinkim6
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)연웅 조
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern대영 노
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object민태 김
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례SangIn Choung
 
Objective-C Runtime Programming Guide
Objective-C Runtime Programming GuideObjective-C Runtime Programming Guide
Objective-C Runtime Programming GuideSung-Kwan Kim
 
[Swift] Properties
[Swift] Properties[Swift] Properties
[Swift] PropertiesBill Kim
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스Lee Dong Wook
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴Jaeho Seok
 

Similar to 게임 개발에 자주 사용되는 디자인 패턴 (20)

디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준
 
헤드퍼스트 디자인패턴 - 스테이트
헤드퍼스트 디자인패턴 - 스테이트헤드퍼스트 디자인패턴 - 스테이트
헤드퍼스트 디자인패턴 - 스테이트
 
디자인 패턴(Observer, visitor)
디자인 패턴(Observer, visitor)디자인 패턴(Observer, visitor)
디자인 패턴(Observer, visitor)
 
Android Programming
Android ProgrammingAndroid Programming
Android Programming
 
Android Programming - Input
Android Programming - InputAndroid Programming - Input
Android Programming - Input
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Android
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
 
190311 factory
190311 factory190311 factory
190311 factory
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
Uml intro 1
Uml intro 1Uml intro 1
Uml intro 1
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 
Objective-C Runtime Programming Guide
Objective-C Runtime Programming GuideObjective-C Runtime Programming Guide
Objective-C Runtime Programming Guide
 
MEC++ 5
MEC++ 5MEC++ 5
MEC++ 5
 
[Swift] Properties
[Swift] Properties[Swift] Properties
[Swift] Properties
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
 

게임 개발에 자주 사용되는 디자인 패턴

  • 1. 스테이트 패턴 (state pattern) -정의 - 객체가 상태를 가지고 있고 현재 상태에 따라 행동이 달라지는 것을 말한다. – 어떤 클래스(=객체)는 할 수 있는 행동이 정해져 있고 객체의 상태에 따라 행동이 달 라진다. -예제
  • 2.
  • 3.
  • 4.
  • 5. FSM(Finite State Machine) -정의 – 유한 상태 기계 -> 유한한 개수의 상태들로 구성된 간단한 기계 - 하나의 입력을 받고 그에 대해 “현재 상태에서 다른 어떤 상태”로 전이 - 게임의 기본 AI에 사용 -특징 – 유한 수의 상태를 가진다. - 자신의 상태를 시험할 수 있다. (?) - 외부로부터 입력을 받는다. - 이산된 시간의 단계에 그 자신의 상태를 변화 시킬 수 있다. - 자신의 상태와 외부의 입력에 근거한 일단의 규칙에 따라 자신의 상태를 변화시킬 수 있다. -예제 <유한 수의 상태> 대기 탐색 전투 도주 공격
  • 6. <상태 전이> *FSM과 State Pattern -얼핏 보면 FSM과 State Pattern은 비슷해 보인다. -FSM은 완성품이라면 State Pattern은 완성품을 만들 기술 -FSM은 if else를 이용해 만들 수도 있다. 대기 탐색 전투 도주 공격 적을 찾기 위해 탐색상태로 전환 탐색 중에 적을 발견 전투 상태로 전환 도주를 성공하거나 이기면 대기 상태로 전환
  • 7. 옵저버 패턴 (Observer Pattern) -정의 – 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들(observers)에게 전해지고 자동으로 내용이 갱신되는 일대 다(one-to-many) 양식의 패턴 -특징 – 데이터의 주체인 ‘subject’를 통해서 여러 객체의 데이터에 접근해서 보다 깔끔한 객체 프로그래밍을 할 수 있다. - ‘observer’와 ‘observer’ 혹은 ‘observer’와 ‘subject’ 관계를 느슨하게 만들어 준다. - 각각이 바뀌어도 서로에게 영향을 주지 않는다. - 새로운 형식의 ‘observer’가 와도 ‘subject’는 바꾸지 않아도 된다. - ‘observer’는 언제든지 새로 추가할 수 있다. - ‘subject’와 ‘obeserver’는 각각 독립적으로 재사용이 가능하다.
  • 9. 옵저버 패턴을 구현하기 위해 Observer에는 여러 가지가 있을 수 있는 다는 것을 고려하여 미리 Observer라는 인터페이스를 생성하여 이것을 상속받도록 하였다.
  • 10.
  • 11. Subject는 각각의 Observer의 정보를 알 필요가 없다. 그렇기 때문에 Subject는 공통으로 사용 될 인터페이스와 Observer의 등록, 해제 함수만 가지고 있으면 된다.
  • 13. 비지터 패턴 (Visitor Pattern) -정의 – 기존 객체 지향 프로그래밍에서 객체가 자신의 오퍼레이션을 가지고 있던 반면 ‘비지터 패턴’은 객체의 구조와 기능을 분리 시키는 패턴이다. - 객체의 구조는 변하지 않고 기능만 따로 추가, 확장 시켜야 할 때 사용 - 비객체 지향 특성을 가진다. 하지만 이를 통해 유연한 객체 지향 프로그래밍을 할 수 있다. -언제 사용하는가? - 객체 구조는 이미 짜여 있는 데 그 객체에 적용되어야 하는 오퍼레이션이 정해져 있지 않아서 객체의 오퍼레이션을 줄 수 없을 때 - 자주 변경 될 메소드가 존재할 때 - 객체 -> Element 오페레이션 -> Visitor - Element의 적용되어야 할 메소드는 Visitor에 정의 되어 있다. - Elemnet가 Visitor의 메소드를 사용할 때 Element에게 Visitor를 넘겨 준다. (visitor pattern)
  • 14. -예제 -Element로 Color 추상 클래스 선언 -Visitor의 메소드를 호출할 때 Visitor를 받기 위한 accept 함수를 만든다.
  • 15.
  • 16. -CountVisitor 클래스를 통해 Element가 Accept 했을 때 Visit 함수에 몇 번 호출 되었는지 센다. -CallVisitior 클래스를 통해 기존의 Element 내부에 있는 다른 객체에서 Visitor를 accept 했을 때 CallVistitor의 visit를 호출하여 메소드를 호출하는 구성이다.
  • 18. Composite Pattern -정의 – 객체(혹은 클래스)를 트리구조로 구성한다. - 추상적인 상위 클래스를 하나 만들고 그 클래스를 상속 받는 개별 객체와 복합객체(composite)를 만든다. - 개별 객체는 실제 사용되는 말단 객체, 복합 객체는 또 다른 객체의 집합을 구성하는 상위 객체 - 클라이언트에서는 두 객체를 마치 같은 종류의 클래스 다루듯이 사용할 수 있다. -특징 – 클라이언트를 단순화 시킨다. - 복합객체를 사용하는지 개별 객체를 사용하는지 신경 쓰지 않아도 된다. - 새로운 종류의 추상 클래스를 쉽게 추가할 수 있다. - 지나치게 범용적인 디자인이 될 수도 있다. (주의) -예제 <트리구조 클래스>
  • 20. -Component class에서 상속받는 Leaf class -> 실질적인 객체
  • 21. -Component에서 상속 받은 Composite class -Leaf 객체를 담기 위한 함수를 가지고 있다 -Leaf에 대한 관리와 행동을 정의한다.
  • 22. -Component 하위 클래스인 composite 와 leaf 클래스 객체 생성 후 값을 넣어 사용한다.
  • 23. CBD(Component Based Development) -정의 – 컴포넌트 기반 개발 - 시스템을 하나의 일체형으로 구축하지 않고 레고 블록처럼 요소들을 부품화한다. -특징 – 소프트웨어의 생산성을 높인다. - 이미 사용되고 있는 컴포넌트는 다른 SW에서도 사용되어 여러 번 테스트를 거쳤기 때문에 신뢰도가 높다.