스프링 프레임워크의 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 |