1. 개요

 
이 예제에서는 Java에서 제네릭을 사용하여 팩토리 패턴을 구현하는 방법을 배웁니다.

2. 팩토리 패턴이란?

 
객체 지향 프로그래밍에서 팩토리 패턴은 호출될 때 객체 생성을 담당 하는

생성 디자인 패턴 입니다.

팩토리는 메소드 호출에서 프로토타입 클래스(일명 인터페이스)의 객체를 생성하는 클래스입니다.

공장팩토리 패턴은 사용자에게 생성 로직을 숨기면서 공통 인터페이스의 객체를 생성하고자 할 때 좋습니다.

3. 어떻게 구현합니까?

 
이제 구현하는 방법을 알아보겠습니다. 먼저 클래스 다이어그램을 살펴보겠습니다.
클래스다이어그램이제 다이어그램에서 각 클래스를 구현해 보겠습니다.

3.1. 알리미 인터페이스 구현

 

Notifier

인터페이스 는 프로토타입이며 다른 알림 클래스가 이를 구현합니다.
public interface Notifier<T> {
    void notify(T obj);
}
보시다시피 

Notifier 클래스는

notify

라는 메서드가 하나 있는 일반 클래스입니다  .

3.2. 알리미 클래스 구현

 
이제 두 개의 다른 알리미 클래스를 구현해 보겠습니다.
public class StringNotifier implements Notifier<String> {

    @Override
    public void notify(String str) {
        System.out.println("Notifying: " + str);
    }
}

public class DateNotifier implements Notifier<Date> {

    @Override
    public void notify(Date date) {
        System.out.println("Notifying: " + date);
    }
}
이제

Notifier 

인터페이스를 사용하는 두 개의 클래스가 있습니다. 하나는 간단한 텍스트를 출력하고 다른 하나는 날짜를 게시합니다.

3.3. Factory 구현

 

팩토리 클래스는 유일한 메소드인 getNotifier()

가 호출 될 때마다 알리미 인스턴스를 생성합니다 :
public class NotifierFactory {

    public <T> Notifier<T> getNotifier(Class<T> c) {
        if (c == String.class) {
            return Record.STRING.make();
        }
        if (c == Date.class) {
            return Record.DATE.make();
        }
        return null;
    }

}
위의 코드에서 

Record  는

STRING

DATE

라는 두 개의 상수가 있는 열거형입니다 .

3.4. 기록 구현

 

Record 열거형은 유효한 알리미 클래스 의  레코드를 유지하고 팩토리 클래스가 호출할 때마다 인스턴스를 생성합니다

.
public enum Record {
    STRING {
        @Override
        public Notifier<String> make() {
            return new StringNotifier();
        }
    },
    DATE {
        @Override
        public Notifier<Date> make() {
            return new DateNotifier();
        }
    };

    public abstract <T> Notifier<T> make();
}
팩토리 패턴을 성공적으로 구현했습니다.

4.  이용

 

Main

클래스 에서 팩토리를 사용합시다 .
public static void main(String[] args) {
    NotifierFactory factory = new NotifierFactory();
    Notifier<String> stringNotifier = factory.getNotifier(String.class);
    Notifier<Date> dateNotifier = factory.getNotifier(Date.class);

    stringNotifier.notify("Hello world!");
    dateNotifier.notify(new Date());
}
이제 코드를 컴파일하고 실행해야 합니다.
$ javac Main.java
$ java Main
Notifying: Hello world!
Notifying: Wed Oct 19 17:36:38 TRT 2022
보시다시피 팩토리는 적절한 유형의 두 가지 알림 인스턴스를 성공적으로 생성했습니다.

5. 요약

 
이 기사에서는 Java에서 팩토리 패턴을 구현하고 사용하는 방법을 배웠습니다.항상 그렇듯이 소스 코드는

GitHub 에서

사용할 수 있습니다 .
Generic footer banner