• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

스프링 컨테이너와 싱글톤 패턴에 대해 질문드립니다.

22.01.06 22:43 작성 조회수 161

0

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

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

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

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
 
안녕하세요.
싱글톤에 관련하여 질문이 있습니다.
 
1. 싱글톤 컨테이너를 배우면서
'스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다.'
라는 문장이 있는데 스프링 컨테이너가 클래스의 인스턴스가 1개만 생성하도록 보장하는 것(싱글톤 패턴)이 아닌가요?
그렇다면 스프링 컨테이너도 싱글톤 패턴을 적용하고 있는 것이 아닌가요?
저는 스프링 컨테이너가 스프링에서 싱글톤 패턴을 적용해준 것이고, 이를 위한 코드를 직접 짜지 않아도 되기 때문에 자유롭다 + Configuration을 이용하여 DIP, OCP 문제를 해결하였다 라고 이해하였는데, 잘못 이해한 것인가요?
 
2. 싱글톤 패턴의 문제점에서, private 생성자로 자식 클래스를 만들기 어렵다는 내용이 있는데,
constructor가 private이면 자식에게 extends 될 수 없나요?
 
감사합니다.

답변 1

답변을 작성해보세요.

1

David님의 프로필

David

2022.01.07

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

.

1. 싱글톤 컨테이너를 배우면서 '스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다.' 라는 문장이 있는데 스프링 컨테이너가 클래스의 인스턴스가 1개만 생성하도록 보장하는 것(싱글톤 패턴)이 아닌가요? 그렇다면 스프링 컨테이너도 싱글톤 패턴을 적용하고 있는 것이 아닌가요? 저는 스프링 컨테이너가 스프링에서 싱글톤 패턴을 적용해준 것이고, 이를 위한 코드를 직접 짜지 않아도 되기 때문에 자유롭다 + Configuration을 이용하여 DIP, OCP 문제를 해결하였다 라고 이해하였는데, 잘못 이해한 것인가요?

=> 빈으로 등록할 클래스를 만들 때 싱글톤 패턴 코드(아래 캡쳐 이미지의 코드)를 적용하지 않고 일반적인 클래스를 만들 듯 코드를 작성합니다. 싱글톤을 위해 Component, Controller, Service, Repository를 만들 때 아래 싱글톤 패턴 코드를 작성하지 않으시니깐요. 스프링은 빈을 생성할 때 Scope가 싱글톤이라면 그것을 보장하기 위해 생성하기 전에 이미 생성된 빈이 존재하는지 확인합니다. 이미 존재한다면 존재하는 빈을 가져와서 의존관계를 맺어주고 아니라면 생성한 뒤 의존관계를 맺어줍니다. 이것이 싱글톤 컨테이너의 역할입니다. 만약 스프링이 싱글톤 패턴 코드를 적용하여 싱글톤을 유지한다고 이해하고 계시면 잘못 이해하고 계신 것입니다.

 

싱글톤 패턴 코드

 

2. 싱글톤 패턴의 문제점에서, private 생성자로 자식 클래스를 만들기 어렵다는 내용이 있는데, constructor가 private이면 자식에게 extends 될 수 없나요?

=> 네, 불가능합니다. 해당 내용은 기본 생성자와 상속에 대해서 찾아보시면 학습에 도움되실 것 같습니다.

.
감사합니다.