게임 공부/게임 개발 일지
프로토타입(prototype) 패턴 적용
woohyeon
2021. 11. 6. 18:32
반응형
상속 관계의 오브젝트들을 생성할 때 아래와 같이 switch case를 이용했었는데 프로토타입 패턴에 대해 알게 되었다! 그리고 바로 이 부분을 수정해야겠다는 생각이 들었다.
obj 타입에 따라 아래와 같이 샘플 데이터를 이용해 타입에 맞게 복사 생성했었는데 새로운 클래스를 만들 때 마다 아래와 같이 추가를 해주어야 한다는 단점이 있었다. 이걸 구현할 때도 뭔가 다른 방법이 있을 거라는 생각이 들긴 했던 것 같다..
switch (obj)
{
case ON_CUBE:
pObj = new Cube(*(Cube*)pSample); // 샘플 객체를 해당 타입으로 형변환 후 복사 생성
break;
case ON_TILE:
pObj = new Tile(*(Tile*)pSample);
break;
default:
__debugbreak();
break;
}
프로토타입 패턴이라는 것인데.. 그냥 베이스 클래스에 Clone라는 (순수) 가상 함수를 추가한다. 이 함수는 자기 자신을 복사 생성 후 그 결과(포인터)를 반환해주는 간단한 방법이다. 하위 클래스에서 Clone 함수를 재정의하면, 위와 같이 일일이 case를 추가할 필요 없이 pObj = pSample->Clone() 하나 만으로 해결이 된다..! (막상 보면 너무 간단한 방법인데..)
// 베이스 클래스

// 하위 클래스서 재정의

// 변경된 코드
