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

Rep님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

@Autowired 필드 명, @Qualifier, @Primary

Autowired 의 필드명과 Qualifier 를 사용하는 것 질문드립니다.

작성

·

285

1

Autowired 에서 필드명, 파라미터명에 의존하는 것과 Qualifier 를 사용하여 서비스를 조작하는 것은 DIP 에 어긋나는 것으로 보입니다.

혹시 이 생각이 다소 옳지 못다하다면 어느 부분을 수정해야하는지 말씀부탁드리고 위의 생각이 맞다면 어떻게 저 부분을 받아들여야 하는지 말씀부탁드립니다.

답변 2

1

Rep님의 프로필 이미지
Rep
질문자

빠른 답변 감사드립니다 codesweaver 님.

확장에는 열려있어야하고 변경에는 닫혀있어야 한다는 부분에서 OCP 는 이해가 가는데

저는 아래와 같은 이유로 DIP 또한 위반하였다고 생각하는데 어느 부분을 잘못 생각하고 있는 것인지 답변 부탁드립니다.

DicountPolicy 가 아닌 Fix(Rate)DiscountPolicy 에 의존하여 의존성 역전이 일어남

객체지향과 SOLID 의 이해가 부족한 것으로 생각되는데 어느 부분을 잘못 생각하고 있는지 조언 부탁드립니다.

안녕하세요 Changmo Kang님!

DIP는 쉽게 말하면 콘크리트 객체를 의존하지 말고 추상객체를 의존하라는 것인데, 필드명 방식이나 파라미터명 방식의 경우 DiscountPolicy 라는 추상객체를 의존하고 있는것은 맞기에, DIP 위반했다고 하기는 어렵다고 할 사람도 있을것 같습니다.

그러나 DIP의 취지는, 콘크리트 객체가 변경되어도 서비스 로직이 변경되지 않아야 한다. 유연한 설계를 해야한다 이기에, 결국 그 취지는 살리지 못했다고 할 수 있습니다. 그런면에서는 한편으론 DIP위반이라고 주장할 여지도 있습니다.

.

SOLID는 원칙이지 규칙이나 법칙이 아니기에 다소 주관적 판단의 영역이 들어가고, 그래서 이런 모호한 부분이 있을수 있습니다.

.

감사합니다.

0

안녕하세요. Changmo Kang 님, 공식 서포터즈 codesweaver 입니다.

..

말씀해주신 부분은 SOLID원칙 중 OCP를 위배한 부분이긴 합니다 :) 개인적으론 SOLID 원칙은 지키면 좋은 것, 그러나 언제나 지키기는 힘든 것. 정도의 '조언' 정도라고 생각하시길 권합니다. 

.

참고하실만한 질문과답변 링크를 남깁니다.

@autowired 필드명, @qualifier 강의에서 OCP를 위반하는 것이 아닌지에 대해 질문이 있습니다 - 인프런 | 질문 & 답변 (inflearn.com)
.

감사합니다.

Rep님의 프로필 이미지

작성한 질문수

질문하기