Design Pattern

SingleTon Pattern

Jungsoomin :) 2020. 11. 24. 21:58

스프링 프레임워크의 Bean 들은 기본적으로 SingleTon 의 Scope 를 가진다. 그러므로 스프링 빈 클래스에 멤버변수를 섵부르게 작성하면 Thread-Safe 하지 않음을 제대로 겪게 된다.

 

Spring Container 가 Static Sharing Pool 이니까.

 

이렇게 알고 있는데, 그 싱글톤 패턴에 대해 알아본다.

 

사실 Jsp & Servlet 작업 당시 싱글톤을 써본적이 있다.


특징

  • static 키워드를 가지는 자기 자신의 클래스 변수
  • private 키워드를 가지는 생성자
  • static 키워드를 가지는 객체 생성 메서드
public class SingTonClass {

    private static SingTonClass singTonClass;

    private SingTonClass(){}
	
    // 반드시 멤버 변수에 값을 대입시켜야한다.
    public static SingTonClass getInstance() {
        if(singTonClass == null){
            singTonClass = new SingTonClass();
        }
        return singTonClass;
    }
}

public class Main {
    public static void main(String[] args) {
        SingTonClass singTonClass1 = SingTonClass.getInstance();
        SingTonClass singTonClass2 = SingTonClass.getInstance();

        System.out.println(singTonClass1 == singTonClass2); // true

    }
}

멀티스레드 환경에서 조건문이 여러번 돌아 여러개의 인스턴스가 생길 수 있다.

어플리케이션 구동 시 메모리 영역에 미리 객체 정보를 저장하는 것으로 해결할 수 있다.

public class SingTonClass {
	// static 키워드의 클래스 변수에 바로 값을 지정하는 모습을 보여준다.
    private static SingTonClass singTonClass = new SingTonClass();

    private SingTonClass(){}

    public static SingTonClass getInstance() {
        return singTonClass;
    }
}

public class Main {
    public static void main(String[] args) {
        SingTonClass singTonClass1 = SingTonClass.getInstance();
        SingTonClass singTonClass2 = SingTonClass.getInstance();

        System.out.println(singTonClass1 == singTonClass2); // true

    }
}

 

'Design Pattern' 카테고리의 다른 글

Prototype - 깊은 복사와 얕은 복사, Cloneable  (0) 2020.11.29
Prototype  (0) 2020.11.29
Factory Method  (0) 2020.11.24
Template Method  (0) 2020.11.23
Adapter  (0) 2020.11.23