팩토리패턴이란 무엇일까
처음 팩토리 단어 자체가 패턴이란 단어앞에 붙어있는것도 생소했기에 이 패턴을 이해하기엔 시간이 걸렸다.
일단 위키피디아의 팩토리패턴에 대한 정의를 보자
팩토리 매서드 패턴
객체 지향 디자인 패턴으로, 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며, 자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다.
부모 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다.
...뭔소린지 모르겠다.
팩토리 메서드 디자인 패턴이란, 객체를 생성하기 위한 인터페이스이고
대충 어떤 객체를 만드는데, 해당 객체를 만드는데에는 서브클래스가 결정한다는 것이다. 그 과정에서 '어떤 클래스'라는것의 내용을 감출 수 있다는것 같다. 정리하자면 팩토리 메소드는 객체를 생성해서 반환하는 역할을 하는것 같다.
정확히는 이해가 안가서 계속 찾아봤는데, 아래에 내가 이해한대로 그림과 함께 설명하겠다.
구성요소
- Product : 객체를 정의하는 인터페이스 (swift에선 protocol이 될 수 있음) , 팩토리 메서드가 만드는 객체이다.
- ConcreteProduct : Product 인터페이스를 구현하는 클래스 (객체)
- Creator : factory 메서드를 정의하고, product를 리턴하는 기능, 이 또한 인터페이스로 구현될 수 있다.
- ConcreateCreator : Creator의 Factory Method를 재정의하고, 실질적으로 product 객체, ConcreteProduct 객체를 리턴하는 역할.
팩토리 패턴을 사용하는 이유
클라이언트는 클래스만 필요하며, 어떤 구체적인 구현을 하고 있는지 알 필요가 없을때, 이러한 상황에서 클래스를 가져오려고 할때 팩토리 메소드를 사용한다.
또한 직접 객체를 생성하지않고, 팩토리메서드 클래스를 통해 객체를 대신 생성하므로 클래스간의 결합도를 낮출 수 있다.
( swift에서는 class들끼리 상속을 받을 수 있지만, protocol끼리의 상속은 팩토리 메서드를 통해 이루어지지 않을까 조심스럽게 추측해본다. )
swift로 예시를 들어보자,
우선 product의 역할을 할 객체를 만들자. 사각형이란 객체를 만들기 위해 그 상위단계인 View라는 프로토콜로서 구현했다.
그다음 Creator역할을 할 ViewCreator을 만든다. 이또한 프로토콜로 구현하여 ConcreateCreator에서 구체화 시켜준다.
createView라는 함수를 통해 View product를 리턴해준다.
createView 함수를 재정의하기 위해 ViewFactory라는 클래스를 만든다.
CreateView 함수를보면, 만들려는 객체의 타입에 따라 다른 (예시에선 Square 하나밖에 안만들었지만 ㅎㅎ ) 타입의 객체를 리턴해준다.
이 부분이 팩토리 메서드 예시의 핵심이라 볼 수있다.
그리고 마지막으로 ConcreteProduct역할을 하는 Square 클래스는
View 프로토콜을 채택하여 구현되어 있다.
이렇게 간단하게 내가 이해한 만큼 팩토리 메소드에 대해 정리해봤다.
이후에 더 알게된 점이 있다면 수정하도록 하겠다. 댓글환영 지적환영
참고 : https://www.dofactory.com/net/factory-method-design-pattern