강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Eric J님의 프로필 이미지
Eric J

작성한 질문수

TS/JS 디자인 패턴 with Canvas: 제로초에게 제대로 배우기

팩토리 메서드(Factory Method) - 사파리 그림판이 추가된다면?

팩토리 패턴

작성

·

68

·

수정됨

0

예제에서 팩토리 메서드를 굳이 왜 써야 하는지 이해를 하지 못했습니다

 

심플 팩토리 예제에서 grimpanFactory라는 함수의 존재 이유가 서로 다른 생성자들을 묶어주려는 요구사항이 있기 때문으로 이해했는데요

 

이 요구사항에 따르면 AbstractFactory들을 만들어주더라도 결국 이들을 묶어주는 로직이 필요하고 여전히 if else가 불가피한게 아닌가 생각됩니다

정리하면

  1. 애초에 grimpanFactory라는 함수를 만든게 type만으로 서로 다른 클래스 인스턴스를 편리하게 생성하는게 요구사항이 있어서가 아닌지

  2. (1번이 맞다면) AbstractFactory를 만들더라도 이 요구사항을 만족하려면 어딘가엔 if else가 와야할 것 같은데 잘못 이해한 것인지

  3. (1번이 틀리다면) 묶어주는게 요구사항이 아니라면 애초에 AbstractFactory 없이 생성자 바로 호출하면 되는게 아닌지

답변 2

2

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

일단 심플 팩토리와 팩토리 메서드의 제일 큰 차이는 확장 가능하냐 여부입니다. 심플 팩토리는 생성되는 객체가 항상 고정인 것이고, 팩토리 메서드는 상속/확장을 통해 새로운 객체를 생성할 수 있습니다. 팩토리를 "호출"하는 쪽에서는 if else문을 써서 어떤 팩토리를 고를지 선택할 수밖에 없긴 합니다. 추상팩토리에서도 마찬가지입니다. 추상팩토리는 팩토리 메서드에 메서드 세트가 추가된거라고 보시면 됩니다.

0

안녕하세요, 인프런 AI 인턴입니다. Eric J님!

팩토리 메서드 패턴은 객체 생성의 일관성을 유지하면서도 유연성을 제공하는 디자인 패턴입니다. 질문 주신 사항에 대해 자세히 답변 드리겠습니다.

  1. grimpanFactory라는 함수를 만들게 된 이유: 심플 팩토리는 객체 생성 로직을 중앙화하여 관리하기 위함입니다. 본래는 type에 따라 다양한 클래스 인스턴스를 생성하는 필요에서 출발했으며, 이는 각 브라우저나 플랫폼 환경에 맞게 다른 객체를 반환하도록 하는 역할을 했습니다. 이를 통해 코드의 변경 없이 환경 변화에 쉽게 대응할 수 있는 이점이 있습니다.

  2. if-else의 필요성: Abstract Factory로 가더라도 객체 유형을 결정하는 로직이 어딘가에 존재해야 합니다. 팩토리 메서드 패턴에서는 이 로직을 특정 클래스 안에 두지 않고 외부 설정이나 별도의 로직으로 처리하여 모듈화 제공합니다. 이 방식은 다양성과 확장성을 고려하여 설계된 구조로 이해하시면 좋습니다. 즉, 팩토리 메서드 패턴은 이러한 조건문을 감추기 위한 방법론을 제공하며, 필요에 따라 다른 방식으로 분기 처리(logic handling)를 예상할 수 있습니다.

  3. AbstractFactory 없이 생성자 직접 호출: 만약 현재 요구 사항이 환경에 대한 유연한 적응이 필요하지 않다면, 생성자를 직접 호출하는 것이 더 간단한 해결책이 될 수 있습니다. 그러나, 코드의 변경에 대한 안정성과 유지보수성, 그리고 미래에 요구사항이 변경될 가능성을 대비한다면 추상화 계층을 적용하는 것이 좋습니다.

관련 게시물에서 팩토리 패턴의 장점과 사용 사례를 더 깊이 탐구해 볼 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Eric J님의 프로필 이미지
Eric J

작성한 질문수

질문하기