☆ 팩토리 패턴이란?

Singleton 패턴은 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다. 

이 패턴은 전역 접근을 제공하며, 여러 스레드에서 안전하게 사용할 수 있도록 구현할 수 있습니다.

--> 공유(접근)해야 될 데이터나 클래스로서 어디서나(클래스) 접근이 용이하도록 만든 패턴.

 

☆ 기본 구조 - 코드 예시

프로젝트 구조

 

animal
|-- Animal (인터페이스)
public interface Animal {
    void printDescript();
}

 

animal
|-- Cat (클래스)
public class Cat implements Animal {
    @Override
    public void printDescript() {
        System.out.println("야옹야옹");
    }
}

 

factory
|-- AnimalFactory (팩토리 클래스)

 

[메모] create() 메소드가 static 이면 main함수에서 호출될 때 더 쓰기가 편하다.

예를 들어, 현재 코드처럼 static이라면

main함수 안에서는 AnimalFactory.create("멍멍이") 이렇게 쓰기만 하면 되는데,

static이 아니라면 main 함수에서 호출하기 위해서

AnimalFactory af = new AnimalFactory();

af.create("멍멍이")

이렇게 써야 한다.

public class AnimalFactory {

    public static Animal create(String name) {
        if (name.equals("야옹이")) {
            return new Cat();
        }
        else if (name.equals("멍멍이")) {
            return new Dog();
        }
        else if (name.equals("황소")) {
            return new Cow();
        }

        return null;
    }
}

 

main
|-- MainClass
public class MainClass {
    public static void main(String[] args) {
        /*
        // 하나씩 생성
        Animal ani1 = AnimalFactory.create("멍멍이");
        Animal ani2 = AnimalFactory.create("야옹이");
        Animal ani3 = AnimalFactory.create("황소");

        ani1.printDescript();
        ani2.printDescript();
        ani3.printDescript();
        */

		// 식별자(=이름)을 배열에 미리 넣고, ArrayList에 인스턴스 삽입
        List<Animal> animalList = new ArrayList<>();
        String[] names = { "멍멍이", "황소", "황소", "멍멍이", "야옹이", "야옹이", "야옹이", "멍멍이" };

		// Factory 클래스를 사용해서 인스턴스 생성 후 ArrayList에 삽입
        for (String name : names) {
            Animal ani = AnimalFactory.create(name);
            animalList.add(ani);
        }

		// 메소드 호출
        for (Animal a : animalList) {
            a.printDescript();
        }
    }
}

+ Recent posts