작성
·
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 인턴입니다. yoon6669님.
의존 관계에 대해 혼란스러우신 부분을 정리해 드리겠습니다. 일반적으로 의존성이란 클래스가 다른 클래스를 사용하므로써 발생하는 ‘알아야 하는’ 관계를 말합니다. 이 의존성은 코드를 타입으로 인식하거나 메서드를 호출하면서 발생합니다.
의존 관계의 두 가지 측면:
1. 구현체가 인터페이스를 의존하는 경우: FixDiscountPolicy
가 DiscountPolicy
를 구현하는 경우, FixDiscountPolicy
는 DiscountPolicy
라는 인터페이스를 반드시 알아야 합니다. 따라서 FixDiscountPolicy
는 DiscountPolicy
를 의존한다고 할 수 있습니다. 이는 클래스 설계상 계층 구조에서 상위의 추상화, 즉 인터페이스를 의존하는 일반적인 경우입니다.
DiscountPolicy discountPolicy = new FixDiscountPolicy();
는 인터페이스인 DiscountPolicy
가 실제 구현 객체인 FixDiscountPolicy
를 참조하는 방법입니다. 이 경우 실제 객체가 인터페이스의 역할을 수행한다는 의미에서 의존한다고 표현됩니다.의존성은 코드의 타입 또는 메서드를 사용함으로써 발생하는 것이며, new 키워드를 통해 객체를 생성하는 것뿐만 아니라 선언된 타입이 사용하는 경우에도 발생합니다.
상호 의존 관계 여부에 대해서는, 상호 의존이라기보다 FixDiscountPolicy는 DiscountPolicy를 implements 하면서 그 인터페이스를 구현한다
는 의미로 의존한다
라고 표현되며, 이는 객체 지향 설계에서 서로 상하위 관계에 있기 때문에 상호 의존 관계는 아니라고 보시면 됩니다.
보다 자세한 설명은 아래 유사한 질문과 답변에서 참고해 보실 수 있습니다:
- 의존성에 대해 궁금한것이있습니다
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.