2025/04/18 3

관찰자 패턴

옵저버패턴이라고도 불리는 이 패턴은 아주 흔하게 사용된다.C#에서는 event 로 이미 사용하고 있던 패턴이다. 이는 상관없는 코드 덩어리들의 결합도를 낮추기 위함인데, event에 함수를 등록해 놓으면 특정상황 발생 시, 알아서 함수를 실행 시켜준다. event DeathEvent;void playerDeath(){ DeathEvent.Invoke();}class uimanager{ public uimanager() { DeathEvent += UpdateUI; } UpdateUI(){}}이렇게 += 로 등록할 수 있다. 그러면 플레이어가 죽어서 playerDeath 함수가 실행되면 DeathEvent에 함수를 등록한모든 클래스에서 해당 함수가 실행된다. 이 때, 등록한..

경량 패턴

경량패턴은 메모리 최적화를 위한 패턴이다. 많은 객체를 생성해야할 때, 에를 들어, 나무 오브젝트를 생성할 때, texture와 model은 동일하지만 위치와 색 등을 바꿔 숲을 만들 수 있다. 이 때, 100개의 나무라면 텍스처와 모델도 100개가 생성되는데, 동일한 이 백개를 공유데이터 1개로 대체하여 메모리를 최적화하는 것이다. 이 때, texture, model 같은 공유되는 데이터를 내부상태라 하고, 위치, 값 등 달라지는 변수를 외부상태라 한다. 내부 상태는 모든 나무 객체가 참조하게끔 하고 외부상태만 설정하게끔 하면 된다. 타일도 마찬가지로 고유한 타일의 값, 텍스처, 이 타일위에서의 캐릭터 이동속도 등은 변하지않는다. 그렇지만 위치는 매번 다르다. 따라서 각 타일마다 객체를 하나씩 ..

명령 패턴

작업의 요청자와 수행자를 분리시켜주는 디자인 패턴이다. 때문에 결합도를 낮추고 큐나 스택을 이용해 명령 취소, 되돌리기 등의 기능도 쉽게 구현할 수 있다. 상위 클래스인 Command라는 것을 만들고 멤버함수로 execute 라는 가상함수를 만든다. 그리고 그 하위클래스에서 이를 오버라이딩해서 다른 곳에서 execute를 실행한다. 따라서 요청자는 이 작업에 대해서 실행해줘라고만 하고, 수행자인 Command의 하위클래스는 로직을 실행하게 된다 . 이는 게임개발에서 사용자입력, ai 행동, undo, redo 등 사용된다. public interface ICommand{ void Execute();}public class MoveCommand : ICommand{ private Charac..