[CS정리] 디자인 패턴 - 팩토리 메서드 패턴, 추상 팩토리 패턴

10000DOO·2023년 7월 3일
1

CS정리

목록 보기
2/3

🔶팩토리 메서드 패턴

🔹정의

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

🔹특징

  1. 상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 갖게 됩니다.
  1. 객체 생성 로직이 분리되어 있기 때문에 리팩토링 시 수정할 부분이 줄어들어 유지보수성이 증가됩니다.

🔹예시

public interface Car {

}
public class HyundiaCar implements Car {

	public HyundiaCar() {
		System.out.println("현대자동차");
	}

}
public class KiaCar implements Car{

	public KiaCar() {
		System.out.println("기아자동차");
	}

}
public class CarFactory {
	public Car createCar(String type) {
		Car car = null;
		
		switch (type) {
		case "HYUNDIA":
			car = new HyundiaCar();
			break;
		case "KIA":
			car = new KiaCar();
			break;

		}
		
		return car;
	}
}

🔶추상 팩토리 패턴

🔹정의

추상 팩토리 패턴은 관련된 객체들을 생성하기 위한 통합 인터페이스를 제공하는 디자인 패턴입니다. 간단히 말하면, 이 패턴은 복수의 관련된 객체들을 만드는 공장 또는 팩토리를 정의하고 사용하는 것이 목적입니다.

🔹예시

public class Car {
  private Door door;
  private Wheel wheel;

  public Car() {
  }

  public Door getDoor() {
    return door;
  }

  public void setDoor(Door door) {
    this.door = door;
  }

  public Wheel getWheel() {
    return wheel;
  }

  public void setWheel(Wheel wheel) {
    this.wheel = wheel;
  }
}

public class HyundiaCar extends Car{
    public HyundiaCar(){}
}
public interface CarFactory{
    Car createCar();
}
public interface CarPartsFactory {
  Door createDoor();

  Wheel createWheel();
}
public class HyundiaCarPartsFactory implements CarPartsFactory {

  @Override
  public Door createDoor() {
    return new HyundiaDoor();
  }

  @Override
  public Wheel createWheel() {
    return new HyundiaWheel();
  }
}
public class HyundiaCarFactory implements CarFactory{
    private CarPartsFactory carPartsFactory;

    public HyundiaCarFactory(CarPartsFactory carPartsFactory) {
        this.carPartsFactory = carPartsFactory;
    }

    @Override
    public Car createCar() {
        Car car = new HyundiaCar();
        car.setDoor(carPartsFactory.createDoor());
        car.setWheel(carPartsFactory.createWheel());

        return car;
    }
}
public class Client {
  public static void main(String[] args) {
    CarFactory hyundiaCarFactory = new HyundiaCarFactory(new HyundiaCarPartsFactory());
    Car hyundiaCar = hyundiaCarFactory.createCar();
  }
}

📚참고 자료

https://fvor001.tistory.com/63
https://velog.io/@papakang22/디자인패턴추상팩토리-패턴이란

profile
iOS 개발자 지망생 https://github.com/10000DOO

0개의 댓글