인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

yoon6669님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

IoC, DI, 그리고 컨테이너

구현 객체가 의존한다?

작성

·

54

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
약 9분경에 여태 진행한 강의에서와 달리 살짝 다른 부분이 나와 혼란스러운데요,

이제껏 강의에서 의존 관계를 설명할때,

구현객체를 new로 생성하고 인터페이스가 그것을 참조하는 코드를 의존한다~ 라고 강의를 진행하셨는데요.

 

예를들어 DiscountPolicy discountPolicy = new FixDiscountPolicy 처럼요. 이떄 DiscountPolicy 인터페이스가 구현 객체 (FixDiscountPoliycy, RateDiscountPolicy)를 참조하는 코드를 의존한다 라고 강의해서 말씀하셨습니다.

 

그런데 이번 강의 9분경에 DiscountPolicy를 구현한 FixDiscountPolicy 클래스에서 DiscountPolicy에 의존한다 라고 설명하시니 갑자기 혼란스럽습니다.

 

꼭 new 해서 객체를 생성한후 참조하는 것만이 아니라 OrderServiceImpl 클래스에서처럼 MemberRepository 나 DiscountPolicy를 사용하는 것만으로도 의존한다라고 표현하는 것 같지만 이번에 제가 질문드린것은 약간 새로운? 의존관계 같아서 질문드립니다.

 

이렇게 되면 DiscountPolicy와 FixDiscountPolicy는 상호 의존 관계가 되는건가요?

답변 1

0

인프런 AI 인턴님의 프로필 이미지

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

의존 관계에 대해 혼란스러우신 부분을 정리해 드리겠습니다. 일반적으로 의존성이란 클래스가 다른 클래스를 사용하므로써 발생하는 ‘알아야 하는’ 관계를 말합니다. 이 의존성은 코드를 타입으로 인식하거나 메서드를 호출하면서 발생합니다.

의존 관계의 두 가지 측면:
1. 구현체가 인터페이스를 의존하는 경우: FixDiscountPolicyDiscountPolicy를 구현하는 경우, FixDiscountPolicyDiscountPolicy라는 인터페이스를 반드시 알아야 합니다. 따라서 FixDiscountPolicyDiscountPolicy를 의존한다고 할 수 있습니다. 이는 클래스 설계상 계층 구조에서 상위의 추상화, 즉 인터페이스를 의존하는 일반적인 경우입니다.

  1. 인터페이스가 구현체를 참조하는 경우: 다음의 코드인 DiscountPolicy discountPolicy = new FixDiscountPolicy();는 인터페이스인 DiscountPolicy가 실제 구현 객체인 FixDiscountPolicy를 참조하는 방법입니다. 이 경우 실제 객체가 인터페이스의 역할을 수행한다는 의미에서 의존한다고 표현됩니다.

의존성은 코드의 타입 또는 메서드를 사용함으로써 발생하는 것이며, new 키워드를 통해 객체를 생성하는 것뿐만 아니라 선언된 타입이 사용하는 경우에도 발생합니다.

상호 의존 관계 여부에 대해서는, 상호 의존이라기보다 FixDiscountPolicy는 DiscountPolicy를 implements 하면서 그 인터페이스를 구현한다는 의미로 의존한다라고 표현되며, 이는 객체 지향 설계에서 서로 상하위 관계에 있기 때문에 상호 의존 관계는 아니라고 보시면 됩니다.

보다 자세한 설명은 아래 유사한 질문과 답변에서 참고해 보실 수 있습니다:
- 의존성에 대해 궁금한것이있습니다

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

yoon6669님의 프로필 이미지

작성한 질문수

질문하기