[Java]팩토리 메서드(Factory Method) 패턴

엄진환·2021년 8월 11일
0

목적

객체를 생성하기 위한 기능을 정의하지만 서브클래스에서 연결할 객체를 결정하도록 책임을 분리한 디자인 패턴입니다.

사용하는 이유(동기)

객체와 객체 간의 관련성을 유지한 상태로 객체 내의 동작을 다르게 정의하여 새로운 서비스를 개발하기 위해서 사용합니다. 이 내용은 추상 팩토리 패턴과 유사하기 때문에 UML, 구현 이후 둘의 차이점을 마지막에 정리해보겠습니다.

UML

PC(Desktop), 모바일(Mobile)의 멀티 플랫폼에서 각각 버튼을 만들고 클릭하기 위한 UML을 그려봤습니다.

예제 코드

추상 클래스, 인터페이스 모두 상속받을 클래스에게 구현 명세를 전달하기 때문에 MyDialog, Button 클래스를 추상 클래스로 구현했습니다.(추상 팩토리 패턴과 동일)

메인 클래스

//Main
public class Main {
    public static void main(String[] args) {
        MyDialog myDialog = new MobileDialog();
        myDialog.startClick();
    }
}

버튼 관련 클래스

//Button
public abstract class Button {
    abstract void onClick();
}
//DesktopButton
public class DesktopButton extends Button {
    @Override
    public void onClick() {
        System.out.println("PC 버튼 클릭!");
    }
}
//MobileButton
public class MobileButton extends Button {
    @Override
    public void onClick() {
        System.out.println("모바일 버튼 클릭!");
    }
}

플랫폼 관련 클래스(Dialog)

//MyDialog
public abstract class MyDialog {
    public void startClick()
    {
        Button button = createButton();
        button.onClick();
    }

    abstract Button createButton();
}
//DesktopDialog
public class DesktopDialog extends MyDialog {
    @Override
    public Button createButton() {
        return new DesktopButton();
    }
}
//MobileDialog
public class MobileDialog extends MyDialog {
    @Override
    public Button createButton() {
        return new MobileButton();
    }
}

추상 팩토리 vs 팩토리 메서드

추상 팩토리

Main에서 구현과 팩토리 클래스와 연결을 담당하게 됩니다. 팩토리 클래스의 역할은 다른 클래스들과의 연결을 담당합니다.

팩토리 메서드

Main은 팩토리 클래스와 연결을 담당하게 됩니다. 팩토리 클래스에서는 구현을 담당하고 팩토리 클래스를 상속받은 서브 클래스에서 실제로 사용하는 클래스와의 연결을 담당합니다.

profile
개발 공부 블로그

0개의 댓글