인프런 커뮤니티 질문&답변

닉네임님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

싱글톤 패턴

싱글톤패턴 DIP 위반

작성

·

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 위반”에서 싱글톤 패턴 시 DIP를 위반하게 되는 논리적인 설명과 구현 시 고려해야 할 점에 대해 논의되었습니다. 이는 AppConfig를 예로 들며 싱글톤 패턴 적용 시 발생할 수 있는 DIP 위반 문제를 설명합니다.

다만, 직접적으로 닉네임님의 구체적인 코드 예시와 완전히 일치하는 상황에 대한 설명은 아니므로, 이 답변만으로 모든 궁금증이 해결되지 않을 수 있습니다. 싱글톤 패턴에서의 DIP 위반과 DI 구현의 어려움에 대한 구체적인 해결방안이나 설명을 찾고 계시다면, “싱글톤 패턴 문제점”“getInstance()와 DIP” 또한 유용한 정보를 제공할 수 있습니다. 이 두 게시글은 싱글톤 패턴을 사용할 때 발생할 수 있는 DIP 위반의 문제점과 함께 DI를 어떻게 적용할 수 있는지에 대한 고민을 다룹니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.