본문 바로가기

Design Pattern/생성(Creational) 패턴

2. 싱글톤 패턴 (Singleton Pattern)

목차

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