디자인 패턴 - III

그림자왕국·2021년 12월 6일
1

Design Patterns

목록 보기
3/5

팩토리 패턴

팩토리 패턴은 팩토리 클래스에서 인자를 받아 인자에 맞는 객체를 생성하는 디자인 패턴을 말한다.

new와 같은 명령어를 사용하는 대신 직접 함수를 호출하여 이 함수의 반환 값을 사용하여 객체를 생성하는 패턴이다.

Animal Factroy_func(Animal args) : retrun Cat()

팩토리 패턴의 장점은 오브젝트의 복잡한 생성 과정을 팩토리안에서 해결할 수 있어 클라이언트 는 생성 과정을 알고 있을 필요 없이 오직 객체만 주문하면 되니 효과적인 설계가 가능하다.


팩토리 메소드 패턴

팩토리 메소드 패턴의 차이점은 "상속" 이다. 원본 인터페이스 팩토리를 상속 받아 전용 객체를 생성하는 파생 클래스를 만들어 전용함수나 멤버를 추가하여 각 팩토리별로 차이점을 둘 수 있다.

팩토리 메소드 패턴의 핵심은 어떤 객체를 만들지를 인자로 결정하는 대신 상속을 통해 생성함수(Creator)를 오버라이드하여 파생 클래스로 오브젝트를 구분함으로서 각 팩토리 클래스를 직접 커스텀할 수 있다는 장점이 있다.
(특정 클래스에 카운트용 멤버 변수를 추가해서 얼마나 생성됐는지 확인하는 등)


추상 팩토리 패턴

추상 팩토리 패턴은 연관된 객체들을 캡슐화하여 객체의 집합을 생성하는 팩토리 패턴이다.
분기문을 통해서 어떤 일관된 객체를 생성할지 결정하고 인터페이스를 구현한 팩토리 클래스(ComputerFactory)를 통해 서로 관련성이 있는 객체의 집합을 생성할 수 있다.

public class ComputerFactory {
    public void createComputer(String type){
        ComputerFactory computerFactory;
        switch (type){ // 어떤 객체의 집합(군)을 생성할지
            case "Dell":
                computerFactory = new DellComputerFactory(); // Dell과 관련된 객체의 집합을 생성
                break;

            case "HP":
                computerFactory = new HPComputerFactory(); // HP와 관련된 객체의 집합을 생성
                break;
        }

        computerFactory.createKeyboard(); // 집합의 키보드 객체 부분을 생성
        computerFactory.createMouse(); // 집합의 마우스 객체 부분을 생성
    }
}

public class Clients {
    public static void main(String args[]){
        ComputerFactory factoryOfComputer = new ComputerFactory();
        factoryOfComputer.createComputer("Dell"); // Dell 분기 실행
    }
}

추상 팩토리 패턴을 사용한다면 여러 객체를 묶어서 생성할 때 각각 따로 생성할 필요 없이 일관되게 한 번에 생성할 수 있기에 간결한 설계 구조를 유지할 수 있다.

profile
언리얼 엔진 매니아입니다.

0개의 댓글