[Design Pattern] 상태 패턴 (State Pattern)
·
Design Pattern
1. 상태 패턴상태 패턴은 상태가 하나의 클래스가 되어해당 상태일 때 각 동작들을 어떻게 처리할지 정의하고다른 클래스는 상태에 의존하여 각 행동(격발, 스왑, 재장전)의 역할을 위임하는 패턴을 의미한다. 2. 상태 패턴은 언제 사용될까?switch(CurrentState){ case Idle: // ... case Attacking: // ... case Reloading: // ... case Stunned: // ... case Rolling: // ... case Aiming: // ...}위는 상태 분기 방식의 코드이다.상태가 적을 경우 코드가 간단하여 빠르게 구현 가능하며디버깅 시 상태별 분기가 한 곳에 모여 있어 추적하기 쉽다. 그러나 상태가 많아질수록 swit..
[Design Pattern] 반복자 패턴 (Iterator Pattern)
·
Design Pattern
1. 반복자 패턴 (Iterator Pattern)리스트, 스택, 트리, 그래프 등을 컬렉션(Collection)이라고 한다.반복자 패턴은 컬렉션을 외부에 노출하지 않고, 컬렉션의 요소들을 하나씩 순회할 수 있도록 하는 행동 디자인 패턴이다.  2. 문제 상황 (Why Iterator?)컬렉션마다 순회하는 로직이 다를 수 있다.로직에서 컬렉션을 변경할 때 순회하는 로직이 다르기에 코드가 함께 수정되어야 한다. 3. 해결 방안반복자 패턴을 사용하여컬렉션 종류에 상관없이 순회 가능한 로직을 외부에 제공한다. 4. 반복자 패턴 클래스 구조반복자 인터페이스 (IIterator)외부에 호출될 함수를 정리한다.순회를 하기 위해 HasNext() 다음 값이 있는지, Next() 다음 값으로 이동하는 함수를 가상함수로..
[Design Pattern] 상태 패턴 (State Pattern)
·
Design Pattern
1. 상태 패턴 (State Pattern)상태에 따라 다양한 동작을 수행해야할 경우각 상태 클래스를 만들어 수행할 동작을 위임하는 패턴이다. 2. 상태 패턴의 클래스 구현 방향각 상태 클래스는 자신의 동작을 캡슐화하고(인터페이스로 구현)캐릭터(컨텍스트)는 현재 상태 객체에 작업을 위임한다. 3. 상태 패턴 호출 구조캐릭터(컨텍스트)는 현재 상태(StateA)를 설정한다.캐릭터(컨텍스트)는 수행할 행동을 상태 객체에게 위임한다. - Request()상태 객체는 작업을 수행한다.상태 객체는 작업을 수행하고 컨텍스트의 상태 또한 변경할 수 있다. - setState(StateC)캐릭터(컨텍스트)는 수행할 행동을 변경된 상태 객체에게 위임한다. - Request()상태 객체는 작업을 수행한다. 4. 상태 패턴..
[Design Pattern] 전략 패턴
·
Design Pattern
1. 전략 패턴전략 패턴은 런타임에원하는 전략으로 자유롭게 교체하고 실행할 수 있는 디자인 패턴이다. 언제 사용해야 할까?AWeaponClass::Attack(){ if (WeaponType == Sword) // 검 공격 else if (WeaponType == Bow) // 활 공격 else if (WeaponType == Staff) // 마법 공격}무기의 타입에 따라 다른 공격을 수행하고 있다.해당 코드의 문제는 무기의 타입이 많아질수록분기문이 점점 많아지고 가독성이 떨어지게 된다. 어떻게 바꿀 수 있을까?여기서 전략패턴을 구현해볼 수 있다.AWeaponBase* Weapon = GetWorld()->SpawnActor();// Bow 전략 적용IAttackS..
[Design Pattern] 디자인 패턴
·
Design Pattern
1. 디자인 패턴이란?소프트웨어 설계에서 자주 발생하는 문제를 해결하기 위한 일반적인 솔루션이다. 2. 디자인 패턴이 왜 중요한가?1. 문제 해결의 일관성반복되는 문제에 대해서 일관되게 해결할 수 있다.문제에 대해 공통적으로 생각할 수 있다.공통적으로 생각하다보니 서로 다른 의견을 좁히는 과정이 생략될 수 있다.2. 코드 가독성 및 유지보수성사람들이 고민해서 만들었기에 코드의 구조가 명확해진다.코드의 구조가 명확해짐으로서 가독성이 올라간다.협업하는 사람들이 쉽게 이해할 수 있다.3. 코드 재사용성여러 프로젝트에서 재사용이 가능하며, 시간과 노력이 절약된다.4. 코드 확장성설계 변화에 유연하게 대응할 수 있다.5. 공통 언어개발자들 간의 공통 언어로 사용되어, 의사소통을 더 명확하고 간결하게 만든다. 3...