[ 참고사이트 ]
https://ansohxxn.github.io/design%20pattern/chapter4/
[ 서론 ]
컴포넌트, 싱글톤 패턴은 실제로 제가 프로젝트를 만들면서 사용한 적이 있지만 팩토리 패턴은 단 한 번도 사용한 적이 없습니다. 상속을 사용하긴 했지만 팩토리 패턴과 같은 공장과 같은 구조의 디자인 패턴을 구현한 적은 없어서 이렇게 공부하고 정리해봅니다.
1. 팩토리 패턴
- 팩토리: 객체 생성을 처리하는 클래스.
- 팩토리 패턴: 객체를 생성하고자 할 때 사용하는 패턴.
- 팩토리 패턴은 객체를 생성하기 위한 인터페이스를 제공, 실제 생성 로직은 이를 구현한 하위 클래스에서 결정.
2. 왜 사용할까?
- 객체 생성과 사용이 분리됨.
=> 코드의 유연성과 확장성이 향상. - 유연성
=> 팩토리 매서드 패턴과 추상 팩토리 패턴을 사용하면 객체 생성 로직을 변경하거나 다른 종류의 객체를 생성하는 것이 쉬워짐. (= 유지보수에 좋음) - 코드 중복 최소화
=> 객체 생성 로직이 여러 곳에서 반복되지 않고 하나의 장소에 집중되기 때문에 코드 중복을 최소화할 수 있음.
=> 코드의 일관성과 가독성 향상.
3. 심플 팩토리 패턴
- 팩토리 패턴 중 가장 기본적인 구조.
- 하나의 팩토리 클래스가 객체를 생성하는 방식.
- 여러개의 자식 오브젝트들을 하나의 함수로 한방에 생성하기 위해 사용하는 패턴.
4. 구현
- 단순히 자동차를 만드는 공장 구조를 만들겁니다.
- 자동차의 종류는 일단 세단과 트럭만 있습니다.
[ Car.cs ] - 어떠한 자동차든 출차되면 바로 이동을 하게 하는 추상클래스를 사용.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 자동차가 출차 후 이동하는 함수정의를 가진 추상클래스.
public abstract class Car
{
public abstract void Move();
}
// Sedan클래스(Car 상속)
public class Sedan : Car
{
public Sedan()
{
Debug.Log("Sedan 출차");
}
public override void Move()
{
Debug.Log("Sedan 이동");
}
}
// Truck클래스(Car 상속)
public class Truck : Car
{
public Truck()
{
Debug.Log("Truck 출차");
}
public override void Move()
{
Debug.Log("Truck 이동");
}
}
[ CarFactory.cs ] - 자동차 타입에 따른 객체 생성.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 자동차 타입.
public enum CarType
{
Sedan = 0,
Truck = 1
}
// 자동차 생산 공장 클래스.
public class CarFactory : MonoBehaviour
{
public static Car createCar(CarType type)
{
Car car = null;
// 자동차 타입에 따라 해당 자동차 종류 클래스 인스턴스.
switch (type)
{
case CarType.Sedan:
car = new Sedan();
break;
case CarType.Truck:
car = new Truck();
break;
}
return car;
}
// 버튼을 누르면 해당 자동차 출차 및 이동.
public void OnClick_BtnCreatCar(int numCartype)
{
CarType type = (CarType)numCartype;
createCar(type).Move();
}
}
'Unity > Unity 디자인 패턴' 카테고리의 다른 글
[Unity 디자인 패턴] 팩토리 매서드 패턴(Factory Method Pattern) (0) | 2024.04.25 |
---|---|
[Unity 디자인 패턴] 옵저버 패턴(Observer Pattern) (0) | 2024.04.22 |
[Unity 디자인 패턴] 컴포넌트(Component) 패턴 (0) | 2024.04.17 |
[Unity 디자인 패턴] 싱글톤(SingleTon)에 대해 알아보자! (0) | 2024.04.16 |