CS
[CS] 팩토리 메서드 패턴
펭귄코기
2022. 10. 15. 14:35
객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이다
상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고
하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다
상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며
상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에
더 많은 유연성을 갖게 된다
객체 생성 로직이 따로 떼어져 있기 때문에 코드를 리팩터링 하더라도
한 곳만 고칠 수 있게 되니 유지 보수성이 증가한다
쉽게 이해해 보면 객체를 만드는 부분을 Sub Class에 맡기는 패턴이다
클래스 생성 목록
Robot (추상 클래스)
- SuperRobot
- PowerRobot
RobotFactory (추상 클래스)
- SuperRobotFactory
- ModifiedSuperRobotFactory
Robot 이라는 클래스를 RobotFactory에서 생성한다
RobotFactory 클래스 생성
public abstract class RobotFactory {
abstract Robot createRobot(String name);
}
SuperRobotFactory 클래스 생성
public class SuperRobotFactory extends RobotFactory {
@Override
Robot createRobot(String name) {
switch(name) {
case "super" :
return new SuperRobot();
case "power" :
return new PowerRobot();
}
return null;
}
}
위에서도 얘기했지만 생성하는 클래스를 따로 만든다
그 클래스는 factory 클래스를 상속하기에 반드시 abstract로 만들어진 createRobot 메서드를 선언해야 한다
name으로 건너오는 값에 따라서, 생성되는 Robot이 다르게 설계된다
총 정리
생성하는 객체를 별도로 만든다
객체에 넘어오는 값에 따라서 다른 로봇을 만들어 낸다