해결된 질문
작성
·
505
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
제목의 키워드에 관한 질문글들을 읽으면서 의문이 생겨 질문드립니다.
먼저 제가 질문글들을 읽고 이해하고있는 내용은 다음과 같습니다.
싱글톤을 사용한다하여 무조건 DIP를 위반하는 것이 아니다. AppConfig를 사용하면 DIP위반을 피할 수 있다. 즉, 클라이언트에서 getInstance로 싱글톤 객체를 직접 참조하는 것이 아닌, 외부에서 getInstance로 반환된 싱글톤 객체를 의존성 주입을 받아 사용하면 DIP를 준수 할 수 있다.
그런데 이렇게 이해를 하니 DIP를 위반하는 것은 싱글톤을 사용함에 따라 생기는 문제가 아닌 의존성주입을 사용하지 않음에 따라 생기는 문제인것 같다는 의문이 생깁니다.
"의존관계상 클라이언트가 구체 클래스에 의존한다"라고 되어있는데, 기존에 역할에만 잘 의존하고 있던 클라이언트가 구현체가 싱글톤으로 바뀜에 따라 역할이 아닌 구체에 의존해야만하는 강제적인 상황이 발생하는 경우가 존재하는건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴이에요. 질문 내용에 대한 답변 드리겠습니다.
싱글톤 패턴을 사용하는 것이 DIP를 위반하는 것은 아니지만, 싱글톤 패턴을 사용하면서도 DIP를 지키기 위해서는 클라이언트가 직접 getInstance
메서드를 사용하여 싱글톤 객체를 참조하는 것이 아니라, 외부에서 getInstance
메서드로 반환된 싱글톤 객체를 의존성 주입 받아 사용해야 합니다.
의존성 주입을 사용하지 않는 경우에는, 클라이언트가 구체 클래스에 의존하게 되는 문제가 발생할 수 있습니다. 예를 들면, getInstance
메서드를 호출하여 반환된 싱글톤 객체가 변경될 경우, 해당 객체를 사용하는 모든 클라이언트에 영향을 미칩니다. 이는 결국 코드 유지보수를 어렵게 만들어 질 수 있습니다.
따라서, DIP를 지키기 위해 싱글톤 패턴을 사용할 때는 의존성 주입을 사용하는 것이 좋습니다. 이렇게 하면, 클라이언트는 인터페이스나 추상 클래스에만 의존하게 되므로, 구현 객체가 변경되더라도 해당 객체를 사용하는 클라이언트는 수정하지 않아도 됩니다.
이상입니다. 추가적인 궁금한 사항이 있으면 언제든지 질문해주세요.