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

gyun do님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

싱글톤 패턴

싱글톤 패턴 문제점에서 구체클래스 의존해서 DIP위반한다고 하셨는데 이건 싱

24.07.07 20:23 작성

·

105

1

싱글톤 패턴 문제점에서 구체클래스 의존해서 DIP위반한다고 하셨는데 이건 싱글톤 아니여도 마찬가지 아닌가요?

밑에 처럼 싱글톤을 안써도 , MemberServiceImple이라는 구체구현 클래스가 드러납니다..

public MemberService memberService(){
    return new MemberServiceImpl(memberRepository());
}

답변 1

1

인프런 AI 인턴님의 프로필 이미지

2024. 07. 07. 20:26

안녕하세요, 인프런 AI 인턴입니다.

gyun do님의 질문에 대해 설명이 추가적으로 필요해 보입니다. 싱글톤 패턴과 관련된 DIP 위반 문제를 이해하는 데 있어서, 싱글톤 패턴이 아니더라도 구체 클래스에 의존함으로써 발생하는 DIP 위반의 문제점을 지적하셨습니다.

DIP(의존성 역전 원칙)는 상위 모듈이 하위 모듈에 의존하지 않도록 하는 원칙입니다. 구체 클래스에 직접 의존하는 것이 아니라, 추상화에 의존해야 한다는 원칙을 말합니다. 이 원칙을 지키지 못할 경우, 특정 구현에 강하게 결합되어 시스템의 유연성과 확장성이 저하됩니다.

싱글톤 패턴의 경우, 특히 getInstance() 메소드를 통해 인스턴스에 접근하게 되면, 이 인스턴스 생성 메소드가 구체 클래스에 속해 있기 때문에, 이를 사용하는 클라이언트 코드 역시 구체 클래스에 의존하게 됩니다. 이러한 이유로 DIP를 위반한다고 보는 것입니다.

하지만 말씀하신 예시처럼, 싱글톤 패턴이 아니라도 MemberServiceImpl과 같은 구체 클래스를 직접 사용하여 인스턴스를 생성하는 경우에도 동일하게 DIP를 위반할 수 있습니다. 따라서, 스프링과 같은 프레임워크에서는 이러한 문제를 해결하기 위해 의존성 주입(Dependency Injection)을 사용합니다. 이를 통해 구체 클래스의 생성과 의존성 연결을 외부에서 처리하게 됨으로써, 클라이언트 코드가 구체 클래스가 아니라 인터페이스에만 의존하도록 할 수 있습니다.

제시한 문제 상황에 대한 추가 설명 및 유사 질문에 대한 답변을 찾으시는 경우, 다음 질문을 참고하실 수 있습니다:

  • getInstance()와 DIP: 이 질문과 답변에서는 싱글톤 패턴이 DIP를 위반하는 이유에 대해 깊이 있게 다루고 있습니다.
  • 싱글톤의 DIP 위반: 싱글톤 패턴을 사용할 때 구성 클래스에서 구체 클래스에 의존하는 문제에 대해 설명하고 있습니다.

이러한 정보들을 참고하시면 gyun do님의 궁금증을 해소하는 데 도움이 될 것입니다.

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

gyun do님의 프로필 이미지

작성한 질문수

질문하기