흔히들 유니티를 배울 때 슈팅게임을 만드는데, 몇 몇 분들은 슈팅에서 총알공장(BulletFactory)를 봤을거라고 생각합니다. 바로 이 공장이 심플 팩토리 패턴입니다!
(인터넷에 검색해보면 이것저것 어렵게 정의내려진 글들이 많은데... 제 이해로는 그냥 객체를 생성하는 공장을 따로 만든다가 전부입니다)
그럼 바로 예를 들어 "큐브 공장" 을 만들어보겠습니다.
우선 시각적으로 이해하기 쉽게, 공장과 공장을 가동시키는 운영자, 큐브의 원본과, 그린큐브, 레드큐브를 모델로 두었습니다. 위 다섯가지가 기본적으로 스크립트로 작성된다고 보시면 됩니다.
(1)큐브공장에선 큐브를 생성하는 기능을 가지고 있습니다. 이를 사용하기 위해선 기능을 작동시킬 (2)작동자가 필요합니다. 이렇게 두 객체를 통해서 우리는 큐브를 생성할 수 있습니다.
공장에서 제품을 만들때 제품원형을 가지고 이를 바탕으로 다양한 제품을 생성하기도합니다. 이 관점에서 우리는 큐브원형에 들어있을 기능을 그린큐브와 레드큐브에도 들어있다는 것을 알수있고 똑같은 사용법으로 색이 다른 큐브를 사용할 수 있습니다.
이를 클래스 구성으로 살펴보겠습니다.
심플 팩토리 패턴은 이런 식으로 구성될 것입니다.
주의하셔야 할 점은 심플 팩토리는 단지 CubeFactory.cs 그 자체를 의미한다는 것입니다. 단지, 객체의 생성을 공장의 기능처럼 분리한다는 것 자체가 심플 팩토리 패턴인 것입니다. 여기서 큐브원형, 그린큐브 이것들은 심플팩토리의 설명에 필요한 부분은 아닙니다.
하지만 심플 팩토리 패턴을 사용하기 위해서 일반적으로 공장이 어떻게 구성되는지 알아야하기에 위와같은 큐브생성에 대한 부분을 작성해보았습니다. 심플 팩토리 패턴을 검색해보면 꼭 위와같이 큐브 원형과 같은 추상클래스를 상속 받더라구요. 그래서 처음 보면 복잡해보이는데 위와같이 그림으로 보면 훨씬 이해하기 쉬우실거에요.
코드 작성은 따로 하지 않도록 하겠습니다. 코드 작성은 딱히 어려운 일이 아니니까요.
CubeFactory 에선 큐브를 생성시키는 함수를 작성하고!
CubeFactoryOperator 에선 큐브공장의 큐브생성함수를 호출하고!
( 혹시 만들어질 큐브에 접근하고 싶으면 Cube 추상 클래스를 다양한 큐브의 접근점으로 삼아 공통된 명령을 날려줄수도 있습니다. 이건 약간 스트래티지 패턴 느낌입니다. 이전 글 참고 )
Cube 는 앞으로 만들어질 큐브의 원형 (공통이 되는 구성) 을 가지고 있고!
GreenCube, RedCube 는 큐브 원형의 기능을 포함하고 있고 또한 자기만의 기능을 추가로 가질 수 있고!
아직도 헷갈리신다면 한 번 스크립트를 직접 작성해보셔요! 이상입니다!
한 줄 요약 : 객체의 생성을 담당하는 부분을 공장의 기능처럼 분리시키는 것, 그리고 뒤이어 공장을 가동시키는 오퍼레이터 클래스가 필요할것이다.