싱글톤패턴 DIP 위반
361
3 câu hỏi đã được viết
[질문 내용]
싱글톤 패턴 문제점에서 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를 위반합니다.
Câu trả lời 1
0
안녕하세요, 인프런 AI 인턴입니다.
닉네임님의 질문에 대한 해답으로, 싱글톤 패턴과 Dependency Inversion Principle(DIP) 위반 문제에 관하여 이미 다룬 질문을 찾아냈습니다. 먼저, 당신의 질문에서 문제의 핵심은 “싱글톤 패턴 구현 시 DIP를 어떻게 지킬 수 있는가?“라는 점에 집중하고 있습니다. 질문하신 내용과 유사한 맥락에서 DIP 위반 문제점과 싱글톤 패턴을 사용한 구현에서 DI 구현의 어려움을 논한 이전의 질문 및 답변들을 참고하시면 도움이 될 것 같습니다.
- “싱글톤의 DIP 위반”에서 싱글톤 패턴 시 DIP를 위반하게 되는 논리적인 설명과 구현 시 고려해야 할 점에 대해 논의되었습니다. 이는 AppConfig를 예로 들며 싱글톤 패턴 적용 시 발생할 수 있는 DIP 위반 문제를 설명합니다.
다만, 직접적으로 닉네임님의 구체적인 코드 예시와 완전히 일치하는 상황에 대한 설명은 아니므로, 이 답변만으로 모든 궁금증이 해결되지 않을 수 있습니다. 싱글톤 패턴에서의 DIP 위반과 DI 구현의 어려움에 대한 구체적인 해결방안이나 설명을 찾고 계시다면, “싱글톤 패턴 문제점”과 “getInstance()와 DIP” 또한 유용한 정보를 제공할 수 있습니다. 이 두 게시글은 싱글톤 패턴을 사용할 때 발생할 수 있는 DIP 위반의 문제점과 함께 DI를 어떻게 적용할 수 있는지에 대한 고민을 다룹니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?
0
45
2
MemberService의 인터페이스를 왜 사용하는지 궁금합니다.
0
72
1
롬복 @Setter를 써야 하는 상황이 있는건가요?
0
87
1
빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?
0
79
1
테스트 속도가 나중에 영향이 있을까요?
0
75
1
gradle 설정 안떠서 질문 남깁니다!
0
116
2
build.gradle로 프로젝트를 여는 이유
0
81
1
provider 사용하는 이유
0
83
1
다음 강의 뭘 들어야 할까요
0
123
2
프로토타입 빈, 직접 destroy 호출 안 할 경우
0
62
1
beanB
0
79
2
퀴즈다시풀기
0
63
1
Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ
0
90
2
"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.
0
63
3
run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>
0
102
2
도메인의 정의?
0
57
1
ApplicationContext 질문입니다.
0
60
1
@Scope의 proxyMode를 사용할때 단위 테스트 방법
0
86
2
ai api 선정하기 관련 질문
0
115
2
생성자 자동주입 관련해서
0
60
1
생성자 직접 호출 vs 팩토리 메서드 패턴
0
91
2
Spring에서 SessionScope와 RequestScope는 함께 사용되나요?
1
62
1
12:25
0
74
2
appConfig.xml 오류
0
123
1

