일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- codility
- 자료구조
- 다이나믹프로그래밍
- 운영체제
- DirectX12
- 타입 객체
- 그리디알고리즘
- 렌더링 파이프라인
- 멀티쓰레드
- 백준
- 그리디 알고리즘
- Direct12
- 쓰레드
- I/O장치
- 파일시스템 구현
- 락
- 디자인패턴
- 알고리즘
- DirectX 12
- OS
- 병행성 관련 오류
- 컨디션 변수
- 프로그래머스
- 동적계획법
- 스케줄링
- 병행성
- 다이나믹 프로그래밍
- directx
- 영속성
- 멀티프로세서
- Today
- Total
목록Game Design Pattern, Logic (13)
기록공간
"오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공합니다." (GoF의 디자인 패턴 181p) 이번 장은 어떻게 하면 패턴을 안 쓸 수 있는지를 보여준다는 점에서 다른 장과는 정반대다. 싱글턴 패턴은 의도와는 달리 득보다는 실이 많다. GoF도 싱글턴 패턴을 남용하지 말라고 강조한다. 워낙 남용되는 패턴이다 보니 이 장에서는 싱글턴을 피할 방법을 주로 다루겠지만, 그래도 우선은 싱글턴 패턴에 대해서 살펴보자. 싱글턴 패턴 GoF의 디자인 패턴에서 발췌한 싱글턴 요약을 쉼표 기준으로 나눠 각각 살펴보자. 오직 한 개의 클래스 인스턴스만 갖도록 보장 인스턴스가 여러 개면 제대로 작동하지 않는 상황이 종종 있다. 외부 시스템과 상호작용하면서 전역 상태를 관리하는 클래스 같은..

"원형이 되는(Prototypical) 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성합니다." (GoF의 디자인 패턴 169p) 이번 장에서는 프로토타입에 대해서 다루기도 하지만, '프로토타입' 용어와 개념이 어떻게 유래되었는지도 함께 다룬다. 우선 패턴부터 살펴보도록 하자. 프로토타입 디자인 패턴 몬스터에도 종류가 존재한다. 한 개체에서도 여러 종류로 몬스터가 나뉠 수 있다. 게임에 나오는 몬스터마다 Ghost, Demon, Sorcerer 같은 클래스를 만들어보자. class Monster { // 기타 등등.. }; class Ghost : public Monster {}; class Demon : public Monster {}; class S..

"객체 사이에 일 대 다의 의존 관계를 정의해두어, 어떤 객체의 상태가 변할 때 그 객체의 의존성을 가진 다른 객체들이 그 변화를 통지 받고 자동으로 업데이트될 수 있습니다." (GoF 디자인패턴 382p) 관찰자 패턴은 가장 널리 사용되고 있고 흔하게 볼 수 있다. 그래서 자바에서는 핵심 라이브러리(java.util.Observer)에 들어가 있고, C#에서는 event 키워드로 지원한다. 게임 개발 입장에서 관찰자 패턴을 어떻게 써먹을 수 있을지 우선 예를 한번 들어보자. 업적 달성 업적 시스템은 요즘 중요하기도 할 뿐더러 최근에 많은 게임에서 쓰이고 있다. 업적 시스템을 추가한다고 해보자. 게임에서 업적은 종류가 정말 광범위하고 달성 방법도 다양하기 때문에 깔끔하게 구현하기가 정말 어렵다. 조금만 ..

"공유(Sharing)를 통해 많은 수의 소립(Fine-Grained) 객체들을 효과적으로 지원합니다." (GoF의 디자인 패턴 311p) 숲에 들어갈 나무들 우선 경량 패턴이 어떠한 상황에 쓰이는지부터 알아보도록 한다. 일반적으로 나무가 울창하게 있는 숲을 구현할 때에는 '경량' 패턴으로 종종 구현하게 된다. 구비구비 뻗어 있는 숲을 글로는 몇 문장으로 표현이 가능하지만, 실시간 게임으로 구현하는 것은 전혀 다른 이야기이다. 숲이다 보니 수천 그루가 넘는 나무마다 각각 수천 폴리곤의 형태로 표현해야 한다. 설사 메모리가 충분하다고 해도, 이런 숲을 그리기 위해서는 전체 데이터를 CPU에서 GPU로 전달해야 한다. 나무마다 필요한 데이터를 코드로 표현하면 다음과 같다. class Tree { privat..

"요청 자체를 캡슐화 하는 것입니다. 이를 통해 서로 다른 사용자(client)를 매개변수로 만들고, 요청을 대기시키거나 로깅하며, 되돌릴 수 있는 연산을 지원합니다." (GoF의 디자인 패턴 311p) 명령패턴을 매우 간결하게 요약하면 다음과 같다. 명령 패턴은 메서드 호출을 실체화(reify) 한 것이다. 실체화는 '실제하는 것으로 만든다'라는 뜻으로, 프로그래밍 분야에서는 무엇인가를 '일급(first-class)'으로 만든다는 뜻으로 통한다. 즉, 어떤 개념을 변수에 저장하거나 함수에 전달할 수 있도록 데이터, 즉 객체로 바꿀 수 있다는 것을 의미한다. 여기에서 명령 패턴을 '메서드 호출을 실체화한 것'이라고 한 것은 함수 호출을 객체로 감쌌다는 의미이다. GoF에서는 '명령 패턴은 콜백을 객체지향..