생성패턴 | 1. Factory Method Pattern

May Han·2022년 1월 27일
2

Design Patterns

목록 보기
2/3

해당 글은 https://refactoring.guru/design-patterns/factory-method을 참고하여 번역 작성한 포스팅입니다.


Factory Method Pattern?

  • 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정한다.
  • 팩토리 메소드 패턴은 팩토리 메소드는 객체를 생성해서 반환하는 것을 말한다. 즉, 결과값이 객체인 것이다.

    Factory Method is a creational design pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created.


Adventage

클래스의 변경사항이 생겼을 때 얼마나 다른 클래스에게도 영향을 줄 것인가가 결합도이다. 팩토리 메소드 패턴은 직접 사용하는 객체를 생성하지 않고 팩토리 메소드 클래스를 통해 객체를 대신 생성하고 그 객체를 반환 받아 사용하기 때문에 효율적인 코드 제어를 할 수 있을 뿐더러 결합도를 낮춰 유지보수가 용이하다.

Problem Example

트럭으로만 유통 가능한 문류 관리 앱이 있다고 생각해보자.
트럭만 필요하기 때문에 모든 코드가 Turck class에 존재할 것이다.

그런데, 날이 갈수록 유명해지더니 해상 운송 회사로부터 해상 물류 앱을 통합해달라는 요청을 받았다.

좋은 소식이지만 코드 관점에서는 어떨까? 현재는 대부분의 코드들이 Truck Class에 결합되어 있어 새로운 Ship Class를 추가하기 위해 코드 전체를 수정해할지도 모른다. 이후에는 Ship뿐만 아니라 Flight, Motorcycle 등도 추가된다면 또 다시 코드를 수정해야하는 상황이 올지도 모른다..

그렇게 된다면 결과적으로 조건에 따라 운송 객체 클래스에 의존하는 예쁜 쓰레기 코드가 완성될 것이다.

Adding a new class to the program isn’t that simple if the rest of the code is already coupled to existing classes.



Solution

new 키워드를 사용하는 부분을 서브클래스에 위임함으로서 객체 생성을 캡슐화하고 구상 클래스에 대한 의존성이 줄어든다

인스턴스 생성을 서브 클래스로 위임한 결과이다. 최종 메인 메소드에서는 new 키워드를 사용하여 인스턴스를 생성한 부분이 없는 것을 확인할 수 있다. 이를 통해 메인 프로그램에서는 어떤 객체가 생성되었는지 신경 쓸 필요 없이 반환된 객체만 사용하면 되고 슈트 클래스에서 변경이 발생해도 메인 프로그램이 변경되는 것은 최소화할 수 있다.


Reference

https://woovictory.github.io/2019/02/07/Design-Pattern-Factory-Pattern/

https://refactoring.guru/design-patterns/factory-method

Factory Method in TypeScript

profile
🚢 크루즈승무원 출신 백엔드 개발자, 기록하는 것을 좋아합니다.

0개의 댓글