목차
1. 싱글톤 패턴이란?
2. 싱글톤 패턴 구조
3. 예제
4. 추가 고려사항
싱글톤 패턴 (Singleton Pattern) 이란?
싱글톤 패턴은 클래스의 인스턴스가 단 하나만을 필요로 할때 해당 클래스의 인스턴스가 '반드시' 1개 밖에 존재하지 않는 것을 '보증' 하고 싶을때 사용하는 디자인 패턴 입니다.
싱글톤 패턴 구조
이름 | 내용 |
Singleton | 인스턴스가 1개만 존재해야하는 클래스 |
Main | 메인 클래스 |
예제
Singleton 클래스
instance 필드를 가지고 getInstance 를 통해 객체를 생성합니다.
그리고 생성자를 private 로 하여 new 키워드로 생성하는것을 막아줍니다.
만약 해당 객체 값이 null 이면 객체를 생성해주고 해당 객체를 저장합니다.
이후 객체를 생성하려고 할 때, 이미 만들어진 instance 를 반환합니다.
public class SingleTon {
private static SingleTon instance;
private SingleTon() {} // private 를 통해 new 키워드로 생성하는것을 막아줍니다.
public static SingleTon getInstance(){
if(instance == null){
instance = new SingleTon();
}
return instance;
}
}
Main 클래스
Singleton 클래스의 getInstance 메서드를 호출하여 인스턴스를 생성했습니다.
이후 hashCode 함수를 통해 해당 객체의 hashCode 를 확인하여 동일한 객체인지 확인하였습니다.
public class Main {
public static void main(String[] args) {
SingleTon singleTon = SingleTon.getInstance();
System.out.println(singleTon.hashCode());
SingleTon singleTon2 = SingleTon.getInstance();
System.out.println(singleTon2.hashCode());
}
}
실행 결과:
1604839423
1604839423
로 동일한 객체임을 확인하였습니다.
추가 고려사항
싱글톤 패턴을 이용할 때 멀티 스레드 환경에서는 동시성 문제를 해결하기 위해서 synchronized 를 사용해야 합니다.
public class SingleTon {
private static SingleTon instance;
private SingleTon() {}
// 멀티 쓰레드 환경에서 동시성 문제를 해결하기 위해 synchronized 를 사용합니다.
public synchronized static SingleTon getInstance(){
if(instance == null){
instance = new SingleTon();
}
return instance;
}
}
'Design Pattern > 생성(Creational) 패턴' 카테고리의 다른 글
5. 메멘토 패턴 (Memento Pattern) (0) | 2023.10.31 |
---|