여러 에이전트가 사용 가능한 FSM 1. 일반화 프로그래밍을 이용한 State Class 이전의 State Class는 한 클래스 형식의 에이전트만 사용 가능. 따라서 클래스나 메소드 내부의 내용은 같지만 사용되는 데이터 형식이 다를 때 사용하는 일반화 프로그래밍을 활용해 재사용 가능하게 변경. 2. 일반화 프로그래밍을 이용한 Student 클래스 (에이전트 클래스) 맨 아래 부분에 Student가 가지고 있는 상태를 저장하는 states, currentState 변수에 한정 매개변수를 지정해줘야 한다. 3. 일반화 프로그래밍을 이용한 StudentOwnedStates 네임스페이스 (에이전트의 동작 클래스들) State Class를 일반화 시켜주었기 때문에 StudentOwnedStates 네임스페이스 내부에 존재하는 State Class를 상속받는 메서드들에 한정 매개변수를 지정해주어야 한다. 4. StateMachine
하나의 에이전트가 사용 가능한 FSM 상태 패턴은 객체의 상태에 따라 동작을 다르게 처리하는 디자인 패턴 에이전트가 취할 수 있는 동작을 클래스로 구현, 이 때 모든 상태 클래스는 공통된 기반 클래스를 상속받아 자료형을 통일 에이전트의 상태를 바꿔주는 메소드 구현 : ChangeState() 각 상태는 보통 FSM의 유연성을 위해 상태로 진입할 때(Enter)나 상태에서 나갈 때(Exit) 취하는 행동에 대해 정의되기를 원함. 1. State 클래스 (공통 기반 클래스) 2. Student 클래스 (에이전트 클래스) 3. StudentOwnedStates 네임스페이스 (에이전트의 동작 클래스들) **출처 : 고박사의 유니티 노트 - FSM2 [(링크)](https://www.youtube.com/watch?v=4rmf0S885X4&t=96s&ab_channel=%EA%B3%A0%EB%B0%95%EC%82%AC%EC%9D
일반화(Generic) 프로그래밍 일반화의 장점 일반화 대상 정의 시 사이에 일반화 대상에 대해 작성 후 사용하므로 데이터 파악 용이 박싱, 언박싱 과정에서 소모되는 불필요한 연산 하지 않아 연산 속도 빠름. 위와 같이 object 형식을 이용하면 여러 데이터를 하나의 변수에 저장 가능하지만 박싱 및 언박싱 작업으로 인해 속도 저하, 데이터 형식 명확하게 파악 불가능 등의 단점 발생. 일반화 메소드 데이터 형식에 T(형식, Type) 기호를 사용 메소드 이름 뒤의 사이에 T를 넣고, 메소드 호출 시 T 대신 사용할 데이터 형식 입력. => 메소드 내부의 모든 T가 해당 데이터 형식으로 변경됨. 위와 같이 매개변수의 데이터 타입으로 T에 어떤 데이터 형식을 사용하는지 알기 때문에 형식 매개변수로의 인수 전달 생략 가능. 즉, Attack(slime) == Attack(slim