C#41 게임 디자인 패턴 9. 타입 객체 패턴 (Type Object Pattern) 일반적인 상속 구조..?타입 객체 패턴의 기본적인 형태주의사항팩토리 메서드 패턴과 섞어보기타입 객체의 상속 구현하기어떻게 사용할 것인가?다른 패턴과의 차이점 저번 시간 하위 클래스 샌드박스의 정리를 위해 해당 내용을 책에서 읽던 도중, ”요즘은 여러 프로그래머 집단에서 ‘상속’을 나쁘게 생각한다.”는 내용이 있었다. 왜 상속을 안좋게 생각하는 거지?상속으로 코드의 재사용성을 늘릴 수 있는 것 아닌가? 라고 생각했었다. 그러나 우리가 반사적으로 생각하는 상속 구조의 클래스들 역시 유지보수 면에서 문제가 발생하기 때문에 어느정도 특성을 공유하는 클래스들을 구현할 때 개발자들은 상속을 통해 만드는 것이 아니라 지금 소개하는 타입 객체 패턴을 통해 만들게 된다. 지금부터 일반적인 상속 구조와 타입 객체 패턴 간.. 2023. 11. 2. 게임 디자인 패턴 8. 하위 클래스 샌드박스 (Subclass Sandbox Pattern) 하위 클래스 샌드박스 패턴언제 써야 하는가?깨지기 쉬운 상위 클래스 (Fragile Base Class) 하위 클래스 샌드박스는 서로 상속 관계에 있는 두 클래스 사이에서 부모와 자식 어느 곳에 주요 기능을 넣을 건지에 대한 것을 이야기 한다. 책에서는 다음과 같이 이야기하고 있다. 상위 클래스가 제공하는 기능들을 통해서 하위 클래스에서 행동을 정의한다. 하위 클래스 샌드박스 패턴 캐릭터마다 다른 효과를 가진 공격 기능을 구현한다고 해보자. 부모 클래스가 되는 공격 클래스를 구현하고 그것을 상속받아 각 캐릭터 공격 클래스를 구현한다고 해보자. 각 캐릭터 공격마다 아주 열심히 상세하게 클래스를 작성하면 다음과 같은 문제들이 발생한다. 중복 코드가 많아진다.거의 모든 게임 코드가 내가 작성하는 클래스와 커플.. 2023. 11. 1. 게임 디자인 패턴 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. Unity 코루틴(Coroutine)으로 딜레이 구현하기 기본 형태물리 프레임으로 딜레이 주기시간으로 딜레이 주기그 외의 다양한 딜레이들 게임을 만들다보면 딜레이가 필요하다. 시전 모션이 끝나면 공격이 들어간다던지, 물리적인 판정 자체에 몇 프레임 씩 딜레이를 넣을수도 있다. 그러기 위해서 보통 코루틴을 사용한다. 인보크를 쓰면 안되나요? 라고 물어볼 수 있는데, 인보크 대신 코루틴을 사용하는 이유는 다음 게시글에 잘 정리되어 있다. Unity 인보크(Invoke)와 코루틴(Coroutine) 정리들어가며인보크 기본인보크 사용방법InvokeRepeatingCancelInvokeIsInvoking인보크 주의점코루틴코루틴 사용 방법StartCoroutineStopCoroutine 들어가며이번에 했던 프로젝트를 하고 나서, 가장 많이 느꼈던 점은 Invoke를 너무.. 2023. 9. 14. 이전 1 2 3 4 5 다음