JAVA

JAVA 디자인패턴 - 팩토리(Factory) 패턴

TECH 톡마스터 2023. 7. 12.

 

[ 목차 ]

    디자인패턴 - 팩토리(Factory) 패턴
    디자인패턴 - 팩토리(Factory) 패턴

    안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다.

    1. 팩토리(Factory) 패턴 이란?

    팩토리 패턴은 객체 생성을 처리하는 데 사용되는 디자인 패턴입니다. 이 패턴은 객체를 생성하기 위한 공통 인터페이스를 제공하며, 서브 클래스가 어떤 클래스의 인스턴스를 생성할지 결정할 수 있도록 합니다. 팩토리 메서드 패턴과 추상 팩토리 패턴이 주로 사용되는 팩토리 패턴의 두 가지 형태입니다.

    2. 팩토리(Factory) 패턴 구현 방법

    2.1. 팩토리 메서드 패턴

    간단한 팩토리 패턴으로, 서브 클래스가 객체 생성에 관련된 코드를 재정의할 수 있는 패턴입니다.

    interface Product {
        void createProduct();
    }
    
    class ConcreteProduct1 implements Product {
        @Override
        public void createProduct() {
            System.out.println("ConcreteProduct1 created.");
        }
    }
    
    class ConcreteProduct2 implements Product {
        @Override
        public void createProduct() {
            System.out.println("ConcreteProduct2 created.");
        }
    }
    
    abstract class ProductFactory {
        public abstract Product createProduct();
    }
    
    class ConcreteFactory1 extends ProductFactory {
        @Override
        public Product createProduct() {
            return new ConcreteProduct1();
        }
    }
    
    class ConcreteFactory2 extends ProductFactory {
        @Override
        public Product createProduct() {
            return new ConcreteProduct2();
        }
    }

    2.2. 추상 팩토리 패턴

    상호 관련성이 있는 여러 객체를 생성할 수 있는 인터페이스를 제공하는 패턴입니다.

    // Animals
    interface Animal {
        void makeSound();
    }
    
    class Dog implements Animal {
        @Override
        public void makeSound() {
            System.out.println("Dog: Woof!");
        }
    }
    
    class Cat implements Animal {
        @Override
        public void makeSound() {
            System.out.println("Cat: Meow!");
        }
    }
    
    // Animal Sounds
    interface AnimalSound {
        void playSound();
    }
    
    class DogSound implements AnimalSound {
        @Override
        public void playSound() {
            System.out.println("Playing dog sound...");
        }
    }
    
    class CatSound implements AnimalSound {
        @Override
        public void playSound() {
            System.out.println("Playing cat sound...");
        }
    }
    
    // Animal & AnimalSound Factory Interfaces
    interface AnimalFactory {
        Animal createAnimal();
        AnimalSound createAnimalSound();
    }
    
    // Concrete Factories
    class DogFactory implements AnimalFactory {
        @Override
        public Animal createAnimal() {
            return new Dog();
        }
    
        @Override
        public AnimalSound createAnimalSound() {
            return new DogSound();
        }
    }
    
    class CatFactory implements AnimalFactory {
        @Override
        public Animal createAnimal() {
            return new Cat();
        }
    
        @Override
        public AnimalSound createAnimalSound() {
            return new CatSound();
        }
    }
    
    // Client
    public class Main {
        public static void main(String[] args) {
            AnimalFactory dogFactory = new DogFactory();
            Animal dog = dogFactory.createAnimal();
            AnimalSound dogSound = dogFactory.createAnimalSound();
            dog.makeSound();
            dogSound.playSound();
    
            AnimalFactory catFactory = new CatFactory();
            Animal cat = catFactory.createAnimal();
            AnimalSound catSound = catFactory.createAnimalSound();
            cat.makeSound();
            catSound.playSound();
        }
    }

    3. 팩토리(Factory) 패턴의 장단점

    3.1. 장점

    • 객체 생성과 사용을 분리하여 결합도를 낮춥니다.
    • 새로운 클래스 추가 시 클라이언트 코드 수정이 필요 없어 확장성이 높습니다.
    • 객체 생성 과정 중복 줄여 코드 재사용성을 향상시킵니다.

    3.2. 단점

    • 코드의 복잡성이 증가할 수 있습니다.
    • 인터페이스를 강제해야 하므로 약간의 성능 저하가 발생할 수 있습니다.

    4. 팩토리(Factory) 패턴의 사용 예

    • 데이터베이스 연결 관리: 다양한 데이터베이스 연결 방식에 따라 적절한 연결 객체를 생성해 주는 팩토리 클래스를 사용할 수 있습니다.
    • UI 툴킷: 다양한 UI 요소를 동적으로 생성할 때 팩토리 패턴을 사용하여 다양한 UI 요소 클래스를 생성할 수 있습니다.
    • 이미지 리더: 다양한 이미지 형식에 대해서 적절한 이미지 리더 객체를 생성하는 팩토리 클래스를 사용할 수 있습니다.


    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴

     

    디자인패턴 - 어댑터(Adapter) 패턴

    [ 목차 ] 안녕하세요. 오늘 알아볼 패턴은 어댑터(Adapter) 패턴입니다. 1. 어댑터(Adapter) 패턴 이란? 어댑터 패턴은 디자인 패턴 중 하나로, 서로 다른 인터페이스를 가진 클래스 또는 객체를 협력할

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - Java 디자인패턴 - 옵저버(Observer) 패턴

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴

     

    디자인패턴 - 싱글톤(Singleton) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴 [ 목차 ] 안녕하세요. 자바에는 다양한 디자인 패턴이 존재하고, 각 패턴은 특정한 문제를 해결하기 위해 설계되었습니다. 적절한 디자인 패턴

    tech.dj-tiger.com

     

     

    댓글

    💲 추천 글