개요
타입 객체는 타입 사용 객체가 타입 객체 인스턴스를 가짐으로써 한 타입을 나타내는 패턴이다. 즉 각 인스턴스가 하나의 타입을 의미하는 타입 클래스가 있으며 해당 타입 클래스의 인스턴스를 하나 가져 해당 타입의 인스턴스를 나타내는 타입 사용 클래스가 존재한다. 이를 통해 추가적인 상속이나 클래스없이 인스턴스만으로 새로운 타입들을 만들어 나갈 수 있다.
타입 객체의 인스턴스가 가진 데이터로 한 타입을 나타내는 패턴이기에 만들고자하는 타입들이 데이터로 구분될때 유용하다. 물론 타입 사용 클래스등에서 미리 구현된 기능들을 타입 객체의 데이터를 통해 적절히 조합하여 사용하는 방식으로 타입 객체에서 동작도 정의할 수 있다. 앞서 배웠던 바이트 코드 등이 하나의 예시가 될 수 있다.
타입 객체 패턴은 만들고자 하는 타입들이 데이터 위주로 구분되거나 동작들이 사전에 만들어진 기능을 조합하여 구분될대 사용하면 유용하다. 하지만 각 타입들에 새롭게 정의되어야하는 동작들이 매번 새롭고 새롭게 코드로 만들어야하는 정도라면 그냥 상속으로 타입들을 만들어 나가는게 더 적합할 수 있다.
타입 사용 객체 생성
타입 사용 객체를 생성하는 방법은 두가지가 있다. 일단 생성자로 생성한 뒤 타입객체를 따로 채우는 방법이 있고 타입 객체의 인스턴스의 팩토리 메소드를 이용하여 자신의 타입을 가진 타입 사용 객체를 바로 생성하는 방법이 있다. 전자는 사용자 측에서 타입 사용 객체의 메모리를 자유롭게 관리할 수 있고 후자는 팩토리 메소드에서 정해준 방식으로만 메모리를 사용하도록 강제할 수 있다. 또한 타입 초기화와 관련하여 처리할 작업이 많다면 팩토리 메소드를 제공해주는게 사용자 입장에서 편리할 수 있다.
상속
타입들끼리 공유되는 데이터가 많다면 상속 기능을 만들면 편리할 것이다. 상속 기능을 직접 만든다고 하면 다음 두가지 방법이 있다.
첫번째는 타입 인스턴스에서 부모 타입 포인터를 가지고 있고 부모 포인터가 NULL이 아니면서 자신의 특정 속성값이 NULL값이면 해당 값은 부모로 부터 해당 데이터를 찾아 리턴하는 방식이다. 이전에 배운 위임 방식이다.
두번째는 타입 객체를 생성할 때 생성자에서 부모 포인터와 각 속성 초기화 값들을 받는다. 부모 포인터가 NULL이 아니라면서 적은 속성 초기화 값이 NULL이면 해당 속성은 부모 포인터로 부터 복사하여 저장한다.
첫번째 방식은 런타임에서 상속 여부를 수정할 수 있고 두번째 방식은 메모리와 속도를 아낄 수 있다는 장점이 있다.
참고서적
게임 프로그래밍 패턴
'디자인 패턴 > 게임 프로그래밍 패턴' 카테고리의 다른 글
[게임 프로그래밍 패턴][15]이벤트 큐 (0) | 2024.05.05 |
---|---|
[게임 프로그래밍 패턴][14]컴포넌트 패턴 (0) | 2024.05.01 |
[게임 프로그래밍 패턴][12]하위 클래스 샌드박스 (0) | 2024.04.29 |
[게임 프로그래밍 패턴][11]바이트 코드 (0) | 2024.04.28 |
[게임 프로그래밍 패턴][10]업데이트 메서드 (0) | 2024.04.28 |