공부/디자인 패턴 6

[디자인 패턴]23개 분류

이제 각각의 디자인 패턴에 대해선 대충 알지만... 디자인 패턴에 대한 큰 시야는 부족한 거 같다! 목적 생성 구조 행동 범위 클래스 (상속 사용) Factory Method Adapter(클래스) Interpreter Template Method 객체 (동적 변경 가능) Abstract Factory Builder Prototype Singletone Adapter(객체) Bridge Composite Decorator Facade Flyweight Proxy Chain of Responsibility Command Iterator Madiator Memento Observer State Strategy Visitor

[게임 프로그래밍 패턴]4. 관찰자(옵저버/Observer 패턴)

4.1. 업적 달성 4.2. 작동 원리 * 관찰자 * 대상 * 물리 관찰 4.3. "너무 느려" * 너무 빠르다고? 4.4. "동적 할당을 너무 많이 해" * 관찰자 연결 리스트 * 리스트 노드 풀 4.5. 남은 문제점들 * 대상과 관찰자 제거 * GC가 있는데 무슨 걱정이람 * 무슨 일이 벌어진 거야? 4.6. 오늘날의 관찰자 4.7. 미래의 관찰자 객체 사이에 일 대 다의 의존 관계를 정의해두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지 받고 자동으로 업데이트될 수 있게 만듭니다. 관찰자 패턴 : 많이 사용되는 MVC(모델-뷰-컨트롤러 구조) 패턴의 기반. GoF 패턴 중에서 가장 널리 사용됨. 워낙 흔하다 보니, 자바 : 아예 핵심 라이브러리(java.ut..

[게임 프로그래밍 패턴]3. 경량 (플라이급, Flyweight 패턴)

공유를 통해 많은 수의 소립(fine-grained, 잘게 쪼갠) 객체들을 효과적으로 지원. 예시 : 판타지 게임의 웅장한 숲이 드러나는 장면 3.1. 숲에 들어갈 나무들 구비구비 뻗어 있는 숲 -> 실시간 게임으로 구현 - 1초에 60번씩 GPU에 몇백만 개의 폴리곤을 전달 - 수천 그루가 넘는 나무 : 각각 수천 폴곤의 형태로 표현됨 - 메모리가 충분하다고 해도, 전체 데이터를 CPU에서 GPU로 전달해야 함 줄기, 가지, 잎의 형태를 나타내는 폴리곤 메시 나무 껍질, 잎사귀 텍스처 숲에서의 위치, 방향 각각의 나무가 다르게 보이도록 크기와 음영 같은 값을 조절할 수 있는 매개변수 # 를 코드로 표현 class Tree { private: Mesh mesh_; Texture bark_; Texture..

[게임 프로그래밍 패턴]2. 명령 (Command 패턴)

요청 자체를 캡슐화하는 것입니다. 이를 통해 요청이 서로 다른 사용자를 매개변수로 만들고, 요청을 대기시키거나 로깅하며, 되돌릴 수 있는 연산을 지원합니다. (표현 - 난해) -> 명령 패턴은 메서드 호출을 실체화한 것이다. 실체화 = 실제하는 것으로 만든다 = 무엇인가를 일급(first-class)으로 만든다(프로그래밍에서의 뜻) 실체화, 일급 : 어떤 개념을 변수에 저장하거나 함수에 전달할 수 있도록 데이터, 즉 객체로 바꿀 수 있다는 걸 의미 '메서드 호출을 실체화한 것' = 함수 호출을 객체로 감쌌다는 의미 (콜백, 일급 함수, 함수 포인터, 클로저, 부분 적용 함수) = 콜백을 객체지향적으로 표현한 것 2.1. 입력키 변경 모든 게임 : 버튼 or 키보드 or 마우스 등 유저 입력을 읽는 코드 ..

[게임 프로그래밍 패턴]1. 구조, 성능, 게임

1.1. 소프트웨어 구조란? '어떻게 구조를 잡을 것인가' 모든 프로그램, 코드는 어떤 식으로든 구조가 있다. 좋은 구조와 나쁜 구조를 어떻게 구별할 수 있을까? - 좋은 소프트웨어 구조란? '구조는 변경과 관련이 있다' -> 코드 설계를 평가하는 척도 : 얼마나 쉽게 변경할 수 있느냐 - 코드를 고치는 방법 기능 추가, 버그 수정, 그 외 무슨 이유에서든지 간에 코드를 고쳐야 한다면, 먼저 기존 코드를 이해해야 한다. 전체 프로그램을 다 이해해야 하는 건 아니지만, 고치려는 코드와 관련된 부분은 머릿속에 집어넣어야 한다. 대부분 이 과정을 대수롭지 않게 여기지만, 사실 프로그래밍에서 가장 오래 걸리는 부분. - 프로그래밍 흐름도 - 디커플링은 어떻게 도움이 되는가? 양쪽 코드 중에서 한쪽이 없으면 코드..

게임 프로그래밍 패턴 (로버트 나이스트롬)

패턴 : 오랫동안 정형화되고 축적된 경험을 추상화한 지식 단위 여러 사람이 공유하는 개념이기 때문에 패턴 이름만으로도 많은 정보를 한 번에 정확하게 전달할 수 있음 새로운 구조를 어떻게 만들지 막막할 때, 옷본을 위에 놓고 옷감을 자르는 것처럼 패턴을 참고할 수 있고, 문제가 있을 때 패턴을 통해서 다른 사람들은 어떻게 해결했는지를 찾아볼 수도 있음 - 프로그래머는 다양한 기능을 빠르게 만들고 반복 개발하는 동시에 다른 개발자를 방해하거나 코드베이스를 더럽히지 않아야 한다. - 괴물은 영웅을 공격하고, 물약을 바시고, 폭탄은 적군, 아군을 가리지 않고 날려버린다. 이런 상호작용을 구현하는 동안 코드가 실타래처럼 엉키지 않게 해야 한다. - 게임에서는 성능이 굉장히 중요하다. 게임 개발자들은 누가 대상 플..