1. Factory 패턴 이란
아주 중요한 패턴중에 하나 입니다. Factory 패턴은 creational pattern 에 속하는 패턴입니다.
Factory 패턴은 객체생성로직 없이 객체를 만들어 내는 패턴입니다.. 인터페이스를 통해 만들어진 객체를 참조 하죠.
쉽게 설명해드리겠습니다. factory 는 한국어로 공장이란 뜻이죠. 즉 객체를 만들어내는 공장 입니다.
객체 선언은 보통 new 객체() 이런식으로 하죠. factory는 내부에서 그런 일을 해줍니다. 즉 factory를 가져다가 쓰는 부분에서는 new 객체()와 같은 식으로 변수를 선언할 필요가 없습니다. Abstract class나 인터페이스에 대해서 다양한 하위 구현체가 있을 경우에 사용하면 좋습니다. 사용법은 Factory.create(인자는 맘대로) 와 같이 됩니다.
실무에서 자주 쓰이는 패턴중 하나이니 아래와 같이 천천히 따라해보도록 하죠.
2. 따라하기
// animal 인터페이스를 만듭니다. 기본이 되는 interface 죠. 모든 디자인 패턴은 interface 를 사용한다 해도 과언이 아닙니다.
package com.designfattern.factory;
public interface Animal {
public void shout();
}
// Cat 클래스를 만듭니다.
package com.designfattern.factory;
public class Cat implements Animal {
public void shout() {
System.out.println("고양이 : 야옹 야옹 야옹");
}
}
// Cow 클래스를 만듭니다.
package com.designfattern.factory;
public class Cow implements Animal {
public void shout() {
System.out.println("소 : 음메 음메 음메");
}
}
// Dog 클래스를 만듭니다.
package com.designfattern.factory;
public class Dog implements Animal {
public void shout() {
System.out.println("개 : 멍 멍 멍");
}
}
// animal 을 만들어내는 AnimalFactory 클래스를 만든다.
( 이 class 가 핵심 입니다. factory 패턴을 구현한곳이죠. 이해하기 힘드시다면 이 class 만 30번 보시면 이해가 되실겁니다.)
package com.designfattern.factory;
public class AnimalFactory {
public static Animal create(String animalName){
// animalName 에 대한 클래스를 제조해 만들어 냅니다.
if (animalName.equals("Cow")) {
return new Cow();
}else if (animalName.equals("Cat")) {
return new Cat();
}else if (animalName.equals("Dog")) {
return new Dog();
}else{
return null;
}
}
}
// 자 테스트를 한번 해볼까요.
import com.designfattern.factory.Animal;
import com.designfattern.factory.AnimalFactory;
public class Main {
public static void main(String[] args) {
Animal a1= AnimalFactory.create("Cow");
a1.shout();
Animal a2= AnimalFactory.create("Cat");
a2.shout();
Animal a3= AnimalFactory.create("Dog");
a3.shout();
}
}
//결과
소 : 음메 음메 음메
고양이 : 야옹 야옹 야옹
개 : 멍 멍 멍
3. Factory 의 이해
위의 결과와 같이 Animal interface 를 이용해서 각자 다른 소리를 내는 3개의 클래스를 만들어 봤습니다.
AnimalFactory 클래스에서는 각 동물들의 이름을 받아서 클래스를 만들어 냈습니다. 즉 팩토리 패턴을 구현해 놓은 클래스 입니다.
테스트를 실행하는 main 클래스 안에는 new 라는 구문 자체가 없습니다 팩토리 패턴은. 정확히 어떤 클래스의 인스턴스인지 신경쓰지 않고 구현할 수 있는 장점이 있습니다. 객체 타입이 굉장히 유연해 질 수 있죠.
이것으로 아주 쉽게 배우는 factory 패턴을 마치고자 합니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
Template 패턴 (0) | 2020.02.01 |
---|---|
Builder 패턴 (0) | 2020.02.01 |
Adapter 패턴 (0) | 2020.02.01 |
Iterator 패턴 (0) | 2020.02.01 |
디자인패턴 종류별 간단 암기 노트 (0) | 2020.01.30 |
댓글