티스토리 뷰

개발/Java

[Java] 싱글톤 (Singleton)

bambookim 2022. 3. 27. 17:31

싱글톤이란?

 

프로그램 전체에서 웬만하면 단 하나의 객체가 공유되며 기능을 수행하는 것이, 기능을 수행할 때마다 새로운 객체가 생성되도록 하는 것보다 효율과 성능 측면에서 더 좋은 경우가 있다. 또한 여러 객체가 생성되지 않고 단 하나의 객체만 생성되도록 보장해야 하는 경우가 있다. 이러한 객체를 싱글톤(Singleton) 이라고 한다.

 

자바에서 객체는 new 연산자에 의해 생성된다. new 연산자를 사용한다는 것은, 객체의 생성자를 호출하여 힙 영역에 객체를 저장한다는 것이다. 이러한 형태의 객체 생성은 객체 생성에 제한을 두지 않으므로, 싱글톤을 사용하기 위해서는 클래스 외부에서 new 연산자로 객체를 생성하는 것을 제한해야 한다. 외부에서 new 연산자를 통한 생성자 호출을 막기 위해서, 싱글톤의 생성자를 private으로 설정하여 싱글톤 클래스 외부에서 new 연산자를 호출하는 것을 막아야 한다.

 

외부에서 생성하는 것을 막았다면 객체 생성은 어디에서 해야 할까? 바로 클래스 내부이다. 

또한 외부에서 클래스 생성을 하지 못하므로, static 키워드를 이용하여 외부에서 이용할 수 있도록 한다.


싱글톤의 구현 및 적용

 

public class ThisIsSingleton {
	// static field
    private static ThisIsSingleton singleton = new ThisIsSingleton();
    
    // Constructor - private
    private ThisIsSingleton() {
    
    }
    
    // static method
    static ThisIsSingleton getInstance() {
    	return singleton;
    }
}

객체를 사용하지 않고 클래스 내부의 정보를 이용할 수 있는 static 키워드를 붙인다. 대신에 객체 자체에는 외부에서 접근하지 못하도록 private을 붙이고, 오로지 객체를 참조할 수 있는 getInstance() 메소드만 이용하도록 한다.

 

두 개의 참조 변수를 비교해보면 동일한 객체 (@23348b5d)를 참조하고 있는 것을 확인할 수 있다.

 

댓글