본문 바로가기

CS/디자인 패턴

[디자인 패턴] 팩토리 패턴에 대해 알아보기 (Swift)

반응형

1. 팩토리 패턴이란?

객체 생성 부분을 따로 두어 추상화하고, 인스턴스를 생성할 클래스를 서브클래스에서 결정하는 패턴입니다.
맨처음 말로만 들었을 때, 잘 이해가 가지 않았습니다.

예를들어, 내가 햄버거 가게를 오픈을 했는데 처음에는 불고기버거만 만들줄 알았다고 가정해봅시다.
그렇다면 불고기 버거 인스턴스를 만들 class를 선언을 해야합니다.
이제 버거 기술이 발전해서 새우버거랑 치킨버거도 만들 수 있게 되었습니다.
그렇다면 새우버거, 치킨버거 class도 선언을 해주어서 인스턴스를 생성해주어야겠네요.

이러한 버거들을 (인스턴스) 불고기버거, 새우버거, 치킨버거를 생성하는 것을 서브클래스에서 결정을 해주는게 팩토리 패턴입니다.
인스턴스를 생성하는 것을 팩토리 클래스에서 생성하여 반환하게 됩니다.

2. Swift에서의 팩토리 패턴

먼저, 버거 프로토콜을 정의했습니다.
버거의 이름, 가격을 프로퍼티로 작성하였고, 주문을 메서드로 작성해주었습니다.

불고기버거, 새우버거, 치킨버거를 버거 프로토콜을 채택한 클래스로 작성했습니다.

이 버거들의 타입을 enum으로 작성해주었고, 팩토리 클래스에서 객체 생성하는 메서드를 프로토콜로 작성해주었습니다.

이제 위에서 작성한 프로토콜을 채택한 팩토리 클래스를 구현해줍시다.

버거들을 한 번 생성해볼까요?

burgerFactory에서 어떤 버거를 생성할 지 결정해주고 있습니다.

3. 장단점

새롭게 치즈버거도 만들 수 있게 되었다면 코드를 어떻게 수정하면 좋을까요?
치즈버거 클래스를 하나 생성하고, 버거 타입에 치즈를 넣어주면 끝입니다.
객체를 생성 로직이 따로 두어져 있기 때문에 유지보수성이 좋습니다.

또한, 상위 클래스와 하위 클래스가 분리되어 있기 때문에 결합도가 낮습니다.

하지만, 많은 클래스를 정의한다는 점에서 코드의 양이 늘어나고 오히려 복잡해 보일 수 있다는 단점이 있습니다.

장점 1. 유지보수성 증가
2. 결합도가 낮음
단점 1. 코드의 양 많아짐
2. 오히려 복잡할 수도..
반응형