자바 팩토리 패턴Java2024. 9. 25. 13:10
Table of Contents
반응형
자바에서 팩토리 패턴(Factory Pattern)은 객체 생성 로직을 캡슐화하여, 객체 생성 방식을 외부에서 숨기고 다양한 객체를 동적으로 생성할 수 있게 해주는 디자인 패턴입니다. 이 패턴은 객체 생성의 복잡성을 줄이고, 유지보수를 쉽게 하기 위해 사용됩니다.
팩토리 패턴에는 크게 두 가지 유형이 있습니다:
팩토리 메서드 패턴 (Factory Method Pattern):
- 상속을 통해 객체 생성 방식을 서브클래스에서 결정하게 하는 패턴입니다.
- 인터페이스나 추상 클래스를 통해 객체를 생성할 때, 구체적인 클래스는 서브클래스에서 정의되며, 클라이언트는 객체의 생성 과정을 알 필요가 없습니다.
예시:
abstract class Animal { abstract void sound(); } class Dog extends Animal { void sound() { System.out.println("Woof!"); } } class Cat extends Animal { void sound() { System.out.println("Meow!"); } } abstract class AnimalFactory { abstract Animal createAnimal(); } class DogFactory extends AnimalFactory { Animal createAnimal() { return new Dog(); } } class CatFactory extends AnimalFactory { Animal createAnimal() { return new Cat(); } } public class Main { public static void main(String[] args) { AnimalFactory factory = new DogFactory(); Animal animal = factory.createAnimal(); animal.sound(); // 출력: Woof! } }
추상 팩토리 패턴 (Abstract Factory Pattern):
- 여러 관련된 객체들의 군을 생성할 수 있는 인터페이스를 제공합니다. 각 군은 서로 관련된 제품군을 생성하며, 구체적인 객체를 생성하는 책임을 팩토리 클래스에서 처리합니다.
- 추상 팩토리 패턴은 여러 팩토리 메서드의 묶음을 제공하고, 각 메서드가 관련된 객체들을 반환하는 방식입니다.
예시:
interface Button { void paint(); } class WinButton implements Button { public void paint() { System.out.println("윈도우 버튼"); } } class MacButton implements Button { public void paint() { System.out.println("맥 버튼"); } } interface GUIFactory { Button createButton(); } class WinFactory implements GUIFactory { public Button createButton() { return new WinButton(); } } class MacFactory implements GUIFactory { public Button createButton() { return new MacButton(); } } public class Main { public static void main(String[] args) { GUIFactory factory = new WinFactory(); Button button = factory.createButton(); button.paint(); // 출력: 윈도우 버튼 } }
팩토리 패턴의 장점:
- 유연성 증가: 객체 생성 로직이 캡슐화되어 있으므로, 새로운 클래스가 추가되거나 변경되어도 코드 수정이 최소화됩니다.
- 결합도 감소: 클라이언트 코드와 객체 생성 로직의 결합도를 줄여 더 유연하고 유지보수하기 쉽게 만듭니다.
팩토리 패턴은 대규모 시스템에서 객체 생성이 복잡하거나, 객체 생성을 분리해 유지보수를 쉽게 하고자 할 때 유용하게 사용됩니다.
반응형
@위피M :: ChatGPT로 여는 새로운 세상!!
ChatGPT, 블록체인, 자바, 맥북, 인터넷, 컴퓨터 정보를 공유합니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!