IT/Java

팩토리 패턴 (Factory Pattern)

김 정 환 2022. 11. 7. 11:50
반응형

객체 지향 디자인 패턴의 기본 원칙 중 '확장에 있어서는 열려 있어야 하고 수정에 있어서는 닫혀 있어야 한다'를 알고 있을 거예요. 수정이 발생할 가능성이 높은 부분은 따로 분리하여 관리하는 것이 좋습니다. 팩토리 패턴은 객체의 생성을 담당하는 클래스를 한 곳에 모아서 관리하는 것입니다.

 

 

예시를 통해서 어떻게 팩토리 패턴을 이용할 수 있는지 경험해 보겠습니다. 아래 예시는 도형의 모양을 만드는 것을 팩토리 패턴으로 만들어 본 것입니다.

 

1 단계 : Shape 인터페이스 생성

public interface Shape {
  void draw();
}

 

2 단계 : Shape 구현

public class Rectangle implements Shape {

  @Override
  public void draw() {
    System.out.println("Inside Rectangle::draw() method.");
  }
}
public class Square implements Shape {

  @Override
  public void draw() {
    System.out.println("Inside Square::draw() method.");
  }
}
public class Circle implements Shape {

  @Override
  public void draw() {
    System.out.println("Inside Circle::draw() method.");
  }
}

 

3 단계 : 객체를 생성하는 팩토리 생성

public class ShapeFactory {
	
  //use getShape method to get object of type shape 
  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;
  }
}

 

4 단계 : 팩토리 사용해 보기

public class ShapeFactory {
	
  //use getShape method to get object of type shape 
  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;
  }
}

 

 

참고

- https://www.tutorialspoint.com/design_pattern/factory_pattern.htm

반응형

'IT > Java' 카테고리의 다른 글

Map 처리  (0) 2022.12.19
Arrays.asList() vs ArrayList()  (0) 2022.12.19
[함수형 데이터 처리] 스트림  (2) 2022.09.25
기본형과 참조형 변수  (0) 2022.09.04
동작 파라미터화  (0) 2022.08.13