Java 디자인패턴 - 팩토리 메소드 패턴
이번 시간에는 자바 디자인 패턴 중 팩토리 메소드 패턴(Factory Method Pattern)에 대해서 쉬운 예제와
함께 설명 드리려 합니다.
팩토리 메소드 패턴은 요약해서 말씀드리면 객체 생성을 대신 수행해주는 공장이라고 생각하시면 이해가
빠르실 겁니다.
객체는 직접 생성하는 경우가 있고 팩토리 메소드 패턴의 역할처럼 간적접으로 객체 생성 후 반환해주는
방식으로 생각해 볼 수 있습니다.
해당 패턴은 아래와 같은 장단점이 존재합니다.
- 생성 할 클래스를 미리 알지 못해도 팩토리 클래스가 객체 생성 담당
- 객체의 자료형이 하위클래스에 의해서 결정 -> 확장 용이성
- 동일한 형태로 프로그래밍 가능
- 확장성 있는 전체 프로젝트 구성 가능
- 객체가 늘어날 때 마다 하위클래스 재정의로 인한 불필요한 많은 클래스 생성 가능성
아래 설명을 읽어보시고 예제 소스코드를 학습하시면 쉽게 이해하실 수 있을 거라 생각합니다.
Java 관련 포스팅 : Java 관련
Java 관련 포스팅 : Java 관련
Java Factory(팩토리) Method Pattern - 구조 설명
아래와 같은 다이어그램으로 나타낼 수 있으며, 세부 항목은 하단에서 설명합니다.
팩토리 메소드 패턴 구조(Structure)
Java Factory(팩토리) Method Pattern - 예제 소스 코드
팩토리 메소드 패턴을 적용한 6개의 파일로 구성되어 있는예제 소스 코드 입니다.ShapeFactory.java
클래스가 각 도형 객체를 반환 후 해당 도형을 그리는 작업입니다.
이번 패턴의 어렵지 않은 내용이니 차근차근 소스코드를 분석해 보시기 바랍니다.
Shape.java
123456 public class Circle implements Shape{ @Override public void draw() { System.out.println("Circle - draw() Method."); }} cs
1 2 3 4 5 6 | public class Circle implements Shape{ @Override public void draw() { System.out.println("Circle - draw() Method."); } } | cs |
Rectangle.java
Rectangle.java
123456 public class Rectangle implements Shape{ @Override public void draw() { System.out.println("Rectangle - draw() Method."); }} cs
1 2 3 4 5 6 | public class Rectangle implements Shape{ @Override public void draw() { System.out.println("Rectangle - draw() Method."); } } | cs |
Square.java
Square.java
123456 public class Square implements Shape{ @Override public void draw() { System.out.println("Square - draw() Method."); }} cs
1 2 3 4 5 6 | public class Square implements Shape{ @Override public void draw() { System.out.println("Square - draw() Method."); } } | cs |
ShapeFactory.java
ShapeFactory.java
1234567891011121314151617181920 public class ShapeFactory { //팩토리 메소드 - 객체 생성 후 반환 public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equalsIgnoreCase("CIRCLE")){ return new Circle(); } else if(shapeType.equalsIgnoreCase("RECTANGLE")){ return new Rectangle(); } else if(shapeType.equalsIgnoreCase("SQUARE")){ return new Square(); } return null; }} cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class ShapeFactory { //팩토리 메소드 - 객체 생성 후 반환 public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equalsIgnoreCase("CIRCLE")){ return new Circle(); } else if(shapeType.equalsIgnoreCase("RECTANGLE")){ return new Rectangle(); } else if(shapeType.equalsIgnoreCase("SQUARE")){ return new Square(); } return null; } } | cs |
FactoryPatternTest.java
FactoryPatternTest.java
12345678910111213141516171819202122 public class FactoryPatternTest { public static void main(String[] args) { //팩토리 클래스에서 객체를 생성 후 반환 ShapeFactory shapeFactory = new ShapeFactory(); Shape shape1 = shapeFactory.getShape("CIRCLE"); //Circle 메소드 호출 shape1.draw(); Shape shape2 = shapeFactory.getShape("RECTANGLE"); //Rectangle 메소드 호출 shape2.draw(); Shape shape3 = shapeFactory.getShape("SQUARE"); //Square 메소드 호출 shape3.draw(); }} cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class FactoryPatternTest { public static void main(String[] args) { //팩토리 클래스에서 객체를 생성 후 반환 ShapeFactory shapeFactory = new ShapeFactory(); Shape shape1 = shapeFactory.getShape("CIRCLE"); //Circle 메소드 호출 shape1.draw(); Shape shape2 = shapeFactory.getShape("RECTANGLE"); //Rectangle 메소드 호출 shape2.draw(); Shape shape3 = shapeFactory.getShape("SQUARE"); //Square 메소드 호출 shape3.draw(); } } | cs |
참조 : java Design Pattern 의 QuickGuide 및 추가 정보는 이 곳을 참고해 주세요.
참조 : java Design Pattern 의 QuickGuide 및 추가 정보는 이 곳을 참고해 주세요.
Java Factory Method Pattern - 클래스 다이어그램(UML) 및 예제 실행
위의 예제는 아래와 같은 클래스 다이어그램으로 표현 가능합니다.
Class Diagram
소스 코드 작성 후 실행하시면 아래와 같이 동작하는 화면을 확인하실 수 있습니다.
실제 실행 화면
마무리
팩토리 메소드 패턴을 다시 한 번 정리하면 객체 생성을 담당 및 처리하는 팩토리 클래스 라고 이해하시면
될 것 같습니다.
팩토리 클래스만 관리하면 되므로 객체 생성에 관한 확장도 쉽게 구성할 수 있다는 이점이 있습니다.
물론, 해당 패턴도 깊게 들어가면 의존성 원칙 및 추상 팩토리, 정적팩토리 등 여러가지 복잡한 이론이
존재하지만, 핵심적인 부분을 먼저 이해하신 후 조금씩 깊게 들어가보시는 것도 빠른 학습에 도움이 될 것으로 생각됩니다.
다양한 디자인 패턴 학습 후에 객체 지향이 제공하는 추상화, 상속, 다형성, 캡슐화 등에 관한 많은
이점을 통해서 저와 여러분의 스킬이 향상 되기를 기대해봅니다.
이어지는 포스팅에서는 자바 싱글톤 패턴(Singleton Pattern)에 대해 설명하겠습니다.
감사합니다.
소스코드 다운로드 : factory_m-pattern.zip
'언어 > Java' 카테고리의 다른 글
Java(자바) 알고리즘 - 로지스틱회귀(Logistic Regression) 오픈소스 및 예제 (0) | 2018.10.18 |
---|---|
Java(자바) 알고리즘 - 나이브베이지안(Naive Bayesian) 오픈소스 및 예제 (0) | 2018.10.15 |
Java(자바) 디자인패턴 - 템플릿 메소드(Template Method) 패턴 설명 및 예제소스 (1) | 2018.05.18 |
Java(자바) 디자인패턴 - 어댑터(Adapter) 패턴 설명 및 예제소스 (0) | 2018.05.15 |
Java(자바) 디자인패턴 - 전략(Strategy) 패턴 설명 및 예제소스 (3) | 2018.04.18 |