디자인 패턴18 게임 디자인 패턴 7. 이중 버퍼 패턴 (Double Buffer Pattern) 테어링 현상 (Tearing)이중 버퍼 (Double Buffer)언제 써야 좋은가?써야하는 상황유의점 이번 글은 이중 버퍼 (Double Buffer) 패턴이다. 개인적으로는 번역이 좀 잘못되지 않았나 싶다.문자 그대로 더블 버퍼 패턴이라고 표현하는 것이 더 맞는 패턴 같다. 테어링 현상 (Tearing) 모니터 화면을 새로고침할 때는 말그대로 버퍼에 들어가 있는 화면 정보를 모니터의 첫번째 픽셀부터 끝 픽셀까지 차곡차곡 찍어주게 된다.이 때 찍어주는 순서가 가로이다. 즉, 첫번째 줄을 왼쪽에서 오른쪽으로 순서대로 찍어주고, 그 다음 줄을 찍는 방식이다. 테어링 현상은 바로 거기서 나타난다. 버퍼에서 정보를 읽어와 화면에 표시를 하던 도중, 버퍼에 있던 정보가 변할 경우 발생하는 문제이다. 이는 같은 .. 2023. 10. 31. 게임 디자인 패턴 6. 상태 패턴 (State Pattern) 유한 상태 기계 (FSM, Finite State Machine)상태 패턴의 구현우리는 이미 상태 패턴을 알고 있다상태 패턴의 형태언제 사용하는가? 상태 패턴이다.오히려 고전적인 구현에 더 많이 쓰이는 듯하다.회로라던지 통신의 로우 레이어라던지. 상태 패턴도 요즘은 좀 남발되는 경우가 많은 것 같다.AI가 대두되고, 이것이 게임에 적용되기 시작하면서 더더욱 그런 것 같다. 유한 상태 기계 (FSM, Finite State Machine) 유한 상태 기계는 상태와 상태 간의 전환을 기반으로 동작하는 동작 기반 시스템이다. 이렇게만 이야기 하면 감이 잘 오지 않는데, 이런 상황을 구해야 한다고 해보자. 청기백기 게임인데, 아래-중간-위가 있다고 해보면 다음 그림의 느낌이 될 것이다. 이 때, 상태 패턴 없이.. 2023. 10. 30. 게임 디자인 패턴 5. 싱글턴 패턴 (Singleton Pattern) 싱글턴 패턴의 주요 특징1. 전역 접근점을 제공2. 오직 한 개의 클래스 인스턴스만 갖도록 보장싱글턴 패턴의 장점장점 1) 한 번도 사용하지 않을 경우 인스턴스를 아예 생성하지 않는다.장점 2) 런타임에 초기화된다.장점 3) 싱글턴을 상속할 수 있다.싱글턴 패턴의 한계전역 변수로부터 생기는 문제사용 목적에 비해 과도한 변형이 들어가는 문제게으른 초기화로부터 발생하는 문제싱글턴 패턴을 안쓰는 방법한 개의 인스턴스만 갖도록 보장하기인스턴스에 쉽게 접근하도록 만들기싱글턴 대신 다른 디자인 패턴 사용하기하위 클래스 샌드박스 패턴서비스 중개자 패턴 아마도 게임에서는 가장 유명하고 많이 다뤄지는 패턴이 오늘 다루는 바로 이 싱글턴 패턴이 아닐까 싶다. 그래서 놀랍게도 책에서는 싱글턴 패턴을 어떻게 해야 안 쓸 수 .. 2023. 10. 27. 게임 디자인 패턴 4. 프로토타입 (Prototype) 들어가며프로토타입을 이용한 오브젝트 생성 구현프로토타입을 이용한 데이터 모델링 들어가며 프로토타입이라는 디자인 패턴은 원형이 되는 인스턴스와 그것의 견본(프로토타입)을 만드는 방식의 패턴이다. 말이 좀 어려운데, 쉽게 설명하자면 객체를 생성하려 할 때 비슷한 객체가 있으면 그것을 복사하여 생성하는 패턴이다. 왜 굳이 복사를 하나요?라고 물어볼 수 있는데, ”생성에 드는 비용 > 복사에 드는 비용”일 경우 복사를 하는 것이 이득 아니겠는가? 프로토타입을 이용한 오브젝트 생성 구현 구현은 다음과 같이 한다. using UnityEngine; public class Monster : MonoBehaviour { public virtual Monster Clone() { return new Monster(); .. 2023. 10. 26. 게임 디자인 패턴 3. 관찰자 패턴 (Observer Pattern) 기본적인 형태의 관찰자 패턴관찰자 패턴의 구현구현 1) event를 이용한 구현구현 2) 인터페이스를 이용한 구현관찰자 패턴의 주의점?사라진 리스너 문제 (Lapsed Listener Problem) 이번엔 관찰자 패턴이다. 사실 C#을 공부한 입장에서, 관찰자 패턴의 내용을 가만히 듣다보면 어딘가 모르게 익숙할 것이다. 상당히 자주 나오는 패턴이고 그 효과 역시 강력하기에 관찰자 패턴의 경우에는 라이브러리나 키워드를 통해 기본적으로 지원하는 경우가 많다. C#에서는 event 키워드가 바로 그것이다. event에 대해 처음 들었다면 아래 글에 간단하게 event에 대해 적혀 있으니 가볍게 읽어보자.[내일배움단] 사전캠프 C# TIL 8. 알아두면 좋을 것들Generic참고) object 타입Generi.. 2023. 10. 25. 게임 디자인 패턴 2. 경량 패턴 (Flyweight Pattern) 들어가며경량 패턴의 구현?방법 1) 스크립터블 오브젝트 (Scriptable Object)방법 2) 정적 배칭 (Static Batching)경량 패턴을 언제 사용할지 모르겠어요 들어가며 경량 패턴.무엇이 가볍길래? 설명에 따르면 사용하는 메모리가 가볍다는 의미이다. 객체의 수가 너무 많아서 메모리의 양에 차지하는 공간이 많을 때, 객체를 가볍게 만들어서 최적화하는 패턴을 경량 패턴이라고 한다. 그래서 가볍게는 어떻게 만드나요?모든 개체가 똑같은 값을 가지고 있는 데이터를 모아서 개체마다 저장하는 것이 아닌 한 곳에다 저장한 후 모든 개체가 그 데이터를 참조하는 방법으로 만든다! 이러한 공통 데이터를 GoF에서는 고유 상태 (intrinsic state) 라고 부르고 그렇지 않는 개별 데이터는 외부 상태.. 2023. 10. 24. 게임 디자인 패턴 1. 명령 패턴 (Command Pattern) 실체화 (reify) 에 대해예제예제 1) 기본 형태의 명령 패턴예제2) 액터를 인자로 넘겨주기예제3) 실행 취소와 재실행 명령 패턴은 GoF에선 요청 자체를 캡슐화한 것이다 라고 표현한다.많이 와닿지 않는다. 게임 프로그래밍 패턴에서도 명령 패턴은 메서드 호출을 실체화한 것이다 라고 표현하는데, 이 역시 와닿지 않는다. 이는 우리가 실체화라는 단어에 대해 잘 알지 못하기 때문이다. 실체화 (reify) 에 대해 실체화라는 말은 몰라도 C#을 공부했었다면 콜백이라는 말은 알 것이다. 대리자나 이벤트가 콜백 함수를 구현하기 위한 문법이기 때문이다. 대리자나 이벤트를 사용하는 것을 보면, 마치 함수 자체를 데이터처럼 사용한다. 이 데이터처럼 사용한다는 것, 즉 객체화 되어 있다는 것이 실체화의 의미라고 보면.. 2023. 10. 23. 게임 디자인 패턴 0. 디자인 패턴에 대해 들어가며레퍼런스앞으로의 글? 들어가며 게임에서뿐만 아니라, 모든 개발 분야에서 사용되는 말 중에 디자인 패턴이라는 말이 있다. 이름만 들으면 굉장히 아트와 관련된 요소일 것 같지만, 너무나도 소프트웨어적인 이야기이다. 디자인 패턴은 객체지향 관점에서 재사용성을 최대화하기 위해 소프트웨어를 어떻게 설계할 지를 약속해놓은 것이다.이름이 정말 직관적이다.말그대로 소프트웨어를 디자인하는데 있어서 문제를 해결하기 위해 자주 나오는 패턴들을 따로 모아 정리한 것이라고 하면 되겠다. 디자인 패턴에 대한 자세한 설명은 다음의 유튜브를 보고 나면 이해가 갈 것이다.개발자라면 "무조건" 디자인 패턴을 배워야한다?좋은 코드를 짜고 싶다면? 디자인 패턴을 배워야한다구? 모든 개발자가 배워야 할 3가지 디자인 패턴..! - 0.. 2023. 10. 23. 이전 1 2 다음