Deff_Dev
[디자인 패턴] 프로토타입 패턴 (Prototype Pattern) 본문
⚒️ 프로토타입 패턴이 뭘까
원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성하는 패턴
→ 어떤 객체가 자기와 비슷한 객체를 런타임 중 스폰하는 것
장점
- 객체 생성 비용이 높은 경우 이미 생성된 객체를 복제하여 성능을 개선할 수 있다.
- 런타임에 게임 오브젝트의 상태를 동적으로 변경하고 복제할 수 있다.
[예시 코드]
더보기
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 사용
- 동일한 게임 오브젝트를 여러 번 재사용할 때
- 씬에서 자주 사용되는 에셋을 관리할 때
- 디자인 타임에 미리 설정된 객체가 필요할 때
프로토타입 패턴 사용
- 런타임에 객체의 상태를 동적으로 복제해야 할 때
- 복잡한 객체 생성 과정을 숨기고 싶을 때
- 객체 생성 비용이 높은 경우 효율적인 복제가 필요할 때
'CS > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 옵저버(관찰자) 패턴 (Observer Pattern) (0) | 2024.11.07 |
---|---|
[디자인 패턴] 경량 패턴 (Flyweight Pattern) (0) | 2024.11.07 |
[디자인 패턴] 명령 패턴 (Command Pattern) (1) | 2024.11.07 |
[디자인 패턴] 디자인 패턴 (서비스 로케이터, 데코레이터, 빌더/팩토리, 상태) (0) | 2024.06.04 |
[디자인 패턴] 싱글톤 패턴 (Singleton Pattern) (2) | 2024.04.07 |