Concept/Design Pattern
[Design Pattern] Signleton Pattern
eee_269
2021. 5. 30. 21:12
728x90
반응형
싱글톤 패턴
- 해당 클래스의 인스턴스가 최대 한 개까지만 만들어진다.
- 유일한 인스턴스를 어디서든지 접근할 수 있도록 할 수 있다.
- Java에서는 private 생성자와 정적메소드, 정적 변수를 사용
Singleton Pattern 형식
public class Test {
// 정적 변수
private static Test t;
// private 생성자
private Test() { }
// 정적 메소드
public static Test getInstance() {
if(t == null) {
t = new Test();
}
return t;
}
}
- 다중 스레드를 사용하는 어플리케이션에서는 속도와 자원 문제를 파악해보고 적절한 구현법을 사용해야 한다.
→ DCL (Double-Checking Locking) 을 써서 getInstance()에서 동기화되는 부분을 줄인다.
public class Test {
private volatile static Test t;
private Test() { }
public static Test getInstance() {
if(t == null) {
synchronized (Test.class) {
if(t == null) {
t = new Test();
}
}
}
return t;
}
}
- volatile
- 멀티스레드를 사용하더라도 정적 변수가 Singleton 인스턴스로 초기화되는 과정이 올바르게 진행될 수 있도록 할 수 있다.
- getInstance() 메소드:
- 인스턴스가 있는지 확인하고, 없으면 동기화
- → 처음에만 동기화 진행
- 동기화 후에도 다시 한 번 변수가 null인지 확인한 다음 인스턴스를 생성
728x90
반응형