인프런 커뮤니티 질문&답변
싱글톤의 DIP 위반
작성
·
451
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 안에서만 생각해서 인지부조화가 발생한 것 같은데..
이렇게 받아들이는게 맞을까요?
퀴즈
Vấn đề chủ yếu xảy ra khi liên tục tạo đối tượng mới cho mỗi yêu cầu trong môi trường ứng dụng web là gì?
Tăng lỗ hổng bảo mật
Lỗi kết nối CSDL
Tăng sử dụng bộ nhớ và giảm hiệu suất
Lỗi trình tự xử lý yêu cầu client
답변 2
0
저도 이부분이 이해가 안됬는데 설명을 듣고도 헷갈리네요ㅜ
그전에는 AppConfig에서 구현객체를 만들었고, 그 객체들을 Appconfig 내에서 연결하여 주었기때문에, 각 구현체 클래스간의 의존관계는 아니었다. 따라서 DIP만족이다. 그러나 싱글톤 패턴일 경우에는 해당 구현 객체를 각 구현 클래스 내에서 만들고 연결하는 파이프? 호스만 appConfig에서 제공해준다. 사실상 구현 객체들은 실제로 각 구현클래스들 끼리 의존하고 있기에 DIP위반이다? 맞나요? 너무어렵네요 ㅜ






답변 감사드립니다.
제가 자답한 내용이 맞다는 말씀이시죠?