팩토리 패턴

박상준·2022년 8월 28일
0

면접지식

목록 보기
19/32

팩토리 패턴

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

상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며, 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 갖게 됩니다.

그리고 객체 생성 로직이 따로 떼어져 있기 때문에 코드를 리팩터링하더라도 한 곳만 고칠 수 있게 되어 유지 보수성이 증가됨.

shape.java

public interface Shape {
    void draw();
}

Circle.java

public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Circle - draw() Method.");
    }
}

Rectangle.java

public class Rectangle implements Shape{
    @Override
    public void draw() {
        System.out.println("Rectangle - draw() Method.");
    }
}

Square.java

public class Square implements Shape{
    @Override
    public void draw() {
        System.out.println("Square - draw() Method.");
    }
}

ShapeFactory.java

public class ShapeFactory {
    
   //팩토리 메소드 - 객체 생성 후 반환
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }        
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();
         
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
         
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      
      return null;
   }
}

FactoryPatternTest.java

public class FactoryPatternTest {
    public static void main(String[] args) {
    
      //팩토리 클래스에서 객체를 생성 후 반환
      ShapeFactory shapeFactory = new ShapeFactory();
 
      Shape shape1 = shapeFactory.getShape("CIRCLE");
 
      //Circle 메소드 호출
      shape1.draw();
 
      Shape shape2 = shapeFactory.getShape("RECTANGLE");
 
      //Rectangle 메소드 호출
      shape2.draw();
 
      Shape shape3 = shapeFactory.getShape("SQUARE");
 
      //Square 메소드 호출
      shape3.draw();
    }
}
profile
이전 블로그 : https://oth3410.tistory.com/

0개의 댓글