Etc
Design Pattern - singleton
SuperDT
2024. 4. 7. 20:10
Singleton Pattern은
애플리케이션 내에서 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴입니다
싱글톤 패턴을 사용하면 전역에서 해당 클래스의 인스턴스에 접근 가능하고
리소스를 절약하고 객체 간의 상태를 공유할 수 있습니다
보통 패턴을 사용하지 않는 경우, 아래와 같이 클래스를 생성합니다
public class NotSingleton {
// Singleton 패턴을 사용하지 않고 일반적인 클래스
public NotSingleton() {}
}
패턴을 사용하는 경우는 아래와 같이
클래스 내부에서 해당 객체가 null인 경우에만 생성하고
null이 아닌 경우에는 생성된 객체를 반환하도록 클래스를 생성합니다
public class Singleton {
private static Singleton instance;
// 생성자를 private으로 선언하여 외부에서 인스턴스를 생성하는 것을 막음
private Singleton() {}
// getInstance 메서드를 통해 유일한 인스턴스를 반환
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
두 클래스를 사용해보면
싱글톤 패턴을 사용하는 경우에는 객체 하나를 생성한 후에는 계속 해당 객체를 참조하고 있고
사용하지 않은 경우에는 생성할 때 마다 객체가 생성됩니다
public class Main {
public static void main(String[] args) {
// 싱글톤 패턴을 사용하는 경우
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2); // true, 동일한 인스턴스를 참조하므로 true 출력
// 사용하지 않는 경우
NotSingleton notSingleton1 = new NotSingleton();
NotSingleton notSingleton2 = new NotSingleton();
System.out.println(notSingleton1 == notSingleton2); // false, 각각 다른 인스턴스를 생성했으므로 false 출력
}
}
객체를 빈번하게 생성할 경우,
사용하지 않는 객체(사용하지 않는 참조)가 발생 메모리 누수가 발생할 수 있습니다
따라서 설정 정보와 같이 여러 곳에서 사용하는 클래스의 경우
싱글톤 패턴을 사용하여 메모리 누수를 막을 수 있습니다