디자인 패턴/게임 프로그래밍 패턴

[게임 프로그래밍 패턴][5]프로토타입 패턴

우향우@ 2024. 4. 22. 11:03

개요

프로토타입 패턴은 기존에 만들어진 인스턴스를 복사하여 새로운 인스턴스들을 만들어내는 기법을 말한다. 이를 통해 복사할 인스턴스를 갈아끼우거나 수치를 바꿈으로써 클론될 인스턴스들의 값도 바꿀 수 있다. 언리얼 엔진의 CDO와 비슷한 개념인듯하다.

 

프로토타입 기반 언어

클래스로 인스턴스를 만들어내는것이 아닌 인스턴스로 인스턴스를 만들어낸다는 기법에 집중한 프로토타입 기반의 언어들이 있다. 이러한 언어들은 C++과 같이 클래스의 생성자로 인스턴스를 만들지 않고 기존의 다른 인스턴스를 복제하여 인스턴스를 만드는 식으로 운용된다. 이러한 언어들의 특징은 각 인스턴스들이 메서드와 필드들을 템플릿에 종속되지않고 자유롭게 추가 및 제거된다는 점이다. 또한 상속 대신 위임이라는 것을 사용한다. 위임은 다음과 같이 동작한다. 위임을 사용하는 인스턴스는 특별한 필드인 프로토타입 필드에서 다른 한 인스턴스를 가르킨다. A라는 인스턴스가 프로토타입으로 B라는 인스턴스를 가르킨다고 하자. A에서 한 필드 또는 메소드를 참조하면 A에서 해당 이름을 찾고 있다면 그것을 참조하고 만약 없다면 A의 프로토타입 인스턴스에 가서 찾는다. 거기에 있다면 그것을 참조한다. 만약 B에도 프로토타입이 있다고 B에도 해당 이름이 없다면 연쇄적으로 이름을 찾는다.  

 

데이터 모델링에서의 위임

이러한 위임이라는 개념은 데이터 모델링을 할때 유용하다. Json등의 데이터 모델로 key-value형태의 데이터들을 관리한다고 하자. 이때 고블린 보병, 고블린 마법사, 고블린 궁수처럼 많은 필드가 같고 일부만 다른 데이터들이 많이 존재할 수 있다. 이를 일일히 넣는것은 데이터의 양도 늘어나고 고블린들의 공통 필드를 수정할때도 모두 각각 수정해야 하므로 비효율적이다. 여기서 데이터의 모델에 위임을 도입하면 유용하다. 데이터의 필드에 프로토타입 필드를 추가하고 특정 키가 해당 데이터에 없을때 프로토타입으로 가서 데이터를 찾는 식으로 데이터 참조 로직을 만들면 된다. 그렇게 하면 기준이 되는 한 데이터를 다른 데이터들이 위임하게 되고 해당 위임된 데이터만 수정하면 모두에게 적용될 것이다.

 

 

 

참고서적

게임 프로그래밍 패턴