객체지향 (OOP)/디자인 패턴

팩토리 메서드 패턴(Factory method pattern)

고인돌개발자 2021. 6. 30. 22:22

정의[위키피디아]

팩토리 메서드 패턴(Factory method pattern)은 객체지향 디자인 패턴이다.

Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다.

부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다.

 


예제를 보며 이해하기

 

<Class UML>

 

1. 객체를 반환하는 추상 클래스 Animal.java

public abstract class Animal {
	// 추상 팩터리 메서드
	abstract AnimalToy getToy();
}

2. Animal 클래스의 return 객체 AnimalToy.java

// 팩터리 메서드가 생성할 객체의 상위 클래스
public abstract class AnimalToy {
	
	abstract void identify();

}

3. 위 두개의 추상클래스를 상속받는 Dog

public class Dog extends Animal {
	// 추상 팩터리 메서드 오버라이딩
	@Override
	AnimalToy getToy() {
		return new DogToy();
	}
}

// 팩터리 메서드가 생성할 객체 
public class DogToy extends AnimalToy {
	
	@Override
	void identify() {
		System.out.println("나는 테니스공! 강아지의 친구!");
	}
}

4. 위 두개의 추상클래스를 상속받는 Cat

public class Cat extends Animal {
	// 추상 팩터리 메서드 오버라이딩
	@Override
	AnimalToy getToy() {
		return new CatToy();
	}
}



public class Cat extends Animal {
	// 추상 팩터리 메서드 오버라이딩
	@Override
	AnimalToy getToy() {
		return new CatToy();
	}
}

5. 실행 main()

public class Driver {

	public static void main(String[] args) {
		// 팩터리 메서드를 보유한 객체들 생성
		Animal bolt = new Dog();
		Animal kitty = new Cat();
		
		// 팩터리 메서드가 반환하는 객체들 
		AnimalToy boltBall = bolt.getToy();
		AnimalToy kittyTower = kitty.getToy();
		
		// 팩터리 메서드가 반환하는 객체들을 사용
		boltBall.identify();
		kittyTower.identify();

	}
}

팩터리는 공장을 의미한다.
공장은 물건을 생산하는데 객체 지향에서 팩터리는 객체를 생성한다.
결국 팩터리 메서드는 객체를 생성 반환하는 메서드를 말한다.

"오버라이드된 메서드가 객체를 반환하는 패턴"


참고서적 : 스프링 입문을 위하 자바 객체지향의 원리와 이해