Java(폐지)/디자인 패턴
싱글톤 패턴(Singleton Pattern)
kyeongjun-dev
2020. 8. 4. 16:45
싱글톤 패턴
싱글톤 패턴은 인스턴스를 하나만 만들어 사용하기 위한 패턴이다.
오직 하나의 인스터스만을 만들고 그것을 계속 재사용한다.
싱클톤 패턴을 적용할 경우 의미상 두 개 이상의 객체를 가질 수 없으므로 아래의 세 가지가 필요하다.
- new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정
- 유일한 단일 객체를 반활할 수 있는 정적 메서드가 필요
- 유일한 단일 객체를 참조할 정ㅈ거 참조 변수가 필요
예제 코드
- Singleton.java
package singletonPattern;
public class Singleton {
static Singleton singletonObject; //정적 참조 변수
private Singleton() {}; //private 생성자
// 객체 반환 정적 메서드
public static Singleton getInstance() {
if(singletonObject == null) {
singletonObject = new Singleton();
}
return singletonObject;
}
}
- Client.java
package singletonPattern;
public class Client {
public static void main(String[] args) {
// private 생성자이므로 new를 통해 인스턴스를 생성할 수 없다.
// Singleton s = new Singleton();
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
Singleton s3 = Singleton.getInstance();
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
s1 = null;
s2 = null;
s3 = null;
}
}
- 결과

- T메모리

객체 참조 변수들인 singletonObject, s1, s2, s3 모두 하나의 단일 객체를 참조하는 것을 확인할 수 있다.
- 결과

System.out.println을 통해 출력하면 참조하고 있는 객체의 toString() 메서드가 호출된다. toString() 메서드를 별도로 오버라이딩하지 않았다면 객체의 고유 값이 hashcode 를 반환하게 되는데, 호출할 때 같은 값이 출력되는 것으로 모든 참조 변수가 동일한 객체를 참조한다는 것을 의미한다.
싱글톤 패턴의 특징
- private 생성자를 갖는다.
- 단일 객체 참조 변수를 정적 속성으로 갖는다.
- 단일 객체 참조 변수가 참조하는 단일 객체를 반환하는 getInstance()정적 메서드를 갖는다.
- 단일 객체는 쓰기 가능한 속성을 갖지 않는 것이 정석이다.