최근 객체지향적인 코드를 만들어 보려고 노력하다 보니 다양한 디자인 패턴을 경험할 수 있었다.
객체를 생성하는 방법은 new 키워드를 이용하는 방법만 생각하고 있었는데, 그 왜에도 Factory functino과 ES6부터 추가된 class 문법을 이용해 객체를 만들 수 있다는 것을 확인했고 이 글에서는 박복 객체를 생성할 때 쓰이는 패턴인 Factory Pattern에 대해 남겨두려고 한다.
Factory Pattern
Factory Pattern
객체를 사용하는 코드에서 객체 생성 부분을 때어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴
Factory Pattern은 공장(Factory)이라는 이름에 맞게 객체를 반복적으로 찍어낼 때 (비슷한 객체를 반복적으로 생성) 구현하는 방법이다. 개발자가 컴파일 단계에서 어떤 객체를 생성해야 될지 모르고, 런타임 환경에서 동적으로 객체를 생성해야 할 때도 사용한다. 즉 객체 생성을 구현과 분리할 수 있게 해 주고 소비자는 인스턴스 생성이 수행되는 방법에 대해서 전적으로 알 필요가 없다는 것이다.
여기서 factory fuction(팩토리 함수)라는 용어가 있는데 이는 new 키워드를 사용한 constructor 함수가 아닌 그냥 일반 함수에서 객체를 반환하는 것을 말한다.
Factory Pattern은 다음과 같은 상황에서 매우 유용하다고 한다.
- 객체 또는 구성요소 설정에 높은 수준의 복잡성이 수반되는 경우
- 환경에 따라 다양한 개체 인스턴스를 쉽게 생성해야 하는 경우
- 동일한 속성을 공유하는 많은 작은 개체 또는 구성 요소를 사용하는 경우
- API 계약(일명 duck typing)만 충족하면 되는 다른 객체의 인스턴스와 객체를 합성할 때. 이것은 decoupling에 유용합니다.
function createImage(name) {
if(name.match(/\.jpeg$/)){
return new JpegImage(name);
} else if(name.match(/\.gif$/)) {
return new GifImage(name);
} else if(name.match(/\.png$/)) {
return new PngImage(name);
} else {
throw new Exception('Unsupported format');
}
}
각 클래스 인스턴스를 별개로 만드는 대신, 'createImage'를 활용해서 타입을 명시하는 방법으로 사용이 가능하다.
기존 코드를 손상시키지 않더라도 새 객체를 응용프로그램에 사용할 수 있다. 마지막으로, 인스턴스 생성과 관련된 모든 코드가 한 곳에 있으므로 코드 수정에 용의 하다.
'Backend > 개발 방법론 & 디자인 패턴' 카테고리의 다른 글
[Rate Limiting] Token Bucket 알고리즘 (2) | 2024.10.27 |
---|---|
API 디자인 패턴 (0) | 2023.12.13 |
DTO (Data Transfer Object)의 설계법 (0) | 2023.12.12 |
[Design Pattern] 싱글톤 패턴이란? (Singleton Pattern) (0) | 2023.03.11 |
[Methodologies] Monorepo(모노레포)란? (0) | 2023.02.24 |