작성
·
332
1
다른 질문들에서 해답을 찾지 못해 질문을 올립니다.
AppConfig의 memberService()에서
return new MemberServiceImpl(memberRepository());
대신에
return new MemberServiceImpl.getInstance();
로 사용하는 것은
클라이언트가 구현체(싱글톤객체)에 의존하게 되므로 DIP가 위배된다
라는 것이 강의의 내용인데요..
AppConfig와 같은 구성에 사용되는 클래스는 어쩔 수 없이 구현체에 의존을 해야만 하는 것 아니었나요?
실제로 싱글톤 사용 전인
return new MemberServiceImpl(memberRepository());
방식에서도 MemberServiceImpl이라는 구현체를 의존하고 있었고 이전까지의 내용에서는 이를 두고 DIP를 위반한다고 보지는 않았던 거 같은데 말이죠.
오랜만에 공부하려니 쉽지가 않네요..
답변 부탁드립니다 ㅠ
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
( 자답 )
혹시 아래 내용이 맞는지 확인 부탁드립니다.
싱글톤 반영 전에는 AppConfig에서
return new MemberServiceImpl(memberRepository());
를 통해 MemberRepository의 구현체까지 AppConfig 내부에서 모두 결정됨.
즉, 클라이언트 (MemberServiceImpl) 가 MemberRepository의 구현체에 의존하지 않음
-> DIP 충족
인 것이고,
싱글톤 반영 후 AppConfig에서
return MemberServiceImpl.getInstance()
할 경우
클라이언트 (MemberServiceImpl)의 내부 코드에서 다시 MemoryMemberRepository.getInstance() 를 호출해야한다.
즉, 클라이언트가 구현체에 의존하게 된다.
-> DIP 위반
제가 너무 AppConfig 안에서만 생각해서 인지부조화가 발생한 것 같은데..
이렇게 받아들이는게 맞을까요?
답변 2
0
저도 이부분이 이해가 안됬는데 설명을 듣고도 헷갈리네요ㅜ
그전에는 AppConfig에서 구현객체를 만들었고, 그 객체들을 Appconfig 내에서 연결하여 주었기때문에, 각 구현체 클래스간의 의존관계는 아니었다. 따라서 DIP만족이다. 그러나 싱글톤 패턴일 경우에는 해당 구현 객체를 각 구현 클래스 내에서 만들고 연결하는 파이프? 호스만 appConfig에서 제공해준다. 사실상 구현 객체들은 실제로 각 구현클래스들 끼리 의존하고 있기에 DIP위반이다? 맞나요? 너무어렵네요 ㅜ
답변 감사드립니다.
제가 자답한 내용이 맞다는 말씀이시죠?