C#/디자인 패턴

[C# / Unity] 디자인 패턴 - 팩토리 메서드

윤창범 2021. 4. 11.

※ 읽기 전에 한번 숙지하면 좋은 내용

 

math-development-geometry.tistory.com/40

 

C# - 추상 클래스, 가상 클래스 - abstract, virtual 사용법

지난 포스팅 인터페이스에서 잠시 언급된 추상과 가상에 대한 이야기를 하도록 하겠습니다. 추상과 가상을 먼저 이야기 했으면 좋았겠지만, 제 포스팅은 그냥 의식의 흐름으로 적는 포스팅이기

math-development-geometry.tistory.com

 

glikmakesworld.tistory.com/5

 

유니티 디자인패턴 - 팩토리(심플팩토리, 팩토리 메소드, 추상팩토리) (Unity Design Patterns - Factory)

흔한 프로그래밍 언어서 새로운 인스턴스를 만들 때  new를 사용한다. 만약 내 게임의 스테이지1에서 그린고블린을 만든다면 아래와 같이 만들것이다. GreenGoblin greenGoblin = new GreenG

glikmakesworld.tistory.com

 


 

먼저 패턴에 들어가기 전에 알아둘 것, 추상 / 가상 키워드 같은 경우에는 공통적인 기능에는 virtual (가상) 을, 세부적인 기능들이 모두 다른 경우에는 abstract (추상) 을 이용하여 구현하는 것이 좋다.

 

 

 

팩토리 메서드는 심플 팩토리와 비슷하지만 객체를 생성하는 함수만 따로 정의해주는 것이다.

 

심플 팩토리에서는 간단히 하나의 팩토리 클래스로 상자가 바로 나오도록 했는데, 팩토리 메서드는 상자가 생성되는 부분만 좀 더 바뀌었다고 보면 된다.

 

예를 들어서 상자 자체에 외형에 따른 종류가 여러 가지가 있다고 해보자.

 

<장비용 상자>

- 무기 상자

- 방어구 상자

 

<재화용 상자>

- 골드 상자

- 다이아몬드 상자

 

<아이템용 상자>

- 포션 상자

- 재료 상자

 

위와 같이 외형 자체에 따라 종류도 나뉘어지고, 기능도 달라서 각기 따로 생성과 처리를 해야하는 상자가 많다면?..

 

한번 계층구조부터 생각해보자.

 

일단 모두 [상자] 라는 객체부터 시작하여 상자 외형의 종류에 따라 계층이 나뉘어질 것 이다.

(조금 상상이 안 간다면 참고 자료를 보도록 하자.)

 

그리고 거기서 세부적인 상자별로 한번 더 계층이 나뉘어질 수 있다.

(예시 - 장비용 상자에서 무기 상자와 방어구 상자로)

 

그리고 모든 종류의 상자는 생성이 될 수 있다는 공통점이 있다.

(상자를 생성할 선언용 팩토리 클래스, 그리고 상속받을 상자의 종류별 생성 팩토리 클래스들)

 

생성할 때 무언가 처리를 하는 내용이 각기 다르다면, 생성하는 함수만 선언된 최상위 팩토리 클래스를 만들고 상속받아서 정의하면 된다.

 

예시)

(2개의 클래스를 그냥 하나로 합친 이미지라는걸 확인하고 참고하도록 하자)

 

만약에 이대로 사용한다고 하면?

 

(예시지만 이런 느낌이다)

실제로 어떻게 적용을 할지는 본인의 선택이겠지만, 생성 부분도 함께 신경 쓴다면 앞으로 종류가 늘어나도 일관성 있고 유지보수성이 있는 코드를 작성할 수 있다.

 

※ 현재 일지에는 생략된 부분이 꽤 있으니 자세한 내용은 구글링이나 참고자료를 확인

댓글