싱글톤 패턴
인스턴스를 하나만 존재하도록 강제하는 것. 단 하나의 유일한 인스턴스를 만들어 사용하는 방법을 싱글톤 패턴이라고 한다. 단일 오브젝트로 애플리케이션 내에 전역적으로 접근하여 여러 곳에서 공유한다.
장점
- 객체가 많이 생성되어 리소스를 많이 차지하는 무거운 클래스에서 사용된다.
- 단일 객체로 존재하여 메모리가 낭비되지 않는다.
- 이미 생성된 인스턴스를 사용해 속도가 빠르다.
단점
- 상속이 불가능하여 다형성을 적용할 수 없다.
- 한번만 생성되기 때문에 테스트가 힘들다.
- 싱글톤이 하나만 만들어지는 것을 보장하지 못한다.
- 클래스 안에서 객체를 직접 생성하여 의존성의 역전 원칙(DIP; Dependency Inversion Principle)을 위반한다.
생성 방법
- 밖에서 오브젝트를 생성하지 못하도록 생정자를
Private
로 설정한다. - 인스턴스 저장을 위해 static 필드를 지정한다.
private static Class INSTANCE
getInstance()
로 인스턴스를 한번만 생성하도록 한다.- 생성된 오브젝트는 전역변수
static INSTANCE
에 저장한다.
예시 코드
public class Singleton {
private static Singleton INSTANCE;
private Singleton(){}
public static Singleton getINSTANCE() {
if (INSTANCE == null){
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
INSTANCE가 null
일 경우 인스턴스를 생성한다. 만약 INSTANCE가 있으면 오브젝트를 반환하여 사용한다.
객체 활용은 이 getINSTANCE()
로만 이용된다.
public class Test {
public static void main(String[] args) {
Singleton test = Singleton.getINSTANCE();
System.out.println(test);
}
}
>> Singleton@53d8d10a