본문 바로가기

Design Pattern

(6)
C# - 옵저버 패턴(Observer Pattern) 1. 정의 ㆍ주제대상(Subject) - 관찰자(Observer)간의 일대다(One-To-Many) 관계. 주제 대상이 불특정 다수의 관찰자에게 통보. ㆍ낮은 결합도(커플링). ㆍ게시-구독(Publish-Subscribe) 관계 한 객체의 상태가 바뀌면 그 객체를 참조하고 있는 다른 객체들에게도 자동으로 바뀐 내용이 갱신되어야 합니다. Concrete : 구상된(생성된) 객체. 2. 구현 유튜브의 구독과 푸시 알림을 게시-구독 관계로 구현해보고자 합니다. ※ 인터페이스 설정 - 구독정보(Subject) // 유튜버가 구현해야할 구독시스템. public interface SubscribeInfo { // 구독 public void Subscribe(Subscriber subscriber); // 구독 취소..
C# - 전략 패턴(Strategy Pattern) 1. 정의 ㆍ특정 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 2. 예시 공통된 부분은 놔두고 차이점을 발생시키는 부분을 캡슐화시켜 사용하는 것을 전략 패턴이라고 합니다. ㆍ기본 계산기가 있고 공학 계산기를 만든다고 할 때, 기본 연산 기능들은 놔두고 공학 계산 부분을 따로 빼서 정의한다. ㆍ커피 머신이 있고, 기본 내리는 방식에 커피마다 내리는 방식을 빼서 정의한다. ㆍ가게 운영을 하는데 손님마다 결재 방식이 다를 때.(특정 할인율, 지불 방식) 등등~ 3. 구현 저는 게임 개발자이니 간단하게 게임 플레이어에 대한 전략 패턴을 사용해보겠습니다. 우선 무기를 바꾸는 부분을 캡슐화하여 사용해보는 예시입니다. ※ 플레이어 클래스 및 무기 인터페이스 선언 // 무기들은 무기를 사..
C#(Unity) - 오브젝트 풀링 라이브러리 유니티 작업에 들어가면 풀링을 사용할 상황이 자주 나오다보니, 매번 만드는 것이 귀찮아 직접 만들어본 스크립트입니다. 라이브러리 정도의 수준은 아니지만 마땅히 떠오르는 단어가 없어 라이브러리라 지칭했습니다. 간단하게 Enum으로 타입을 지정한 뒤 상속만 받으면 쉽게 사용이 가능합니다. 1. 풀링매니저 메인 스크립트 using System.Collections; using System.Collections.Generic; using UnityEngine; using System; // Pooling 할 오브젝트 정보 [System.Serializable] public class MultiplePoolingInfo where T : Enum { public T type; // 풀링 타입 public int ..
C#(Unity) - 다중 오브젝트 풀링 (Multiple Object Pooling) 1. 개요 게임에서 적이나 총알 오브젝트를 관리를 한다고 할 때, 적군에게는 잡병1,2,3... 중간 클래스1,2,3... 등등.. 총알에는 라이플탄, 스나이퍼탄, 샷건탄 등등.. 한 가지 종류가 아닌 경우가 많습니다. 이것들을 위해 각각의 풀링매니저를 생성하기에는 비효율적이니, 열거형인 Enum을 통해 타입을 구분하고 이 타입을 통해 다중 오브젝트 풀링을 구현하겠습니다. 2. 스크립트 구현 3가지 종류가 있는 Enemy를 풀링으로 구현해보는 것이 목표입니다. ※ EnemyType을 열거형으로 선언. public enum EnemyType { Square, Sphere, Capsule, } ※ 풀링할 Enemy의 오브젝트의 정보 [System.Serializable] public class EnemyPo..
C#(Unity) - 오브젝트 풀링(Object Pool) 1. 개요 ㆍ오브젝트를 생성과 제거할 때, Instantiate와 Destroy를 사용해야 합니다. ㆍ하지만 Instantiate와 Destroy는 상대적으로 무거운 작업이고, GC(Garbage Collector)의 대상이기 때문에 메모리 낭비를 할 수 있어 메모리 관리 측면에서도 풀링을 사용해야 합니다. ※ 유니티 매뉴얼에서도 풀링을 통해 가비지를 줄일 수 있도록 권장합니다. 2. 스크립트 구현 using System.Collections; using System.Collections.Generic; using UnityEngine; public class PoolingManager : Singleton { [Header("Pooling Information")] [SerializeField] Gam..
C#(Unity) - 싱글톤 1. 특징 ㆍ스크립트의 인스턴스가 단 하나만 생성되어 있을 때, 어디에서든 이 인스턴스를 통해 접근하기 위한 메소드. ㆍ생성될 때 단 한번의 생성으로, 해당 스크립트에 접근할 때 마다 생성하는 낭비를 막아줄 수 있습니다. ㆍ어디에서든지 접근이 가능하기 때문에 남용하게 된다면 결합도와 의존도가 증가해 객체지향 프로그래밍이 추구하는 방향과는 먼 결과를 낳게 됩니다. ㆍEager, Lazy, Locking, Holder 등 다양한 방식이 있지만 우선은 기본적이고 쉬운 형태인 Eager Singleton 방식만을 서술하겠습니다. 2. 스크립트 ※ 싱글톤 클래스 using System.Collections; using System.Collections.Generic; using UnityEngine; public..