[디자인 패턴] 팩토리 패턴

James·2023년 8월 1일
1
post-thumbnail

팩토리 패턴이란?


개념 : 객체를 생성하는 인터페이스를 제공하여 객체의 생성 과정을 캡슐화하는 방법입니다.

즉, 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정하게 만드는 패턴이다.

왜 Factory Pattern이 나오게 된 걸까?

객체 지향 디자인 패턴의 확장에 있어서는 열려 있어야 하며, 수정에 있어서는 닫혀 있어야 한다는 것이다. (OCP, Open Closed Principle)
여기서 수정에 있어서 닫혀 있어야 한다는 말에 주목 해보자. 코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경 할 수 있어야 한다. 때문에, 수정이 일어날 가능성이 큰 부분과 그렇지 않은 부분을 분리하는 것이 좋다.

객체는 속성과 함수가 변경, 또는 추가 될 수 있다. 이에 따라 객체의 생성을 담당하는 코드는 변경의 가능성이 높다. 객체의 생성을 담당하는 클래스를 한 곳에서 관리하여 결합도를 줄이기 위하여 팩토리 패턴이 나타나게 된 것이다.

결합도(의존성)이란?

결합도 개념 : 한 클래스에 변경점이 얼마나 다른 클래스에 영향을 주는가를 의미한다.

class Product {
    init() {}
}
class User {
    let p = Product()
}

이걸 다 바꾸기엔 무리가 있다.

두 개의 클래스가 있다. 하나는 Product클래스 이고, 다른 하나는 Product를 사용하는 User클래스이다.

이때 Product와 User의 관계를 의존 관계라고 한다. 의존의 대상인 Product 클래스가 사라지면, User 클래스는 컴파일이 불가능해지고, 동작할 수 없게 된다.

팩토리 패턴 예시

팩토리 클래스에서는 getInstance() 메소드를 이용하여 인스턴스를 반환한다. 이제, User 클래스 내부에서는 Product 객체를 직접 생성하지 않는다. 팩토리 클래스에 인스턴스를 요청하고, 생성된 인스턴스를 반환받으면 된다.(객체의 생성을 위임했다고 말 할 수 있다.)

만약 Product의 생성자가 변경 된다면??

Factory에 getInstance() 메소드 내부에 있는 Product 생성자만 변경 시켜주면 된다.

팩토리 메소드의 장단점


장점

  • 결합도 낮춤 : 객체간의 결합도를 낮출 수 있다.
  • 단일책임 원칙 따름:
  • 개방 폐쇄 원칙을 따름: 기존 client의 코드를 파괴하지 않고 새로운 타입 추가할 수 있다.

단점

  • 패턴을 구현할 많은 서브 클래스를 도입하므로써 코드가 복잡해질 수 있다.

Reference & Additional Resources

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글