2024. 1. 24. 22:46ㆍBackend/Spring

📝 인프런에서 강의를 하고 계시는 김영한 님의 Spring Framework를 공부하고 있습니다. 틀리거나 다른 부분이 있을 수 있습니다.
1. 싱글톤 패턴
싱글톤 패턴은 클래스의 인스턴스가 1개만 생성되는 패턴이다.
왜 싱글톤 패턴을 사용할까?
싱글톤 패턴을 사용하게 되면 처음 생성된 객체가 등록되고, 해당 객체를 계속 공유하며 사용할 수 있다. 이것은 메모리 낭비 문제를 해결할 수 있는데, 그래서 싱글톤 패턴을 사용한다.
그러나 문제점이 있다.
유연성이 떨어진다는 점, 구현하는 코드가 많이 필요하고, 클라이언트가 구현 클래스에 의존하게 되어 DIP 및 OCP를 위반하게 된다.
2. 싱글톤 컨테이너
1)
스프링에서 사용하는 스프링 컨테이너는 객체 인스턴스를 싱글톤으로 관리하는데, 이런 기능을 싱글톤 레지스트리라고 한다. 앞서 말했던 싱글톤 패턴의 문제점은 스프링 컨테이너의 기능 덕분에, 싱글톤 컨테이너를 통해 해결이 된다.
그러나 주의할 점이 있는데, 객체가 하나로 공유된다면 엄청나게 위험하다. 민감한 정보들이 여러 클라이언트에게 하나의 객체로 유되면 안되기 때문이다.
2)
싱글톤 컨테이너에서 중요한 것은 @Configuration !!
@Bean으로 등록된 여러 객체들이 있는데, 다음 코드를 보게 되면 이상하다.
@Configuration
public class Config {
@Bean
public ReadService readService(){
return new ReadServiceImpl(readRepository());
}
@Bean
public UpdateService updateService(){
return new UpdateServiceImpl(readRepository(),updateRepository());
}
@Bean
public ReadRepository readRepository(){
return new DetailReadRepository();
}
//이하 생략
}
여기서 readService()와 updateService()를 동시에 호출하게 되면, 호출되는 과정에서 연결된 DetailReadRepository()가 다른 객체인 것처럼 느껴질 수 있기 때문이다. 그러나 Spring에서는 클래스의 바이트 코드를 조작하는 라이브러리를 사용하기 때문에, 싱글톤이 보장된다.
참고로, @Configuration을 삭제하면, 싱글톤이 유지되지 않는다.
Reference
'Backend > Spring' 카테고리의 다른 글
| [Spring] Spring Controller - InitBinder, Model, ModelAttribute (0) | 2024.03.10 |
|---|---|
| [Spring] 컴포넌트 스캔, 의존 관계 주입, 조회되는 빈 (0) | 2024.01.25 |
| [Spring] Class Assertions (0) | 2024.01.24 |
| [Spring] Spring Container (1) | 2024.01.23 |
| [Spring] 객체 지향, 인터페이스, 스프링 (0) | 2024.01.08 |