21.01.10 20:35 작성
·
271
답변 3
4
맨 윗분 질문에 제 개인적인 생각을 덧붙이자면 하위 구현체를 바로 명시하는 것은 DIP원칙에 위반되는 것이 맞습니다. 결국 역할과 구현에 모두 의존하는게 되니 말이죠.
하지만 단순히 우선순위를 명시해 주는 것은 결과적으론 추상화에 의존 하기 때문에 DIP원칙은 위배되지 않습니다. @primary를 쓸 경우 코드상에는 아무런 의존관계도 명시되지 않습니다. 하지만 이러한 코드 추가가 수정이라는 관점에서는 OCP원칙에 의거해서 봤을 때 좀 더 생각해봐야 할 거 같네요.
김석중님의 질문에 대한 제 생각은, 어노테이션을 추가하는 작업은 기존 코드를 수정하는 작업과는 조금 별개로 볼 수 있지 않을까요?
@primary를 사용할 경우 기존 Impl 클래스에서는 아무것도 변경 할 것이 없습니다. 단지 주입되는 대상 클래스에 @primary만 추가해주면 되는 것이죠. @primary 대상이 바뀌면 바뀐 대상에만 해당 어노테이션을 붙여주면 됩니다.
이정도 수정은 스프링빈에 등록하기 위해 @conponent를 붙이는 것과 별반 다르지 않다고 생각합니다. 또한 확장을 했음에도 의존관계를 주입 받는 Impl 클래스에는 어떠한 코드의 변화도 없었습니다.
그러므로 OCP원칙에 위배되지 않는다고 생각됩니다.
제 개인적인 의견일 뿐입니다. 잘못됬거나, 의문 사항, 또는 모순이 있다면 언제든 말씀주시기 바랍니다. 감사합니다!
1
2021. 01. 10. 23:34
안녕하세요. harden님
도움을 드리고 싶은데, 첫번째 질문은 어떤 내용을 질문하시는지 제가 이해를 잘 못했습니다. 구체적인 예시를 자세히, 코드로 풀어서 설명부탁드립니다.
두번째 질문은 https://www.inflearn.com/questions/71872 를 참고해주세요.
감사합니다.