반응형
상속 관계의 오브젝트들을 생성할 때 아래와 같이 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() 하나 만으로 해결이 된다..! (막상 보면 너무 간단한 방법인데..)
// 베이스 클래스
// 하위 클래스서 재정의
// 변경된 코드
'게임 공부 > 게임 개발 일지' 카테고리의 다른 글
앞으로 더 적용해야 할 것.. (0) | 2021.09.14 |
---|---|
오브젝트 및 라이팅 생성 및 배치 테스트 (0) | 2021.09.07 |
세 종류의 라이팅 구현 (4) - SpotLight 편 (0) | 2021.08.29 |
픽셀 셰이더의 결과의 일부분이 카메라의 위치에 따라 검은색이 나온다면.. (0) | 2021.08.28 |
오일러 각 기반 회전 시스템을 쿼터니언으로 바꾸었다. (0) | 2021.08.26 |
댓글