IT/Design Patterns

Creational Patterns - Factory Method

은고고 2021. 11. 30. 12:02
반응형

 

Intent

Supper Class에서 객체를 생성하기 위한 interface를 제공하지만 sub class가 생성될 객체 유형을 변경할 수 있도록 하는 Creational design patterns이다.
즉, 객체 생성을 슈퍼클래스의 메서드를 통해 객체를 생성한다.
슈퍼 클래스의 메서드를 통해 객체를 생성하기 때문에 최초 객체 대한 초기화 작업에 유용하다.
 

Problem

물류 관리 응용 프로그램을 만들고 있다고 상상해보십시오. 앱의 첫 번째 버전은 트럭으로만 운송할 수 있으므로 대부분의 코드는 Truck 클래스 내에 있습니다.
잠시 후 앱이 꽤 유명해집니다. 매일 해상 운송 회사로부터 해상 물류를 앱에 통합해 달라는 수십 개의 요청을 받습니다.
좋은 소식이죠? 그러나 코드는 어떻습니까? 현재 대부분의 코드는 Truck 클래스에 연결되어 있습니다. 앱에 Ships를 추가하려면 전체 코드베이스를 변경해야 합니다.
결과적으로 운송 객체의 클래스에 따라 앱의 동작을 전환하는 조건으로 가득 찬 꽤 불쾌한 코드로 끝납니다.
 

Solution

팩토리 메소드 패턴은 직접적인 객체 생성 호출(new 연산자 사용)을 특별한 팩토리 메소드에 대한 호출로 대체할 것을 제안합니다.
걱정하지 마십시오. 객체는 여전히 new 연산자를 통해 생성되지만 팩토리 메서드 내에서 호출됩니다. 팩토리 메서드에서 반환된 객체는 종종 제품이라고 합니다.

 

 

언뜻 보기에는 이 변경이 무의미해 보일 수 있습니다. 방금 생성자 호출을 프로그램의 한 부분에서 다른 부분으로 옮겼습니다. 그러나 이것을 고려하십시오. 이제 하위 클래스에서 팩토리 메소드를 재정의하고 메소드에 의해 생성되는 제품 클래스를 변경할 수 있습니다.
 
하지만 약간의 제한이 있습니다. 하위 클래스는 이러한 제품에 공통 기본 클래스 또는 인터페이스가 있는 경우에만 다른 유형의 제품을 반환할 수 있습니다. 또한 기본 클래스의 팩토리 메서드는 이 인터페이스로 선언된 반환 유형을 가져야 합니다.

 

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

반응형

'IT > Design Patterns' 카테고리의 다른 글

Design Patterns  (0) 2021.11.30