Design Patterns - Factory Method Pattern

2021. 2. 4. 17:55Developments/Design Pattern

  이번에는 Factory Method Pattern에 대해 알아보겠습니다. 디자인 패턴을 아직 많이 공부하진 않았지만 개인적으로 여태까지 배운 것 중에 가장 흥미로운 디자인 패턴입니다.


Factory Method Pattern

  Factory Method Pattern이란 이름에서도 알 수 있듯이 공장처럼 찍어내는 메쏘드를 이용한 디자인 패턴입니다. 공장에서 어떤 것을 찍어내냐면 객체 지향 프로그래밍을 위한 객체를 찍어내는 것이죠. 바로 코드부터 보시면 이해하기 훨씬 수월할 것입니다. 

ublic class FactoryPattern {
	public static void main(String[] args) {
		Transportation tp1 = Transportation.constructors('A');
		Transportation tp2 = Transportation.constructors('C');
		Transportation tp3 = Transportation.constructors('B');
		Transportation tp4 = Transportation.constructors('S');
		Transportation tp5 = Transportation.constructors('T');
	}
}

class Transportation {
	public Transportation() {}

	public static Transportation constructors(char c) {
		switch (c) {
		case 'A':
			return new Airplane();
		case 'B':
			return new Bus();
		case 'C':
			return new Car();
		case 'S':
			return new Subway();
		case 'T':
			return new Taxi();
		default:
			return null;
		}
	}
}

class Airplane extends Transportation {
	public Airplane() {}
}

class Car extends Transportation {
	public Car() {}
}

class Bus extends Transportation {
	public Bus() {}
}

class Subway extends Transportation {
	public Subway() {}
}

class Taxi extends Transportation {
	public Taxi() {}
}

  위 코드는 아주 간단하게 대중교통의 객체를 생성하는 코드입니다. 대중교통이라고 하면 매우 다양해서 객체를 생성하기 위해서는 각각 객체를 선언하고 각각의 생성자를 이용해서 생성해야 합니다. 하지만 위와 같이 Factory Method Pattern을 이용하면 각각의 생성자를 호출할 필요 없지 Transportation에서 생성자들을 모아 놓은 constructors 메서드를 이용해서 일괄적으로 객체를 생성할 수 있습니다.


Factory Method Pattern의 이점

  1. Capsulization
    • 기존에는 객체를 생성할 때마다 new 연산자와 생성자를 이용하여 객체를 생성 → 객체를 수정하는 경우 new 연산자로 생성된 모든 객체를 수정
    • Factory Method Pattern을 이용하면 Capsulization이 가능 → 위 예시에서 Transportationconstructors만 수정
  2. new 연산자를 이용하는 하드코딩으로부터 벗어나게 해주어 외부와 소통구조를 형성

'Developments > Design Pattern' 카테고리의 다른 글

Design Patterns - Method Chaining Pattern  (0) 2021.02.04
Design Patterns - Singleton Pattern  (0) 2021.01.23