drexqq

[Java, 자바] Factory Pattern(팩토리패턴) 본문

Back-End/Java

[Java, 자바] Factory Pattern(팩토리패턴)

drexqq 2020. 6. 11. 18:38
728x90
반응형

Java의 디자인패턴인 Factory Pattern에 대해서 알아보자.

 

간단히 말하면 팩토리 패턴은 객체 생성을 대신 해주는 곳이라고 생각하면 된다.

이름에서 유추할 수 있듯이 공장같은 역할을 해준다.

 

예제를 보면서 이해해보자.

package animal;

public interface Animal {
	
	public void printDescript();
}

 

일단 Animal이라는 인터페이스를 생성해주었다.

 

package animal;

public class Cat implements Animal {

	@Override
	public void printDescript() {
		System.out.println("고양이입니다.");
	}
	public void catMethod() {
		System.out.println("야옹");
	}
}
public class Cow implements Animal {

	@Override
	public void printDescript() {
		System.out.println("소입니다.");
	}
	
	public void cowMethod() {
		System.out.println("음메");
	}
}
public class Dog implements Animal {
	
	@Override
	public void printDescript() {
		System.out.println("강아지입니다");
	}
	public void dogMethod() {
		System.out.println("멍멍");
	}

}

 

그리고 Animal이라는 인터페이스를 implements 시킨 클래스 고양이, 강아지, 소를 만들어주었다.

 

 

이제 factory 클래스를 만들어보자.

 

package factory;

import animal.Animal;
import animal.Cat;
import animal.Dog;
import animal.Cow;

public class AnimalFactory {
	
	public static Animal create(String AnimalName) {
		if (AnimalName == "") {
			System.out.println("생성할 클래스가 없습니다.");
		}
		if (AnimalName.equals("야옹이")) {
			return new Cat();
		}
		if (AnimalName.equals("강아지")) {
			return new Dog();
		}
		if (AnimalName.equals("소")) {
			return new Cow();
		}
		return null;
	}
}

 

위처럼 AnimalFactory라는 클래스 안에서 Animal형태의 값을 반환하는 static메서드인 create를 작성해주고 파라미터로 String 형태의 값을 받아온다.

 

그 뒤 조건문으로 파라미터의 갑을 비교해주며 Animal인터페이스에서 상속받은 클래스 3가지를 생성해 줄 수 있다.

 

package main;

import java.util.ArrayList;
import java.util.List;

import animal.Animal;
import animal.Cat;
import animal.Cow;
import animal.Dog;
import factory.AnimalFactory;

public class mainClass {
	public static void main(String[] args) {
		List<Animal> list = new ArrayList<Animal>();

		Animal ani = null;
		
		String aname[] = { "소", "소", "야옹이", "야옹이", "야옹이", "강아지", "강아지"};
		for (int i = 0; i < aname.length; i++) {
			ani = AnimalFactory.create(aname[i]);
			list.add(ani);
		}
		for (int i = 0; i < list.size(); i++) {
			Animal a = list.get(i);
			a.printDescript();
			
			if (a instanceof Cat) {
				((Cat) a).catMethod();
			}
			else if (a instanceof Dog) {
				((Dog) a).dogMethod();
			}
			else if (a instanceof Cow) {
				((Cow) a).cowMethod();
			}
		}
		
	}
}

 

이제 메인함수에서 실행한 결과를 보자

소입니다.
음메
소입니다.
음메
고양이입니다.
야옹
고양이입니다.
야옹
고양이입니다.
야옹
강아지입니다
멍멍
강아지입니다
멍멍

 

위 결과처럼 String의 값을 차례로 넣어주니 해당하는 클래스의 생성자가 생성되는 것을 볼 수 있다.

728x90
반응형

'Back-End > Java' 카테고리의 다른 글

[Java, 자바] 소수 판별함수 (isPrime)  (0) 2021.06.18
[Java, 자바] Observer  (0) 2020.06.17
[Java, 자바] Singleton(싱글톤)  (0) 2020.06.10
[Java, 자바] 스택(Stack), 큐(Queue)  (0) 2020.06.10
[Java, 자바] HashMap, TreeMap  (0) 2020.06.10
Comments