싱글톤 패턴

개발자가 되고 싶어요 ㅣ 2024. 3. 2. 10:21

싱글톤 패턴

애플리케이션 전체에서 단 한 개의 객체만 생성해서 사용하고 싶다면 싱글톤(Singleton) 패턴을 적용할 수 잇다. 싱글톤 패턴의 핵심은 생성자를 private 접근 제한해서 외부에서 new 연산자로 생성자를 호출할 수 없도록 막는 것이다.

 

생성자를 호출할 수 없으니 외부에서 마음대로 객체를 생성하는 것이 불가능해진다. 대신 싱글톤 패턴이 제공하는 정적 메소드를 통해 간접적으로 객체를 얻을 수 있다.

다음은 싱글톤 패턴의 전체 코드이다.

public class Singleton {
	//private 접근 권한을 갖는 정적 필드 선언과 초기화
	private static Singleton singleton = new Singleton();
	
	//private 접근 제한을 갖는 생성자 선언
	private Singleton() {
		
	}
	
	//public 접근 권한을 갖는 정적 메소드 선언
	public static Singleton getInstance() {
		return singleton;
	}
}

 

외부에서 객체를 얻는 유일한 방법은 getInstance() 메소드를 호출하는 것이다. getInstance()메소드가 리턴하는 객체는 정적 필드가 참조하는 싱글톤 객체이다.

package practice.singleton;

public class SingletonExample {
	public static void main(String[] args) {
		/*
		 Singleton obj1 = new Singleton(); // 컴파일 에러
		 Singleton obj2 = new Singleton(); // 컴파일 에러
		 */
		
		//정적 메소드를 호출해서 싱글톤 객체를 얻음
		Singleton obj1 = Singleton.getInstance();
		Singleton obj2 = Singleton.getInstance();
		
		//동일한 객체를 참조하는지 확인
		if(obj1==obj2) {
			System.out.println("같은 Singleton 객체입니다.");
		} else {
			System.out.println("다른 Singleton 객체입니다.");
		}
	}

}

 

getInstance()메소드를 통해 생성한 두 객체가 동일한 참조를 하는 객체인지 확인해보겠다.

 

스택 영역에 생성된 obj1과 obj2는 힙 영역에 Singleton 객체를 참조하여 만들어진 객체이다.

따라서 결과는 두 객체 모두 동일한 참조를 하는 객체로 확인된다.

'Java' 카테고리의 다른 글

tmp  (0) 2024.04.28
멀티 스레드  (0) 2024.04.17
Getter와 Setter  (0) 2024.02.27
접근 제한자  (0) 2024.02.26
예외 처리  (0) 2024.02.22