디자인패턴 7

반복자패턴

반복자패턴이란? 일련의 데이터 집합에서 순차적인 접근을 제공해주는 패턴이다. IEnumerator를 상속받은 순서에 대한 클래스를 만들어주고 그 순서로 컬렉션을 반복할 수 있게 해주는 것이다. 예시로 카드덱 클래스가 있을 때 카드덱에 대한 순서의 의미를 가진 클래스를 구현하고, 그 순서를 받아 커스텀한 순차대로 카드를 출력하는 것이다. 예시코드 using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class Card { public string name; public int cost; public Card(string name, int cost) { this.name = name;..

디자인패턴 2023.11.23

상태패턴

상태패턴이란? 상태패턴은 한 객체가 여러 개의 상태를 가질 때 사용하는 패턴이다. 예를 들어 몬스터가 탐지, 추격, 공격이라는 상태를 가진다고 했을 때 탐지 상태 중 적 발견 시 추격으로 전환, 추격 후 공격범위 안에 들어올 시 공격 상태로 전환 등 특정 조건에 따라 상태가 변경되고 그 객체는 하나의 상태만을 가지고 있을 때 사용된다. 예시코드 using System; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; public interface IStateMachine { void SetState(string name); object GetOwner(); } ..

디자인패턴 2023.11.13

옵저버패턴

옵저버패턴이란? 1대 다수의 관계를 갖는 패턴으로, 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 라고 위키에 쓰여 있다. 즉 간단하게 말해서 1대 다수의 관계의 1의 상태변화를 등록된 모든 관찰자들에게 알리는 것이다. 예를 들어 일시정지 매니저와 일시정지에 적용될 객체들이 있다고 했을 때, 일시정지 매니저의 상태가 일시정지상태라면 이를 관찰하고 있는 모든 객체들 또한 일시정지라는 상황을 감지하고 그 기능을 수행하는 것이다. 사용 예시 코드 using UnityEngine; using System; public interface IPauseable // 일시정지 인..

디자인패턴 2023.11.10

오브젝트 풀링

클래스는 참조타입, 즉 컴포넌트는 참조타입이다. 따라서 힙영역에 할당되며 가비지컬렉터가 시간이 지나고 아무것도 가리키고(즉 null을 가리키는)놈들을 찾아서 해제시킨다. 그 때 가비지컬렉터는 바로바로 해제하는게 아닌 시간이 좀 지난뒤 해제한다. 그 때 유니티의 BohemGC는 비압축 방식이라 힙영역의 메모리를 정렬시키지 않기 때문에 메모리의 단편화가 발생한다. 이점을 해결하기 위해 나온 패턴이 오브젝트 풀링이다. 예시코드를 보자. public class BulletObjectPool : MonoBehaviour { // 오브젝트 풀링 : 빈번한 생성과 파괴는 연산적으로 비효율적이기 때문에 예상하여 미리 만들어두고 활성화/비활성화 함으로서 관리하는 패턴. // 1.일단 미리 만들어둘 놈들을 담아둘 콜렉션(..

디자인패턴 2023.10.05

어댑터 패턴

어댑터 패턴이란? 110볼트를 220볼트로 사용해야할 떄 돼지코를 써서 하듯이 어떠한 행위에 대한 컴포넌트를 만들고 이를 적용시킬 게임오브젝트에 붙여서 사용하는 것. 예시로 장애물이 있을 때 장애물은 피격이 가능한 장애물이 있을수 있고 불가능한 장애물이 있을 수 있다. 이 때 피격이란 어댑터 스크립트를 피격이 가능한 장애물에 붙여서 피격이 가능하도록 만든 것을 예시로 들 수 있다. public class Switch : MonoBehaviour { public List interactionObjList = new List(); private List interactableList = new List(); public void Interaction() { // interactionObj.GetCompone..

디자인패턴 2023.10.03

전략패턴

전략패턴이란 전략패턴이란 행위를 갈아끼우는 패턴이다. 예를 들어 플레이어가 공격이라는 행위가 있을 때 플레이어는 검을 휘두르거나, 총을 쏘는 등 여러가지 공격 행위가 존재할 수 있을 것이다. 그 때 if문이나 switch문으로 행위를 나누는 것이 아닌, 플레이어가 행위 변수를 가지고 있고 추상클래스나 인터페이스로 정의한 공격 행위 클래스들을 갈아끼우는 형식이다. 예시코드 public abstract class TrapStrategy { protected Trap trap; public TrapStrategy(Trap trap) { this.trap = trap; } public abstract void Active(); } public class DefaultTrapStrategy : TrapStrate..

디자인패턴 2023.09.27

템플릿 메소드 패턴

템플릿 메소드 패턴 템플릿 메소드에 virtual 함수들이 들어가고 그 가상함수만 자식 클래스에서 재정의 해주는 패턴이다. 즉 차이가 있는 것만 vritual로 빼주고 공통되는 부분은 그대로 냅두는 것이다. ex) player와 monster라는 클래스가 character를 상속받을 때 둘의 죽음에 대한 기능(Die메소드)를 템플릿 메소드 패턴을 이용해 서로 다르게 쓰여야할 기능만 virtual로 빼서 정의한다. 코드예시) class Character { protected: // 자식한테만 참조가능하게 int hp = 100; int atk; virtual void PostProcessDIe() = 0; // 노출이 되면안됨 public: string name; void SetHp(int value) {..

디자인패턴 2023.08.04