[TIL CS]팩토리패턴에 대하여

조민수·2022년 9월 15일
0

cs

목록 보기
2/5
post-thumbnail

2022-09-02
오늘은 어제에 이어 생성자패턴의 한 종류인 팩토리패턴에 대하여 한 번 간단히 정리를 해놓아보자

🚩팩토리패턴

팩토리 패턴은 싱글톤 패턴과 같이 인스턴스를 만드는 절차를 추상화패턴인 생성패턴의 한 종류이다!

생성패턴은 앞선 싱글톤 패턴 포스팅에서도 적었지만

1.시스템이 어떤 Concrete Class를 사용하는지 대한 정보를 캡슐화한다
2.생성패턴은 이들 클래스의 인스턴스들이 어떻게 만들고 어떻게 결합하는지에 대한 부분을 완전히 가려준다

그럼 이쯤 알았으니 팩토리 패턴에 대하여 알아보자

간단한게 결론적으로 한 줄로 말하자면

🤷‍♂️여러개의 서브클래스를 가진 슈퍼클래스가 있을 때 인풋에 따라서 하나의 자식클래스의 인스턴스를 내려주는 방식!

즉 상위클래스에서는 호출만 해주고 구체적인 구현에 대한 것은 하위 클래스에서 진행을 해주게 된다

🙋‍♂️그럼 언제 사용하게 되나요?

팩토리패턴이 이름이 팩토리인 것처럼 공장인 팩토리에서는 들어오는 입력을 가지고 각 밑에 하청 공장들에게 하청을 내려주는 것이다!!

1.자신이 생성해야 하는 객체의 서브클래스를 예측할 수 없을 때
2.생성할 객체를 기술하는 자신의 서브클래스가 지정했으면 할 때

예시를 들자면 js에서 Object()를 이용한 객체 생성시 주어지는 값의 타입에 따라서 String,Boolean,Number 등으로 객체가 생성되는 것

🙌팩토리패턴의 장점

직접 클라이언트에서의 코드가 아닌 서브클래스의 인스턴스화를 따로 빼두어 더욱 서로간의 종속성을 낮추고 결합도를 느슨하게 하여 하위 클래스(americano의 제조과정이 바뀌어도)에서의 구현이 바뀌어도
위에서는 몰라 확장이 쉽게 된다


👨‍💻팩토리패턴 js로 구현

상황은 이렇다.
각 커피들종류를 만들어주는 상황 하지만,,매번 새로운 커피를 만든다는 것은 중복되는 요소가 많다,,
1)따라서 coffee를 위한 클래스 생성
2)그럼 coffee를 받기 위한 get메소드의 반복,,,
3)팩토리패턴 적용

	class Coffee{
     	constructor(name,taste){
         	this.name=name;
          	this.taste=taste;
        }
      	getInfo(){
         	return this.name+"의 맛은"+this.taste+"맛이다."; 
        }
      //여기서 static을 써주므로써 정적메소드로 인스턴스의 생성없이 호출이 가능해 개별 인스턴스에 묶이지 않아 메모리 절약이 가능함
     	static factory(name){
          if (name==="아메리카노"){
           		return new Americano(); 
          }
          else if(name==="믹스커피"){
           		return new MixCoffee(); 
          }
        }
    }
	
	class Americano extends Coffee{
     	constructor(){
          super("아메리카노","쓴");
        }
    }

	class MixCoffee extends Coffee{
      constructor(){
       	super("믹스커피","달달") ;
      }
    }

	const americano=Coffee.factory("아메리카노");
	const mix=Coffee.factory("믹스커피");

	//즉 ,여기서 보면 우리는 그냥 공장에다가 어떤 커피를 만들어달라고 
//주문을 할 뿐 상위공장에서는 어떤식으로 각 커피를 만드는지는 모른다
//즉 이것 또한 의존성 주입이라고 볼 수 있다

🙋‍♂️근데 추상팩토리패턴을 적용하면?

사실 추상팩토리패턴을 쓸 때의 가장 큰 가시적인 변화를 한 줄로 표현한다면

팩토리패턴에서의 조건문으로부터 벗어날 수 있다!

이게 무슨말인가하면 우리는 지금 위에 커피를 가지고 만든 상황에서
비록 아메리카노,믹스커피 이 두가지밖에 없어서 그렇지만
정말 수백가지의 다른 것들이 추가가 되면 if문의 분기는 엄청 길어지게 된다,,

추상팩토리패턴은 팩토리의 팩토리로서 즉 제일 상위공장이 있고 하청을 내려주는 공장을 하나 더 두어 그 하청공장에서 제품을 만들 수 있게 공장의 공장을 두는 것 이다

코드로 봐보자

	class Coffee{
     	constructor(name,taste){
         	this.name=name;
          	this.taste=taste;
        }
      	getInfo(){
         	return this.name+"의 맛은"+this.taste+"맛이다.";
        }
      
      	static factory(factory){
          return factory.createCoffee();
        }
    }

//전에 팩토리패턴에서 해주던 if문의 행위를
//하청 공장인 각 커피 종률를 만든는 팩토리의팩토리를 만들어
//각 호출해준다
	class AmericanoFactory{
      static createCoffee(){
       	 return new Americano();
      }
    }

	class MixCoffeeFactory{
     	static createCoffee(){
         	return new MixCoffee(); 
        }
    }
	
	class Americano extends Coffee{
     	constructor(){
          super("아메리카노","쓴");
        }
    }

	class MixCoffee extends Coffee{
      constructor(){
       	super("믹스커피","달달") ;
      }
    }
profile
컬러감이 있는 프론트엔드개발자

0개의 댓글