제너릭 t에 대한 중간 알아가기
디자인패턴종류-----------
-전략패턴
상태를 다양하게 정의하는것과 다르게
동일 목적 알고리즘의 선택적용을 하게만든다.
추상적인 접근점(인터페이스)를 만들어 서로 교환 가능하도록 하는 패턴
예를들자면 타이핑하고 찾기 버튼을 누르면 검색하는 기능이있는데
그 기능들이 탭으로 분류되어 어떤건 주소, 어떤건 사람, 어떤건 동물 이런식으로
필터할수있는게 다르다면
전략패턴을 사용한다.
fps에서 권총을들지, 칼을들지, 수류탄을 들지 선택하는 상황에서 사용하면좋다.
전략패턴은 작업을 수행하기 위해 다양한 전략을 선택하나 객체 내부상태는 동일하게유지됌
외부의 값이 패턴에의해 다른결과를 낸다.
마치 주방장이 레시피를 가지고 요리를 하는 것과같다
관리하는 클래스가 객체 자신을 동작을 구현하는 클래스에 넘겨주지는 않지만
관리하는 클래스의 일부 정보(도구)를 인자로 넘겨줄 수 있다.
그리고 그 인자를 받아 동작을 구현하는 클래스는 동작에대해서 정의하지만(보통하나의메서드)
스스로 진입시점, 동작, 전이시점까지 전부 책임지지는않는다
그몫은 오로지 관리클래스인 객체가 혹은 클라이언트가(gamemanager같은) 타이밍에 맞춰서 행한다.
그렇다면 전략패턴이다.
전략패턴은 동작만을 다루니까...
언제 초기화하고, 언제 동작을 중지할지 같은 일들은 클라이언트나 context가 담당한다
단순행동교체만 필요하고 진입,퇴장로직이 많지않을때는 전략패턴을 쓰면좋다.
-스테이트패턴
컨텍스트라는 객체의 상태를 바꿔주는 클래스만듬
이안엔 상태변경, 현상태 출력등을 담고, 가장 처음 출력되는상태로 초기화시키기도함
객체의 다양한 행동을 하나로 정의하는 인터페이스를 만듬
상태별로 다른행동을 하는 클래스를 만듬
상태별로 행동인터페이스를 상속받아 특정 상태에대해 코드를짬
상태패턴은 객체의 상태에 따라 행동이 변경되도록 설계하는 디자인패턴으로
각각의 상태를 별도의클래스로 캡슐화하여 동작을 정의하는만큼
새로운 상태를 추가할때 기존코드를 모두 수정하지않고, 클래스만 추가하면된다.
(확장성이 있고 유지보수가 용이한 코드를 구현한다)
AI의 상태를 만들때 쓸수있다.
상태패턴은 하나의 객체가 상태에 따라 내부적으로 상태를 변경함.
패턴에의해 내부의값이 다른결과를낸다.
관리하는 클래스가 객체 자신을 각 상태를 구현한 클래스에 넘겨줘서
상태는 곧 객체자신에 대한 상태로 인지하게되고
그 상태클래스라던가 관리하는 클래스가
언제 진입하고, 무엇을 할것이고, 언제 다른 동작으로 전환할것이다 까지 책임을 진다면
라이프사이클 계약에 따른 것이며
이를 상태패턴이라고 부른다.
상태패턴이랑 전략패턴은 비슷해보이지만 다르다.
어떤상황이냐에따라 동작을 관리하는 주체가 둘다 관리클래스 context가 될수있기때문에
언뜻같아보이기도한다. 그러나 라이프사이클을 가지고있는것이 상태패턴이다.
전략패턴은 인터페이스차원에서 계약한 메서드 동작만 가진다.상태패턴은 인터페이스차원에서
이미 enter/execute/exit 메서드가 약속되어있다.
Context가 ChangeState(next) 등을 호출할때 내부적으로 이 행동을 다 수행한다.
전략패턴은 교체타이밍,정리코드호출은 별도로 신경써줘야하나
상태패턴은 이걸 한덩어리로 약속해서 진행하는것이다.
Enter : 이상태에 들어올때 딱한번만 실행되는 초기화코드
Excute : 이 상태에 있는동안 매프레임, 혹은 주기마다 반복해서 실행되는 본작업
Exit : 이상태를 떠날때 딱 한번만 실행되는 정리코드
즉, 뭔가 진입, 동작, 퇴장이 매끄러워야하고 진입과 퇴장의 조건들이나 상태가 다르다 그러면
상태패턴을 사용하는것이좋다. 그외에 동작만 좀 다르다면 전략패턴을 이용하는게좋다.
그밖에도
옵저버 패턴
facade (navmeshagent 래핑) 패턴
composite 또는 groupManager 패턴
프록시패턴
팩토리패턴
오브젝트풀 패턴
같은것들이 있다.
-----------
스테이트머신
: 상태와 전이라는 아주 간단한 수학적 모델이다. 패턴과는 좀 다르며 오히려 초기적인 개념이다.
fsm(유한상태기계, Finite State Machine)
구성요소
상태: 시스템이 있을수있는 서로다른 모드(idle, move, attack)
이벤트/트리거: 상태전이를 일으키는 외부신호(예: 플레이어 감지, 체력 0)
전이: 어떤상태에서 어떤이벤트가 발생하면 다음 상태로 간다 는 규칙
초기상태: 시작할때 시스템이 어떤상태인지
비유하자면
교통신호등을 예를들어,
상태 = { 빨강, 초록, 노랑}
트리거 = "타이머 울림"
전이 = (빨강 + 타이머) -> 초록, (초록+ 타이머) -> 노랑, ....
특징- 무엇(which state)과 언젠(when to transition)만 정의
상태 내 세부행동(Behavior)은 별도다
라이프사이클은 없으며, 의도는 말그대로 상태->전이모델이므로
Context에서 또는 클라이언트에서 전이를 관리한다
상태별 행동은 외부코드에서 구현한다
상태패턴이 이 FSM을 객체지향적으로 구현한 방법이다.
FSM 개념인 상태와 전이를 따르면서
Enter/Exit 같은 초기화, 정리단계와
Excute 반복수행 단계를 만들었으며
전이로직을 한군데에서 모아 관리하도록하였기 때문이다.
상태머신에는
switch문/if문
(stat, Trigger) -> NextState 의 딕셔너리 등이 있다.
'Unity 개발 공부' 카테고리의 다른 글
| [내배캠] 본캠 14일차. 데이타 클래스와 서브클래스, 배열과 리스트 (0) | 2025.04.24 |
|---|---|
| [내배캠] 본캠 13일차. 문자열 처리, 깃허브세팅법,제너릭T와 패턴매칭, 생성자 (5) | 2025.04.23 |
| [내배캠] 본캠 11일차.전역설정,싱글톤,의존성주입, 용어정리 (0) | 2025.04.21 |
| [내배캠] 본캠 10일차. 델리게이트, 클래스타입에 대한 복습 (0) | 2025.04.18 |
| [내배캠] 본캠 9일차. 메서드 연산자 복습 , 그리고 TextRpg 진행과정 (5) | 2025.04.17 |