▶ 주제 : 팩토리 메소드 패턴 (Factory method pattern).
생성 패턴의 하나.
팩토리라는 인터페이스를 정의하고 인스턴스화를 해내는 부분을 서브 클래스에 위임하는 패턴이다.
▶ 관련 문서
▷ 위키피디아
▶ 구조
팩토리 인터페이스를 정의하여 이를 서브 클래스가 상속받아 구현하는 형태이다. 서브 클래스는 Product 타입 객체를 생성하고 반환하는 createProduct 함수를 정의해야한다.
▶ 예시
아래 예시는 C#을 기반으로 작성하였다.
public interface IFactory
{
IProduct CreateProduct();
}
팩토리 인터페이스를 정의한다. 인터페이스에는 특정 타입을 반환할 함수가 선언되어야 한다.
public interface IProduct { }
public class ProductA : IProduct { }
public class ProductB : IProduct { }
팩토리에서 생성될 객체의 공통 타입을 인터페이스(IProduct, 추상클래스도 가능)로 선언해주고, 이를 상속받는 구체적인 Product 클래스를 정의한다.
공통 타입을 사용하는 이유는 팩토리가 더 다양한 Product 객체들을 생성할 수 있게 하기 위함이다.
public class FirstFactory : IFactory
{
public IProduct CreateProduct()
{
return new ProductA();
}
}
public class SecondFactory: IFactory
{
public IProduct CreateProduct()
{
return new ProductB();
}
}
팩토리 인터페이스를 상속받는 서브 클래스(FirstFactory, SecondFactory)를 선언하고, 인터페이스에서 정의한 팩토리 메소드 CreateProduct( )를 상세 구현한다. 위 코드에서는 각 팩토리마다 다른 Product 객체를 생성하도록 구현하였다.
IFactory firstFactory = new FirstFactory();
IProduct productA = firstFactory.CreateProduct();
IFactory secondFactory = new FirstFactory();
IProduct productB = firstFactory.CreateProduct();
사용할 때는 팩토리를 생성한 다음, 팩토리를 통해 객체 생성 함수를 호출하면 된다.
▶ 장점
▷ 클래스 결합도 저하 : 직접 객체를 생성하는 것을 방지하여 클래스간의 결합도, 의존도가 낮아짐.
▷ 구체적인 클래스를 사용자로부터 분리 : 사용자는 생산되는 인터페이스에 대해서만 숙지하고 있어도 됨.
※ 주의
▷ "팩토리 메소드"라는 이름으로 인해서 "객체를 생성하는 모든 함수"를 팩토리 메소드 패턴으로 오해하지 말 것
▷ "추상 팩토리 패턴"과 비슷하나, 역할과 관점이 다름.
'Programming > 프로그래밍 이론' 카테고리의 다른 글
[프로그래밍 이론] 반각문자 @와 전각문자 @ (1) | 2019.10.10 |
---|---|
[프로그래밍 이론] JWT (Json Web Token) (0) | 2019.04.19 |
[디자인 패턴] 복합체 패턴 (Composite pattern) (0) | 2019.03.12 |
[디자인 패턴] 빌더 패턴 (Builder pattern) (2) | 2019.03.09 |
[디자인 패턴] 추상 팩토리 패턴 (Abstract factory pattern) (0) | 2019.02.14 |
댓글