Spring

[Spring] 싱글톤 패턴

배씌 2024. 5. 27. 00:04

싱글톤 패턴이란?

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

- 객체 인스턴스가 2개 이상 생성되는 것을 막아야함. (어떻게? -> private 생성자 이용)

 

싱글톤 패턴 예시)

public class SingletonService {
    private static final SingletonService instance = new SingletonService();

    public static SingletonService getInstance(){
        return instance;
    }

	// private 생성자 이용해서 다른 곳에서 객체 생성되는 것 방지
    private SingletonService(){
    }

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

 

1. static 영역에 객체 instance 를 미리 하나 생성해서 올려둠

2. 이 객체 인스턴스가 필요하면 오직 'getInstance()' 메소드를 통해서만 조회 가능.

3. 딱 1개만 존재해야 하므로 생성자를 private으로 막아둠.

 

싱글톤 패턴을 사용하면 고객의 요청이 올 때마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있다. 그러나 싱글톤 패턴은 많은 문제점도 있다.

 

※ 문제점

1. 싱글톤 패턴을 구현하는 코드 자체가 많이 들어감

2. 의존 관계상 클라이언트가 구체 클래스에 의존함. -> DIP 위반

3. 클라이언트가 구체 클래스에 의존해서 OCP원칙을 위반할 가능성이 높다.

4. 테스트하기 어렵다.

5. 내부 속성을 변경하거나 초기화하기 어렵다.

6. private 생성자로 자식 클래스를 만들기 어렵다.

7. 유연성이 떨어진다.