면접을 위한 CS 전공지식 노트 - 팩토리 패턴

Cold Bean 2023. 4. 21. 19:15
728x90
책 '면접을 위한 CS 전공지식 노트'를 읽고 정리한 내용입니다.

팩토리 패턴(Factory pattern)

객체를 생성하는 디자인 패턴 중 하나이다.

객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정한다.

객체 생성의 책임을 팩토리 클래스로 위임함으로써 객체를 생성하는 코드의 유연성과 재사용성을 높일 수 있다.

장점

  • 객체 생성의 책임을 팩토리 클래스에 위임하기 때문에 객체 생성 코드의 변경이나 유지보수가 쉬워진다.
  • 팩토리 클래스에서 한 번 작성하면 모든 클래스에서 재사용할 수 있기 때문에 객체 생성 코드의 중복을 제거해준다.
  • 상위 클래스는 인스턴스 생성 방식에 대해 알 필요가 없기 때문에 코드의 유연성이 높아진다.

자바에서의 팩토리 패턴

// 객체를 생성하는 인터페이스
public interface AnimalFactory {
    Animal createAnimal();
}

// 객체 생성 인터페이스를 구현하는 클래스
public class DogFactory implements AnimalFactory {
    @Override
    public Animal createAnimal() {
        return new Dog();
    }
}

// 객체 생성 인터페이스를 구현하는 클래스
public class CatFactory implements AnimalFactory {
    @Override
    public Animal createAnimal() {
        return new Cat();
    }
}

// 객체
public interface Animal {
    void makeSound();
}

// 객체를 구현하는 클래스
public class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍");
    }
}

// 객체를 구현하는 클래스
public class Cat implements Animal {
    @Override
    public void makeSound() {
        System.out.println("야옹");
    }
}

// 팩토리 패턴을 사용하는 클래스
public class Main {
    public static void main(String[] args) {
        AnimalFactory factory = new DogFactory();
        Animal animal = factory.createAnimal();
        animal.makeSound(); // 멍멍 출력

        factory = new CatFactory();
        animal = factory.createAnimal();
        animal.makeSound(); // 야옹 출력
    }
}

AnimalFactory 인터페이스를 구현하는 DogFactory와 CatFactory 클래스가 있고 Animal 인터페이스를 구현하는 Dog와 Cat 클래스가 있다.

Main 클래스에서 AnimalFactory 인터페이스의 구현체를 생성하고 createAnimal() 메서드를 호출하여 makeSound() 메서드를 호출하면 각 객체의 소리를 출력한다.

이렇게 팩토리 패턴을 사용하면 객체 생성과 사용을 분리할 수 있고, 유연하고 확장 가능한 코드를 작성할 수 있다.

728x90