본문 바로가기

Spring

[Spring] 싱글톤 패턴

싱글톤 패턴이란?

- 클래스의 인스턴스가 딱 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. 유연성이 떨어진다.

'Spring' 카테고리의 다른 글

[Spring] 롬복  (0) 2024.05.28
[Spring] Component Scan  (0) 2024.05.28
[Spring] 스프링 빈 조회 및 출력  (0) 2024.05.25
[Spring] Spring Container  (1) 2024.05.22
[Spring] Spring으로 전환하기  (1) 2024.05.22