스프링과 싱글톤

wangjh789·2022년 7월 24일
0

싱글톤

기본적인 싱글톤 코드

public class SingleTonService {

    private static final SingleTonService instance = new SingleTonService();

    private SingleTonService() {}

    public static SingleTonService getInstance() {
        return instance;
    }

    public void logic(){
        System.out.println("싱글톤 로직 호출");
    }
}

싱글톤은 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴이다.
생성자는 private으로 설정해 외부에서 new 키워드를 사용하지 못하게 막아야한다.

외부에서 인스턴스에 접근하려면 getInstance() 를 통해서만 접근이 가능하다.

문제점

  1. 코드 자체가 길다.
  2. 클라이언트가 구체 클래스에 의존한다. (DIP 위반)
  3. 클라이언트가 구체 클래스에 의존하기 때문에 OCP 원칙을 위반할 수 있다.
  4. 테스트 하기 어렵다.
    DIP란
    OCP란

싱글톤 컨테이너

스프링은 위의 문제점들을 스프링 컨테이너로 해결했다.
스프링 컨테이너는 싱글톤 코드를 작성하지 않아도 객체를 하나만 생성해 관리하는 싱글톤 레지스트리 기능을 한다.

싱글톤 주의사항

쓰레드들이 싱글톤 객체를 공유해 사용하기 때문에 상태를 가지고 있다면 잘못된 결과가 나올 수 있다.
그렇기 때문에 싱글톤 객체는 무상태성을 띄어야하고 오직 지역변수, 피라미터, ThreadLocal을 사용해야한다.

profile
기록

0개의 댓글