Deff_Dev

[디자인 패턴] 프로토타입 패턴 (Prototype Pattern) 본문

CS/디자인 패턴

[디자인 패턴] 프로토타입 패턴 (Prototype Pattern)

Deff_a 2024. 11. 8. 02:14

⚒️ 프로토타입 패턴이 뭘까 

https://refactoring.guru/ko/design-patterns/prototype

 

원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성하는 패턴

→ 어떤 객체가 자기와 비슷한 객체를 런타임 중 스폰하는 것

 

장점

  1. 객체 생성 비용이 높은 경우 이미 생성된 객체를 복제하여 성능을 개선할 수 있다.
  2. 런타임에 게임 오브젝트의 상태를 동적으로 변경하고 복제할 수 있다.

 

[예시 코드]

더보기
public interface IUnit
{
    IUnit Clone();
}

public class Unit : MonoBehaviour, IUnit
{
    public int health;
    public int attackPower;
    public float moveSpeed;
    
    public IUnit Clone()
    {
        GameObject clone = Instantiate(this.gameObject);
        Unit clonedUnit = clone.GetComponent<Unit>();
        
        // 속성 복사
        clonedUnit.health = this.health;
        clonedUnit.attackPower = this.attackPower;
        clonedUnit.moveSpeed = this.moveSpeed;
        
        return clonedUnit;
    }
}
public class UnitSpawner : MonoBehaviour
{
    public Unit prototypeUnit;
    public Transform spawnPoint;
    
    public void SpawnUnit()
    {
        Unit newUnit = (Unit)prototypeUnit.Clone();
        newUnit.transform.position = spawnPoint.position;
    }
}

🥴 프로토타입 패턴 vs 프리팹

생성 시점과 방식

  • Prefab은 미리 에디터에서 만들어진 템플릿으로, 주로 디자인 타임에 생성된다.
  • 프로토타입 패턴은 런타임에 기존 객체를 복제하여 새로운 객체를 생성한다.

데이터 복제

  • Prefab은 원본 프리팹의 모든 컴포넌트와 속성을 그대로 복제하며, 인스턴스화 후에도 원본과 연결을 유지한다.
  • 프로토타입 패턴은 개발자가 직접 정의한 복제 로직을 통해 선택적으로 데이터를 복사할 수 있다.

유연성

  • Prefab은 Unity 엔진에 종속된 고정된 복제 방식을 사용한다.
  • 프로토타입 패턴은 복잡한 객체의 초기화 과정을 캡슐화하고, 런타임에 동적으로 상태를 변경할 수 있다.

Prefab 사용

  • 동일한 게임 오브젝트를 여러 번 재사용할 때
  • 씬에서 자주 사용되는 에셋을 관리할 때
  • 디자인 타임에 미리 설정된 객체가 필요할 때

프로토타입 패턴 사용

  • 런타임에 객체의 상태를 동적으로 복제해야 할 때
  • 복잡한 객체 생성 과정을 숨기고 싶을 때
  • 객체 생성 비용이 높은 경우 효율적인 복제가 필요할 때