작성
·
162
·
수정됨
0
[질문 내용]
싱글톤 패턴 문제점에서 getInstance() 사용시 DIP를 위반한다고 하신 점이 이해가 잘 안가서 직접 구현해보았습니다. 제가 이해한 내용이 맞나요...?
[구현 내용]
싱글톤 객체의 의존성 주입에 관한 문제이므로, SingletonService에 주입한 SingletonRepository를 생성하였습니다.
public class SingletonRepository {
private static final SingletonRepository instance = new SingletonRepository();
public static SingletonRepository getInstance() {
return instance;
}
private SingletonRepository(){}
}
SingletonService에 SingletonRepository 필드를 추가합니다.
public class SingletonService {
private SingletonRepository singletonRepository;
...
}
DIP를 지키기 위해선, DI를 해야합니다. 하지만 SingletonService에 의존관계를 주입할 수 있는 방법이 없습니다...
생성자 주입 방법: 추가 객체 생성을 막기 위해 생성자를 막아놓았으므로 불가.
필드 주입, setter 주입, 일반 메서드 주입: 스프링 기술, 순수 자바 코드로 주입 불가.
클라이언트코드인 SingletonService가 SingletonRepository를 사용하기 위해 다음과 같이 구현체에 의존해야 합니다.
public class SingletonService {
private SingletonRepository singletonRepository = SingletonRepository.getInstance();
...
}
따라서 순수 자바 코드로 싱글톤 패턴 구현 시 DIP를 위반합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
닉네임님의 질문에 대한 해답으로, 싱글톤 패턴과 Dependency Inversion Principle(DIP) 위반 문제에 관하여 이미 다룬 질문을 찾아냈습니다. 먼저, 당신의 질문에서 문제의 핵심은 “싱글톤 패턴 구현 시 DIP를 어떻게 지킬 수 있는가?“라는 점에 집중하고 있습니다. 질문하신 내용과 유사한 맥락에서 DIP 위반 문제점과 싱글톤 패턴을 사용한 구현에서 DI 구현의 어려움을 논한 이전의 질문 및 답변들을 참고하시면 도움이 될 것 같습니다.
다만, 직접적으로 닉네임님의 구체적인 코드 예시와 완전히 일치하는 상황에 대한 설명은 아니므로, 이 답변만으로 모든 궁금증이 해결되지 않을 수 있습니다. 싱글톤 패턴에서의 DIP 위반과 DI 구현의 어려움에 대한 구체적인 해결방안이나 설명을 찾고 계시다면, “싱글톤 패턴 문제점”과 “getInstance()와 DIP” 또한 유용한 정보를 제공할 수 있습니다. 이 두 게시글은 싱글톤 패턴을 사용할 때 발생할 수 있는 DIP 위반의 문제점과 함께 DI를 어떻게 적용할 수 있는지에 대한 고민을 다룹니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.