CS/DesignPattern 15

[DesignPattern] Service Mediator Pattern

서비스 소비자와 서비스 제공자간을 중개하여 서로 직접적인 커플링 없이 상호작용 할 수 있도록 한 패턴1. 서비스 인터페이스 정의public interface AudioService { void playSound();}2. 구체적인 서비스 구현public class MusicService : AudioService{ public void PlaySound() { }}public class BGMService : AudioService{ public void PlaySound(AudioClip audio) { }}3. 서비스 로케이터 구현public class ServiceLocator { private Dictionary serviceRegistry = new D..

CS/DesignPattern 2024.11.08

[DesignPattern] 컴포넌트 패턴

Component패턴을 왜 쓰는가?플랫포머 게임을 만든다고 가정하면,플레이어가 걷고 뛰고, 공격하고, 맞고, 맞아서 hp가 소모되고, 물리를 체크하고, 사운드를 틀어주고, 애니메이션을 실행하고....엄청나게 많은 행동을 Player 클래스하나에서 한다면, 엄청나게 길어지고 복잡해짐이를 해결하기 위한 패턴이 Component 패턴임유니티에서는 Monobehaviour를 상속받는 클래스는 컴포넌트로 사용할 수 있도록 되어 있음.Inspector창의 컴포넌트가 이 컴포넌트임.언제 쓸 것인가?한 클래스에서 너무 많은걸 하고 있을 때 역할을 나누기 위해서

CS/DesignPattern 2024.11.05

[DesignPattern] BuilderPattern

복잡한 객체들을 단계별로 생성 할 수 있도록 하는 생성 디자인 패턴점층적 생성자를 제거하기 위한 방법예시public class Sandwitch{ private int cheeze; private int tomato; private int bread; private int jalapeno; public Sandwitch (int bread) { this.bread = bread; } public Sandwitch(int bread, int tomato) { this.bread = bread; this.tomato=tomato; }}윽 벌써 귀찮다. 이렇게 생성자를 한땀한땀 만드는 점층적 생성자를 만들어야 하는 상황..

CS/DesignPattern 2024.10.25

[DesignPattern] 타입객체

TypeObject Pattern?클래스 하나를 인스턴스 별로 다른 객체형으로 표현할 수 있게 만들어, 새로운 클래스들을 유연하게 만들 수 있게 하는 방법.예제다양한 몬스터를 생성type Object calss 와 typed object class 정의type object object instance : 논리적으로 다른 타입을 의미typed object : 자신의 타입을 나타내는 타입 객체를 참조함.기본적인 타입객체 패턴public class Breed{ private int _health; private float _attack; pubilc Breed(int health, float attack) { health = health; _attack = att..

CS/DesignPattern 2024.10.23

[DesignPattern] 이중버퍼

Double Buffer Pattern이란?여러 순차 작업의 결과를 한번에 보여주기 위해 사용하는 패턴.그래픽스에서 주로 사용하지만, 그 외에도 사용할 곳이 있을 까?어떤 상태를 변경하는 코드가, 동시에 지금 변경하려는 상태를 읽는 경우. 물리나 인공지능 같이 객체가 서로 상호작용할 때 자주 발생예시그래픽스에 대한 예시는 너무 뻔하고 기본적으로 아는 내용이기 때문에 생략한다.그래픽스가 아닌 다른 코드에서 사용할 수 있다는 점이 흥미로워 책의 내용을 남긴다.액터들이 돌아가면서 서로 때리는 장면을 보여주어야 한다고 가정.조건은 모든 배우가 한번에 업데이트 되는 것 처럼 보여야 한다면?public class Actor{ public bool isSlaped {get;private set;} pub..

CS/DesignPattern 2024.10.21

[DesignPattern] 프로토타입 패턴

Prototype Pattern이란?어떤 객체가 자기와 비슷한 객체를 스폰 할 수 있도록 하는 패턴예제몬스터 스포너public class Monster{}public class Ghost : Monster{}public class Demon : Monster{}public class Sorcerer : Monster{}public class Spawner{ public virtual Monster SpawnMonster(){}}public class GhostSpawner : Spawner{}public class DemonSpawner : Spawner{}애초에 요즘은 몬스터를 각기 다른 클래스로 만들지도 않지만, 각각의 몬스터에 따라 스포너를 만들어줘야하는 문제가 생긴다.Monster에 추상 매..

CS/DesignPattern 2024.10.14

[DesignPattern] 경량 패턴

Flyweight Pattern이란?객체들이 공유하는 데이터들을 분리해, 공유하게 만들어 메모리사용량을 줄이는 패턴공유할 수 있는 데이터를 고유상태(intrinsic state) / 자유문맥(context-free) 상태라고 함인스턴스 별로 값이 다른 데이터는 외부상태(extrinsic state)라고 한다.예제 - Terrain열거형으로 사용한다면enum Terrain{ TERRIN_GRASS, TERRAIN_HILL, TERRIN_REIVER}class World{ private Terrain tiles_[WIDTH][HEIGTH]; public int GetMovementCost(int x, int y){ switch(tiles_[x][y]){ ..

CS/DesignPattern 2024.10.14