//간단하게 몬스터 만드는 코드
[SerializeField] GameObject Slime://몬스터 프리펩
[SerializeField] GameObject Turtle://몬스터 프리펩
참조 5개
enum Monster
{
Slime,
Turtle
}
참조 2개
void CreateMonster (Monster monster)
{
switch(monster)
{
case Monster Slime:
Instantiate(Slime):
break:
case Monster Turtle:
Instantiate(Turtle):
break:
}
}
• Unity 메시지 참조 0개
private void Start()
{
CreateMonster (Monster Slime);
CreateMonster (Monster Turtle):
}
위 코드 실행시 결과물

위 코드에는 문제가 있다. 솔리드 원칙 그중에서 개방 폐세 원칙을 위반을 한다
만약에 몬스터 하나를 추가 해야한다 보면 몬스터가 추가 될때마다 생성하는 코드가 추가 되고 변경된다 예를 들어 몬스터가 100마리가 있다 하면 swich case 문이 100개가 있어야 한다 그렇게 되면 코드가 길어지고 길어지면 유지 보수가 힘들고 실수 할 수도 있기 때문에 실수 할 수도 있다
-팩토리 메서드 패턴은 객체 생성하는 방법을 서브 클래스에서 정의 하도록 하여, 객체 생성을 캡슐화하고 확장성을 높이는 디자인 패턴입니다
-팩토리 메서드 패턴은 상위 클래스에서 객체 생성의 인터페이스만 제공하고, 실제 객체의 생성은 하위 클래스에 위임하는 방식입니다
//추상체
public abstract class BaseFactory : MonoBehavior
{
public abstract void CreatMonster();
}
위 코드 상속
부모 (abstract)메서드에서 직접 구현을 안하고 상속을 하면 override를 해서 자식 메소드에서 직접 무조건 구현해야 한다
그래서 실제로 아까전에 객체 생성하는 방법을 서브클래스에서 하도록 서브클래스 혹은 자식 클래스 혹은 하위 클래스 (다 같은 말)에서 하도록 만들어 준거다
//구현체
public class SlimeFactory : BaseFactory//베이스 팩토리를 상속받아 슬라임 팩토리라 부른다
{
[SerialzeField] GameObject slime;
public override void CreatMonster()//부모의 메서드를 직접 상송을 하
{
Instant(slime);
}
}
다른 몬스터를 구현할때로 위 코드에서 이름만 바꿔서 넣어주면 된다
해당 코드를 테스트 하기 위한 코드
Unity 스크립트(자산 참조 1개) | 참조 0개
public class FactoryTest: MonoBehaviour
{
//베이스 팩토리 선언
[SerializeField] BaseFactory slimeFactory:
[SerializeField] BaseFactory turtleFactory:
//버튼 두개
[SerializeField] Button button1;
[SerializeField] Button button2;
Unity 메시지 | 참조 0개
public void Start()
{
button1 onClick AddListener(() =>
{
slimeFactory.CreateMonster();// CreatMonster에 있는 슬라임팩토리 호출
});
button2.onClick. AddListener(() =>
{
turtleFactory.CreateMonster();// CreatMonster에 있는 터틀팩토리 호출
});
}
결론은 이구조의 특징을 보면 만약에 몬스터가 추가되면 우리는 베이스팩토리를 단순하게 상속받아서 새로운 몬스터 팩토리를 만들고 동일하게 구현하면 된다 결국 우리가 Creat하고 있는 원본코드는 몬스터가 얼마나 추가 되건 수정이 없다 결국에는 베이스 팩토리만 상속받아서 구현하기 때문에
솔리드의 원칙 중 개방폐세 원칙을 잘지키고 또한 단일책임 원칙을 잘 지킨다 각자 역할이 잘 보인다

예시 그림
결국엔 슬라임 팩토리가 베이스 팩토리를 상속하고 슬라임을 구현한다
베이스팩토리를 추상이라 써놓은 이유는 이걸 추상체라 한다
추상체: 인터페이스나 추상 클래스와 같이 구체적인 동작이 구현되지 않은 구조
구현체: 인터페이스나 추상 클래스에서 정의한 동작이나 기능을 실제로 수행하는 구체적인 클래스
버튼 1 클릭시

버튼 2 클릭시

잘되는 걸 확인 할 수 있다
팩토리 패턴을 사용하면 원본코드를 수정하지 않기 때문에 팩토리 패턴을 사용하면 유지 보수가 쉽다이콘 추가