일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 솔리디티
- 그대로 출력하기
- 가상 화폐
- 블록 체인
- 이더리움
- Baekjoon
- Dapp
- 2448
- 10817
- 1110
- 자바스크립트
- 1065
- if문 사용해보기
- 1546
- Mist
- 알고리즘 문제풀이
- 단계별로 풀어보기
- 시험 성적
- 1%d
- Remix
- 10871
- 비트 코인
- 백준
- 함수 사용하기
- 평균은 넘겠지
- 별 찍기 - 11
- X보다 작은 수
- for문 사용해보기
- 세 수
- 더하기 사이클
- Today
- Total
블링블링 범블링
추상팩토리패턴(Abstract Factory Pattern) 본문
추상팩토리패턴(Abstract Factory Pattern)
추상팩토리 패턴은 많은 수의 연관된 서브 클래스를 특정 그룹으로 묶어 한번에 교체할 수 있도록 만든 디자인패턴이다. 대표적인 예로는 특정 라이브러리를 배포할 때 OS별로 지원하는 기능이 다르다면 추상 팩토리 패턴을 사용해 OS별 기능 변경을 통합적으로 변경할 수 있다.
이처럼 추상팩토리 패턴은 다양한 구성 요소 별로 "객체의 집합"을 생성해야 할 때 유용한 패턴이다. 다시 말해서, 서로의 다른 객체들을 하나의 팩토리에서 생성과 관리를 한다고 보면된다. 하나의 인터페이스에서 객체의 생성을 처리하고, 다양한 성격의 객체를 하나의 군으로 형성해 그것을 객체 단위로 취급하여 생성해야할 때 유용한 패턴이다.
예시를 통해 다시 공부해보자. 실제 공장을 생각하면서 코드를 실행해 본다. 실제 제과점공장이 있다고 할 때 케익을 만드는 기계이 있고, 케익과 함께 먹을 음료를 만드는 기계가 있다고 가정을 한다. 그리고 이 제품을 만드는 공장들이 있다고할 때 다양한 제품들을 만들어 내는 곳은 이 공장에서 만들어진다. 이 예시를 코드를 통해 확인해보자.
[클래스다이어그램]
케익을 만드는 기계와 음료를 만드는 기계가 있고, 각각의 다른 구성들을 가지고 있다. 이를 생산하는 공장에서 이들 구성 중에 특정 객체를 생성해서 하나의 집합을 생산할 수 있다. 추상팩토리의 특징인 다양한 성격의 객체를 하나의 군으로 형성해 그것을 객체 단위로 취급하여 생성할 수 있도록한다.
[소스코드]
[CakeMachine : Product1]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public interface CakeMachine { public void process(); } public class CheeseCakeMachine implements CakeMachine{ @Override public void process() { System.out.println( "치크케익을 만들어요" ); } } public class CreamCakeMachine implements CakeMachine{ @Override public void process() { System.out.println( "생크림케이크를 만들어요" ); } } |
[BeverageMachine : Product2]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public interface BeverageMachine { public void process(); } public class CoffeeMachine implements BeverageMachine { @Override public void process() { System.out.println( "커피를 만들어요" ); } } public class MilkMachine implements BeverageMachine { @Override public void process() { System.out.println( "우유를 만들어요" ); } } |
[MachineFactory : Abstract Factory]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public interface MachineFactory { public CakeMachine getCakeMachine(); public BeverageMachine getBeverageMachine(); } public class MachineFactoryA implements MachineFactory{ @Override public CakeMachine getCakeMachine() { return new CheeseCakeMachine(); } @Override public BeverageMachine getBeverageMachine() { return new CoffeeMachine(); } } public class MachineFactoryB implements MachineFactory{ @Override public CakeMachine getCakeMachine() { return new CreamCakeMachine(); } @Override public BeverageMachine getBeverageMachine() { return new MilkMachine(); } } |
[MainFactory : Client]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class FactoryMain { public static void main(String[] args) { System.out.println( "setA제품은" ); MachineFactory setA = new MachineFactoryA(); setA.getCakeMachine().process(); setA.getBeverageMachine().process(); System.out.println( "setB제품은" ); MachineFactory setB = new MachineFactoryB(); setB.getCakeMachine().process(); setB.getBeverageMachine().process(); } } |
[팩토리메서드패턴과 추상팩토리의 다른점]
-추상팩토리패턴
추상팩토리패턴은 객체를 사용해 제품을 만들고, 객체의 구성을 통해서 객체를 만든다.
추상팩토리패턴은 제품군을 만들기 위한 추상 형식을 제공하고 있다. 제품이 생산되는 방법은 서브 클래스에서 정의된다. 따라서 팩토리 메소드 패턴을 쓸 때와 마찬가지로 클라이언트와 클라이언트에서 사용하는 실제 구상 제품이 분리된다.
-팩토리메서드패턴
팩토리메서드패턴과 클래스를 사용해서 제품을 만들고, 상속을 통해서 객체를 만든다.
팩토리메서드패턴을 사용하는 이유는 서브클래스를 통해 객체를 만들기 위함이고, 클라이언트와 구상클래스를 분리시켜주는 역할을 한다.
출처 위키디피아 팩토리메서드와 추상팩토리의다른점 추상팩토리메서드
출처 : http://meylady.tistory.com/
'Technology > 객체 지향 디자인 패턴' 카테고리의 다른 글
싱글톤 패턴(SingleTon Pattern) (0) | 2018.07.10 |
---|---|
옵저버 패턴(Observer Pattern) (0) | 2018.04.18 |
팩토리 메서드 패턴(Factory Method Pattern) (0) | 2018.04.18 |
프록시 패턴(Proxy Pattern) (0) | 2018.04.18 |
데코레이터 패턴(Decorator Pattern) (0) | 2018.04.18 |