[싱글톤 디자인 패턴] 개념, 장점, 예시코드
[index]
1. 개념
2. 장점
3. 예시코드
1. 개념
Singleton
특정 클래스의 인스턴스가 하나만 존재하도록 보장하는 디자인 패턴.
이 패턴은 클래스에 접근할 수 있는 단일 인스턴스를 제공하고,
동일한 리소스에 대한 동시 접근을 방지하기 위해 사용됩니다.
ex) 로그 작성기, 데이터베이스 연결, 파일 시스템 등은 하나의 애플리케이션엔서 한 번만 생성되어야하며, 이들을 위해 Singleton패턴을 사용할 수 있습니다.
2. 장점
1) 인스턴스 제어: Singleton 패턴을 사용하면 시스템 전반에 걸쳐 특정 클래스의 인스턴스 개수를 한 개로 제한할 수 있습니다. 이것은 특정 클래스의 인스턴스가 반드시 한 개만 존재해야 하는 경우에 유용합니다.
2) 자원 공유: 여러 다른 객체나 클래스들 사이에서 데이터를 공유해야 하는 경우에 Singleton 패턴이 유용합니다. Singleton 객체는 동일한 자원을 공유해야 하는 여러 객체들 사이에서 사용될 수 있습니다.
3) 메모리 절약: 한 번 생성된 인스턴스를 재사용하므로 메모리 낭비를 방지할 수 있습니다. 즉, 메모리 효율성이 높아집니다.
4) 글로벌 액세스 포인트 제공: Singleton 패턴은 해당 클래스의 인스턴스에 대한 글로벌 액세스 포인트를 제공합니다. 이를 통해, 시스템 어디서나 이 인스턴스에 접근할 수 있습니다.
5) 생성 시점 제어: Singleton 패턴을 사용하면 인스턴스의 생성 시점을 제어할 수 있습니다. 인스턴스가 필요한 시점에 생성되므로, 리소스를 절약하고 성능을 향상시킬 수 있습니다.
그러나 이러한 장점에도 불구하고, Singleton 패턴은 과도하게 사용되면 시스템이 고정된 상태에 의존하게 되어 확장성과 테스트성이 저하되는 문제가 있을 수 있습니다. 따라서 필요한 경우에만 신중하게 사용하는 것이 좋습니다.
3. 예시코드
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
// Private constructor prevents instantiation from other classes
}
public static synchronized Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
위의 코드에서는 Singleton 클래스를 정의하였습니다. Singleton 클래스는 private 생성자를 가지고 있어, 외부에서 직접 new Singleton()을 통해 인스턴스를 생성할 수 없습니다.
그 대신 getInstance()라는 static 메서드를 통해 인스턴스에 접근할 수 있습니다. 이 메서드에서는 uniqueInstance가 null인지 확인하고, null일 경우 새로운 Singleton 인스턴스를 생성하여 할당합니다. 이후에는 이미 생성된 uniqueInstance를 반환합니다.
이렇게 하면, Singleton 클래스의 인스턴스는 최대 한 개만 존재하게 되고, 이 인스턴스는 getInstance() 메서드를 통해 전역적으로 접근 가능하게 됩니다. 이것이 Singleton 디자인 패턴의 기본 개념입니다.
사실 설명을 찾아도 정확히 모르겠다.
인스턴스... 객체... 또 헷갈리고 인스턴스가 뭔가 더 구체적인 느낌인거같고. 실체같은?
그리고 싱글톤을 사용하면 인스턴스가 최대 한 개만 존재해? 왜지?
스프링부트하면서 Service클래스에서 상단에 필드명으로 private static noticeMapper; 하고는 noticeMapper로 해당 메퍼의 메서드를 부르는게 싱글톤이라는건가?
다들 어렵게 설명을 해주는거같네.. 그냥 아주 쉬운 예시를 들어서 설명할 순 없는건가?
일단 올리고 내일 다시 공부하며 정확히 이해될 때
보완해야겠다~
보완 23.08.17
나의 언어로 정리해보자면!!
스프링에서는 DI컨테이너 클래스 안에 있는 Bean들만 활용하기 때문에
같은 Bean을 다른 곳에서 사용해도
단 하나의 Bean으로만 계속해서 활용할 수 있다!
따라서 이를보고 싱글톤 패턴을 따른다고 표현할 수 있다.