본문 바로가기
게임 공부/게임 개발 일지

프로토타입(prototype) 패턴 적용

by woohyeon 2021. 11. 6.
반응형

상속 관계의 오브젝트들을 생성할 때 아래와 같이 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() 하나 만으로 해결이 된다..! (막상 보면 너무 간단한 방법인데..)

// 베이스 클래스

 

// 하위 클래스서 재정의

 

// 변경된 코드




댓글