싱글턴 패턴(Singleton Pattern)
안녕하세요 취업길잡이 Coy입니다
오늘은 싱글턴 패턴(Singleton Pattern)에 대해서 알아보도록 하겠습니다
싱글턴 패턴이란
싱글턴 패턴은 오직 한개의 클래스 인스턴스만 제공하도록 보장하고, 인스턴스가 필요할 때 기존의 인스턴스를 활용하는 패턴입니다.
쉽게 말해서 생성자가 여러번 호출되어도, 실제로 생성되어있는 객체는 하나이며 최초로 생성된 인스턴스 객체를 반환하도록 하는 것입니다.
사용하는 목적
1. 클래스의 인스턴스가 하나여야함을 보장하고, 모든 사용자가 잘 접근할 수 있도록 할 때 사용합니다.
2. 공통된 객체를 여러개 생성해서 사용해야 하는 상황(커넥션풀, 스레드풀, 디바이스 드라이버, 캐시 등등)에 사용합니다.
3. 전역변수들을 더 엄격하게 제어해야할 때 사용합니다
구조
예제 코드
싱글턴 코드
public class Singleton {
// Singleton 클래스의 유일한 인스턴스를 저장
private static Singleton uniqueInstance;
private Singleton() { }
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
멀티스레딩 동기화 해결하기
- synchronized로 해결하기
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() { }
public static synchronized Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
문제: 동기화하면 성능이 저하됨
동기화 해결
- 처음부터 객체 만들기
public class Singleton {
private static Singleton uniqueInstance = new Singleton();
private Singleton() { }
public static Singleton getInstance() {
return uniqueInstance;
}
}
DCL을 써서 getInstance()에서 동기화되는 부분 줄이기
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() { }
public static Singleton getInstance() {
if (uniqueInstance== null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
volatile 키워드를 사용하면 멀티스레딩을 쓰더라도 uniqueInstance 변수가 Singleton 인스턴스로 초기화 되는 과정이 올바르게 진행됩니다
싱글턴 패턴의 장단점
장점
1. 싱글턴 객체는 처음 요청될 때만 초기화 됩니다
2. 클래스가 하나의 인스턴스 객체만 갖는다는 것을 보장하여 메모리를 아낄 수 있습니다
단점
1. 멀티 스레드 환경에서 싱글턴 객체를 여러번 생성하지 않도록 또 다른 처리가 필요합니다단일 책임 원칙을 위반합니다.
2. 싱글턴 패턴은 한 객체가 2가지 책임을 가집니다(클래스에 인스턴스 하나 있게하기, 해당 인스턴스 객체에 전역 접근 지점을 제공하기)
오늘 이렇게 싱글턴 패턴에 대해서 알아보았습니다.
디자인 패턴 자체가 가독성을 좋게 하거나, 유지보수가 용이하게 해주는 것은 맞지만, 상황에 따라 잘 사용하는 것이 중요합니다
출처(https://m.yes24.com/Goods/Detail/17525598)
컬럼으로 다루어 주면 좋겠다 싶은 주제가 있으면 댓글로 알려주세요
도움이 필요하시면 사연을 메일로 보내주세요
jek300300@gmail.com
도움이 되셨다면 공감과 구독 부탁드립니다
읽어주셔서 감사합니다
당신의 취업이 성공할 때까지 같이 하겠습니다! by 취업길잡이 Coy
'[2단계] CS 개념 지식 모음집 > 디자인 패턴' 카테고리의 다른 글
[Design Pattern] 빌더 패턴(Builder Pattern) (0) | 2024.02.04 |
---|---|
[Design Pattern] 상태 패턴(State Pattern) (0) | 2024.01.26 |
[Design Pattern] 데코레이터 패턴(Decorator Pattern) (0) | 2024.01.21 |
[Design Pattern] 옵저버 패턴(Observer Pattern) (0) | 2023.12.31 |
[Design Pattern] 퍼사드 패턴(Facade Pattern) (0) | 2023.12.17 |