21.12.22 14:11 작성
·
327
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
1
안녕하세요. 임현강님, 공식 서포터즈 David입니다.
.
싱글톤 강의는 현재 코드에 적용하는게 아니라 싱글톤 패턴에 대해 설명하시는 것입니다.
이후 스프링에서는 싱글톤 패턴의 한계를 어떻게 풀어내었고 적용하여 사용하고 있는지 설명합니다.
내부에서 인터페이스를 선언하고 외부로부터 구현체를 주입받고 있다면 DIP를 만족하는 것입니다.
말씀하신대로 AppConfig만 생각치 마시고 외부로부터 구현체를 주입받아야 하는 클래스와 의존관계를 설정하여 객체를 생성해주는 클래스로 생각해보시면 좋겠습니다.
.
감사합니다.
2021. 12. 22. 23:12
답변 감사드립니다.
제가 자답한 내용이 맞다는 말씀이시죠?