작성
·
239
0
답변 1
1
안녕하세요. asdf5184님, 공식 서포터즈 David입니다.
.
1. 싱글톤 컨테이너를 배우면서 '스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다.' 라는 문장이 있는데 스프링 컨테이너가 클래스의 인스턴스가 1개만 생성하도록 보장하는 것(싱글톤 패턴)이 아닌가요? 그렇다면 스프링 컨테이너도 싱글톤 패턴을 적용하고 있는 것이 아닌가요? 저는 스프링 컨테이너가 스프링에서 싱글톤 패턴을 적용해준 것이고, 이를 위한 코드를 직접 짜지 않아도 되기 때문에 자유롭다 + Configuration을 이용하여 DIP, OCP 문제를 해결하였다 라고 이해하였는데, 잘못 이해한 것인가요?
=> 빈으로 등록할 클래스를 만들 때 싱글톤 패턴 코드(아래 캡쳐 이미지의 코드)를 적용하지 않고 일반적인 클래스를 만들 듯 코드를 작성합니다. 싱글톤을 위해 Component, Controller, Service, Repository를 만들 때 아래 싱글톤 패턴 코드를 작성하지 않으시니깐요. 스프링은 빈을 생성할 때 Scope가 싱글톤이라면 그것을 보장하기 위해 생성하기 전에 이미 생성된 빈이 존재하는지 확인합니다. 이미 존재한다면 존재하는 빈을 가져와서 의존관계를 맺어주고 아니라면 생성한 뒤 의존관계를 맺어줍니다. 이것이 싱글톤 컨테이너의 역할입니다. 만약 스프링이 싱글톤 패턴 코드를 적용하여 싱글톤을 유지한다고 이해하고 계시면 잘못 이해하고 계신 것입니다.
싱글톤 패턴 코드
2. 싱글톤 패턴의 문제점에서, private 생성자로 자식 클래스를 만들기 어렵다는 내용이 있는데, constructor가 private이면 자식에게 extends 될 수 없나요?
=> 네, 불가능합니다. 해당 내용은 기본 생성자와 상속에 대해서 찾아보시면 학습에 도움되실 것 같습니다.
.
감사합니다.