본문 바로가기
프로그래밍/JAVA

Factory 패턴

by 낭만가을 2020. 2. 1.

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

댓글