본문 바로가기
스터디/Design Pattern

디자인 패턴 - 팩토리 메소드 패턴 (Factory Method Pattern)

by 헤콩 2020. 5. 30.
반응형

팩토리 패턴 (Factory Pattern)

 

 

- 생성 패턴 (Creational Pattern) 중 하나

    => 인스턴스를 만드는 절차를 추상화

    => 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해줍니다.

    => 무엇이 생성되고, 누가 이것을 생성하는지, 어떻게 생성되는지, 언제 생성되는지 결정하는 데 있어서 유연성을 높일 수 있습니다.

 

- 객체 생성 처리를 서브 클래스로 분리하여 처리 => 캡슐화

- 클래스의 인스턴스를 만드는 시점을 서브 클래스로 미뤄요.

- 추상화 된 것에 의존하도록, 구상 클래스에 의존하지 않도록 합니다.

- 서로 간의 종속성을 낮추고, 결합도를 느슨하게 하며, 확장을 쉽게 합니다.

        => 예를 들어, PC 클래스에 대해 수정이 일어나더라도, 클라이언트는 알 수 없기 때문에 코드를 변경할 필요 없습니다.

- Factory pattern은 클라이언트와 구현 객체들 사이에 추상화 제공

   

       1. 어떤 클래스가 자신이 생성해야하는 객체의 클래스를 예측할 수 없을 때 사용

       2. 생성할 객체를 기술하는 책임을 자신의 서브클래스가 지정했으면 할 때 사용


Super Class ( Computer )

public abstract class Computer {
    public abstract String getRAM();
    public abstract String getHDD();
    public abstract String getCPU();

    @Override
    public String toString() {
        return "RAM: "+this.getRAM()+", HDD: "+this.getHDD()+", CPU: "+this.getCPU();
    }
}

Sub Class 1 ( PC )

public class PC extends Computer {
    private String ram;
    private String hdd;
    private String cpu;

    public PC (String ram, String hdd, String cpu) {
        this.ram = ram;
        this.hdd = hdd;
        this.cpu = cpu;
    }

    @Override
    public String getRAM() {
        return this.ram;
    }

    @Override
    public String getHDD() {
        return this.hdd;
    }

    @Override
    public String getCPU() {
        return this.cpu;
    }
}

 

Sub Class 2 ( Server )

public class Server extends Computer {
    private String ram;
    private String hdd;
    private String cpu;

    public Server (String ram, String hdd, String cpu) {
        this.ram = ram;
        this.hdd = hdd;
        this.cpu = cpu;
    }

    @Override
    public String getRAM() {
        return this.ram;
    }

    @Override
    public String getHDD() {
        return this.hdd;
    }

    @Override
    public String getCPU() {
        return this.cpu;
    }
}

 

Factory Class ( Factory )

public class Factory {

    public static Computer getComputer(String type, String ram, String hdd, String cpu) {
        if (type.equalsIgnoreCase("PC")) {
            return new PC(ram, hdd, cpu);
        } else if (type.equalsIgnoreCase("Server")) {
            return new Server(ram, hdd, cpu);
        }
        return null;
    }
}

 

 


Main Class

public class FactoryMain {

    public static void main(String[] args) {
        Computer pc = Factory.getComputer("pc","2 GB","500 GB","2.4 GHz");
        Computer server = Factory.getComputer("server","16 GB","1 TB","2.9 GHz");
        System.out.println("Factory PC Config::"+pc);
        System.out.println("Factory Server Config::"+server);
    }
}

출력

 

 

 

 

 

 

 

 

 

참고 :

 

[생성 패턴] 팩토리 패턴(Factory Pattern) 이해 및 예제

이번에 살펴볼 디자인 패턴은 가장 유명한 디자인 패턴 중 하나인 팩토리 패턴(Factory Pattern)입니다. 이 팩토리 패턴은 조금 더 구체적인 용어인 팩토리 메소드 패턴(Factory Method Pattern)으로도 널리

readystory.tistory.com

 

반응형

댓글