[Design Pattern]팩토리 패턴
디자인 패턴의
팩토리 패턴
정리
Factory Pattern
- 배울 것
느슨한 결합
을 이용하는 객체지향 디자인- 객체의 인스턴스를 만드는 작업이 항상 공개되어 있어야 하는 것은 아니며, 모든 것을 공개했다가는 결합과 관련된 문제가 생길 수 있다
- 팩토리 패턴을 이용해
불필요한 의존성
을 없앨 수 있다.
구상 클래스를 바탕으로 코딩을 하면 나중에 코드를 수정해야 할 가능성이 높아지고, 유연성이 떨어지게 됨
- 팩토리 메소드는 객체 생성을 처리하며, 팩토리 메소드를 이용하면 객체를 생성하는 작업을 서브클래스에 캡슐화시킬 수 있음.
- 이렇게 하면 수퍼클래스에 있는 클라이언트 코드와 서브클래스에 있는 객체 생성 코드를 분리시킬 수 있음.
abstract Product factoryMethod(String type)
- abstract : 팩토리 메소드는 추상 메소드로 선언해 서브클래스에서 객채 생성을 책임지도록 함
- Product : 팩토리 메소드에서는 특정 제품(객체)를 리턴하며, 그 객체는 보통 수퍼클래스에서 정의한 메소드 내에서 쓰이게 됨
- factoryMethod : 팩토리 메소드는 클라이언트(수퍼클래스에 있는 orderPizza() 같은 코드)에서 실제로 생성되는 구상 객체가 무엇인지 알 수 없게 만드는 역할
- String type : 팩토리 메소드를 만들 때 매개 변수를 써서 만들어낼 객체 종류를 선택할 수도 있음
- 이렇게 하면 수퍼클래스에 있는 클라이언트 코드와 서브클래스에 있는 객체 생성 코드를 분리시킬 수 있음.
모든 팩토리 패턴에서는 객체 생성을 캡슐화
팩토리 메소드 패턴에서는 서브클래스에서 어떤 클래스를 만들지를 결정하게 함으로써 객체 생성을 캡슐화
Creator 클래스
- PizzaStore
- 추상 Creator 클래스.
- 나중에 서브 클래스에서 제품(객체)을 생산하기 위해 구현할 팩토리 메소드(추상 메소드)를 정의
- Creator 클래스에 추상 제품 클래스의 의존하는 코드가 들어있는 경우도 있음.
- 제품 클래스의 객체는 이 클래스의 서브클래스에 의해 만들어짐. ~~> Creator 클래스 자체에서는 절대로 어떤 구상 제품 클래스가 만들어질지 미리 알 수 없음
- NYPizzaStore, ChicagoPizzaStore
- 구상 Creator.
- 팩토리 메소드인
createPizza()
구현. 이 메소드에서 제품(피자 객체)을 생산 - 각 분점마다 PizzaStore의 서브클래스가 따로 있기 때문에 createPizza() 메소드 구현을 통해 그 가게 고유의 피자를 마음대로 생성 가능
Product 클래스
- Pizza : 팩토리에서는 제품을 생산.
- MYStyleCheesePizza, … : 구상 클래스.
팩토리 메소드 패턴 정의
팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이죠.
- 팩토리 메소드 패턴을 사용해
구상 형식의 인스턴스를 만드는 작업을 캡슐화
할 수 있음.
용어
- 팩토리 : 객체 생성을 처리하는 클래스