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

khjung1654님의 프로필 이미지
khjung1654

작성한 질문수

스프링 핵심 원리 - 기본편

싱글톤 방식의 주의점

싱글톤 패턴 단점이 이해가 안 갑니다.

작성

·

1K

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
스프링을 사용하시기 전에 순수 자바 코드로 싱글톤 생성하신 다음에 싱글톤 패턴이 가질 수 있는 단점에 대해 설명해주셨습니다.

  1. 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다.

  2. 의존관계상 클라이언트가 구체 클래스에 의존한다.

  3. private 생성자로 자식 클래스를 만들기 어렵다.

이 중 1번,3번은 스프링에서 개선됨이 확실하게 보이는데 2번은 크게 달라진 점을 모르겠습니다.

자바로만 싱글톤 만들었을 때 활용
(SingletonService가 MemberService를 상속받았다고 가정했을 때)

public class AppConfig {

    public MemberService memberService(){
        return SingletonService.getInstance();
    }
}
public class SingletonTest {

    @Test
    @DisplayName("스프링 없는 순수한 DI 컨테이너")
    void pureContainer() {
        AppConfig appConfig = new AppConfig();
        MemberService memberService1 = appConfig.memberService();
        // 활용
    }
}

이렇게 만들면 의존관계상 클라이언트가 구체 클래스에 의존하지 않는 것 아닌가요?

물론 다른 단점들이 다 고쳐지니 스프링을 안 쓸 이유가 없지만 DIP, OCP 개선을 중요하게 언급하신 것 같아서 넘어가기 찝찝하네요. 자바로 만들 때 DIP가 위반되는 이유가 뭔가요?

답변 1

0

안녕하세요. khjung1654님, 공식 서포터즈 David입니다.

2번의 경우, AppConfig 와 같이 설정 정보 클래스를 사용하지 않는 것을 전제합니다.

설정 정보 클래스를 사용하지 않고 클라이언트 코드에서 XXXSingleton.getInstance() 와 같은 코드를 사용하게 되므로, 추상이 아닌 구체에 의존하게 되어 DIP를 위반하게 됩니다.

다만, 말씀하신대로 설정 정보 클래스를 만들고, 추상에 의존하도록 설계한다면 2번 항목은 해당되지 않습니다.

감사합니다.

khjung1654님의 프로필 이미지
khjung1654

작성한 질문수

질문하기