inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 기본편

관심사의 분리

생성자 직접 호출 vs 팩토리 메서드 패턴

101

레이

작성한 질문수 1

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]

해당 질문 자체가 질문 자체가 성립되지 않는 것일지 고민되어서 먼저 찾아봤지만 해당 질문에 대한 답변을 찾지 못하여서 질문을 남겨봅니다..

애초에 질문거리가 되지 못하는 것이었다면, 제가 어느 부분에서 잘못 생각한 걸까요?🥲

 

public class AppConfig {

    public MemberService memberService() {
        return new MemberServiceImpl(new MemoryMemberRepository());
    }

    public OrderService orderService() {
        return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
    }

}

위 AppConfig처럼 생성자를 직접 호출하여 객체를 생성하는 방식팩토리 메서드 패턴처럼 생성자를 간접적으로 호출하는 방식 중 어느 방식이 더 객체 지향적으로 좋은 방식일까요?

spring 객체지향

답변 2

1

y2gcoder

안녕하세요. 레이님, 공식 서포터즈 y2gcoder입니다.

상황에 따라 다르겠지만 객체를 만드는데 복잡한 과정이 필요하다면 팩토리 메서드 패턴이 유용하고, 간단하게 생성만 한다면 생성자를 사용하는 걸 추천합니다 🙂

둘다 혼합해서 잘 사용하는 것이 객체지향적인 설계를 잘하는 것이라 생각합니다

감사합니다.

1

레이

y2gcoder님의 명료한 답변 너무 감사합니다!

인프런 AI 인턴의 상세한 답변을 봤지만 제가 궁금했던 점이 해결되지는 않았습니다. 오히려 제 질문의 어느 부분이 잘못되었을까부터 되짚어보면서 공부하고 있었습니다.

그러다 y2gcoder님의 답변을 보니 제 궁금증이 해결되었고, 그제야 AI 인턴의 답변이 더 도움이 되었습니다.

정말 감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

레이님께서 질문해 주신 내용은 객체 지향 설계에 있어 중요한 개념입니다. 생성자를 직접 호출하여 객체를 생성하는 방식과 팩토리 메서드 패턴을 활용하는 방식은 각각의 장단점이 있으며, 둘 중 어느 것이 더 좋은지에 대한 답은 애플리케이션의 요구사항이나 설계에 따라 다를 수 있습니다. 이 두 가지 접근법의 차이에 대해 간단히 설명드리겠습니다.

  1. 생성자를 직접 호출하는 방식:

    • 장점: 간단하고 직관적입니다. 객체 생성 과정이 명확하여 코드의 가독성이 높습니다.
    • 단점: 변경에 취약할 수 있습니다. 예를 들어, 객체 생성 과정이 바뀌면 해당 코드를 수정해야 합니다.
  2. 팩토리 메서드 패턴을 사용하는 방식:

    • 장점: 객체 생성 로직을 캡슐화하여 생성 로직이 변경되더라도 클라이언트 코드에 영향을 주지 않습니다. 더 유연한 설계를 가능하게 합니다.
    • 단점: 처음 구현 시에는 다소 복잡해질 수 있습니다.

팩토리 메서드 패턴을 사용하면 객체 생성 책임을 다른 클래스나 메서드로 이전시킬 수 있기 때문에, 변화에 더 잘 대응할 수 있고, 객체 생성의 세부사항을 숨길 수 있습니다. 이는 객체 지향 설계의 유연성과 확장성 측면에서 유리할 수 있습니다.

관련하여 유사한 주제에 대해 더 자세히 다룬 질문과 답변이 있는 URL을 참고하시면 더 깊이 있는 이해가 가능할 것입니다:

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

섹션3. 11 회원객체 다이어그램

0

35

1

OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.

0

35

1

코드 자료

0

77

2

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

79

2

MemberService의 인터페이스를 왜 사용하는지 궁금합니다.

0

97

1

롬복 @Setter를 써야 하는 상황이 있는건가요?

0

102

1

빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?

0

86

1

테스트 속도가 나중에 영향이 있을까요?

0

89

1

gradle 설정 안떠서 질문 남깁니다!

0

136

2

build.gradle로 프로젝트를 여는 이유

0

99

1

provider 사용하는 이유

0

97

1

다음 강의 뭘 들어야 할까요

0

137

2

프로토타입 빈, 직접 destroy 호출 안 할 경우

0

69

1

beanB

0

89

2

퀴즈다시풀기

0

73

1

Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ

0

102

2

"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.

0

70

3

run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>

0

110

2

도메인의 정의?

0

63

1

ApplicationContext 질문입니다.

0

68

1

@Scope의 proxyMode를 사용할때 단위 테스트 방법

0

97

2

ai api 선정하기 관련 질문

0

130

2

생성자 자동주입 관련해서

0

68

1

Spring에서 SessionScope와 RequestScope는 함께 사용되나요?

1

70

1