Post

게임 프로그래밍 패턴, 좋은 구조

게임 프로그래밍 패턴(w.로버트 나이스트롬, t.박일)을 공부하며 작성한 메모를 한 번 더 정리한 게시글입니다. 주요 개념 정리 및 책에 등장하는 용어 공부가 목적이라 순서가 조금 두서 없습니다~

소프트웨어의 ‘좋은 구조’

좋은 구조란 코드를 거의 건드리지 않고도 원하는 작업을 수행할 수 있는 구조로, 얼마나 쉽게 변경할 수 있느냐가 코드 설계의 평가 척도가 된다. 소프트웨어 구조의 핵심 목표는 프로그래머가 작업하기 전에 알아야 할 지식의 양을 최소한으로 줄이는 것. 즉, 다른 코드와의 결합도(커플링)를 최소화한 구조가 좋은 구조로 가는 지름길이다. 그리고, 확장성을 위해 보조 코드를 마구잡이로 붙이게 된다면 구조가 엉망이 되기 쉽다. 디커플링과 확장성, 두 가지를 유심히 생각하며 조율하자!

You Aren’t Gonna Need It, YAGNI는 해당 기능이 정말로 필요하다고 느껴질 때까지 기능 추가는 미루자는 익스트림 프로그래밍(XP)의 원칙이다.


유연한 프로토타입과 구체화된 최적화

프로젝트의 목표와 중요시할 점

성능을 어느 정도 포기하고 유연하고 빠르게 제작할 수 있는 프로토타입과 반대로, 최적화 기법은 코드 속 내용을 구체적으로 제한해 좋은 성능을 얻는 대신 유연함을 포기하게 된다.

C++ 템플릿
코드의 유연함에도 스펙트럼이 존재한다. 코드에서 클래스 메서드를 직접 호출한다면 클래스를 코드 작성 시점에 고정하는 하드 코딩이 된다. 반면, 가상 메서드나 인터페이스를 통해 호출하면 런타임에서 호출되는 클래스를 알 수 있지만, 성능 면에서 약간의 추가의 비용이 발생한다.

C++의 템플릿 메타프로그래밍은 컴파일 시점에 템플릿이 인스턴스화되면서 어떤 클래스가 호출될지 정해진다. 이는 런타임 낭비가 없는 인터페이스 추상화 방법이다.

This post is licensed under CC BY 4.0 by the author.