티스토리 뷰

싱글톤 패턴이란 ?

특정 클래스에 대해 객체의 인스턴스가 heap 메모리에 단 하나만 존재할 수 있도록 해주는 패턴

 

 

코드로 이해하기

비교를 위한 Normal 클래스

public class Normal {

	public Normal() {
    		System.out.println("Normal 인스턴스 생성");
    }
}

 

Singleton 클래스

public class Singleton {
	
    private static Singleton singleton; // 2.
    
    private Singleton() {}	// 1.
    
    public static Singleton getInstance() { // 3.
    	
        if(singleton == null) {	// 인스턴스가 아직 안 만들어졌다면,
        	singleton = new Singleton();
            	System.out.println("Singleton 인스턴스 생성");
        } else {
        	System.out.println("Singleton 인스턴스 이미 존재");
        }
        
        return singleton;
}

1. 생성자를 외부에서 직접 호출할 수 없도록 private으로 선언합니다.

2. 인스턴스를 저장하기 위한 변수를 static으로 선언하여 메모리에 단 한 번만 할당할 수 있도록 만듭니다.

3. getInstance() 메소드를 통해 인스턴스가 heap 메모리에 존재하는지 확인합니다.

만일 존재하지 않으면 생성하고, 이미 존재한다면 만들어져 있는 주소값을 리턴합니다.

 

 

메인 함수에서 객체 생성하기

// 메인함수
Normal n1 = new Normal();
Normal n2 = new Normal();

Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();

이 때, Singleton 클래스는 new 연산자를 사용하여 객체를 생성할 수 없습니다.

 

실행 결과

결과를 보면,

Normal 클래스는 객체를 생성할 때마다 인스턴스가 생성이 되지만

Singleton 클래스는 인스턴스를 한 번 생성하면 더 이상 생성하지 않습니다.

 

hashCode() 메소드를 통해 주소값을 확인해보면,

 

n1과 n2의 주소값은 각각 다릅니다.
반면, s1과 s2의 주소값은 같습니다.

 

 

싱글톤 패턴을 사용하는 이유 ?

  • 단 한번만 인스턴스를 생성하기 때문에 메모리의 낭비를 줄일 수 있습니다.

  • 전역 메소드로 호출하기 때문에 다른 클래스에서 사용하기 쉽습니다.

  • 공통된 객체를 사용해야 하는 프로그래밍에서 매번 객체를 생성하지 않고 같은 객체를 사용하도록 하여 성능을 높일 수 있습니다.

최근에 올라온 글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday