[Spring] 싱글톤 컨테이너

[Spring] 싱글톤 컨테이너

** 공유가 아닌 개인 공부에 목적을 둔 글입니다

** 설명이 불충분할 수 있으며 잘 정리된 글이 아닐 수도 있습니다

싱글톤 패턴이란,

클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴으로,

private 생성자를 사용해 외부에서 new 로 인스턴스 생성을 하지 못하도록 막는다

해당 인스턴스가 필요할 때는 메소드를 통해서만 조회할 수 있게 한다

그렇다면 왜 싱글톤 패턴이 필요할까?

호출을 할 때마다 새로 객체를 생성하면 메모리 낭비가 심한데,

동시에 여러 클라이언트가 서비스를 요청하는 것을 고려하면 느리고, 비효율적이다

그래서 하나의 인스턴스를 공유하도록 설계하는 것이 좋은 것이다

Spring 은 스프링 컨테이너를 통해 싱글톤 인스턴스를 기본으로 하는데, 스프링 빈이 그것이다

즉 스프링 컨테이너 = 싱글톤 컨테이너이고, 싱글톤으로 관리된 스프링 빈은 같은 참조값을 갖는다

싱글톤 패턴을 적용한 기본 클래스

단, 싱글톤 방식을 고려할 때 싱글톤 인스턴스는 상태를 stateful 하게 설계해서는 안된다

같은 인스턴스를 공유하기 때문에 한 클라이언트가 인스턴스 상태에 영향을 주어서는 안되기 때문이다

예를 들어, 메소드내 this.필드 를 통해 필드의 값을 변경하는 일은 없어야 한다 (공유필드를 조심)

스프링 빈은 항상 stateless (무상태) 로 설계하자

from http://programming-hyerim.tistory.com/73 by ccl(A) rewrite - 2021-11-29 00:01:01