본문 바로가기

Study_web/Java

싱글톤(Singleton)

  • 가끔 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있다.
  • 단 하나만 생성된다고 해서 이 객체를 싱글톤(Singleton)이라고 한다.
  • 싱글톤을 만들려면 클래스 외부에서 new연산자로 생성자를 호출할 수 없도록 막아야 한다.
  • 생성자를 호출한 만큼 객체가 생성되기 때문이다.
  • 생성자를 외부에서 호출할 수 없도록 하려면 생성자 앞에 private 접근 제한자를 붙여주면 된다.
  • 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화한다.
  • 참고로 클래스 내부에서는 new 연산자로 생성자 호출이 가능하다.
  • 정적 필드도 private 접근 제한자를 붙여 외부에서 필드값을 변경하지 못하도록 막는다.
  • 대신 외부에서 호출할 수 있는 정적 메소드인 getInstance( )를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴해준다.
public class 클래스 {
	// 정적 필드
    private static 클래스 singleton = new 클래스();
    
    // 생성자
    private 클래스(){}
    
    // 정적 메소드
    static 클래스 getInstance(){
    	return singleton;
    }
}
  • 외부에서 객체를 얻는 유일한 방법은 getInstance( ) 메소드를 호출하는 방법이다.
  • getInstance( )  메소드는 단 하나의 객체만 리턴하기 때문에 아래 코드에서 변수1과 변수2는 동일한 객체를 참조함
클래스 변수1 = 클래스.getInstance();
클래스 변수2 = 클래스.getInstance();

 

싱글톤 예제

 

public class Singleton{
	private static Singleton singeton = new Singleton();
    
    private Singleton(){}
    
    static Singleton getInstance(){
    	return singleton;
    }
}

 

public class SingletonExample{
	public static void main(String[] args){
    	/*
        Singleton obj1 = new Singleton();	// 컴파일 에러
        Singletno obj2 = new Singleton();	// 컴파일 에러
        */
        
        Singleton obj1 = Singleton.getInstance();
        Singleton obj2 = Singleton.getInstance();
        
        if(obj1 == obj2){
        	System.out.println("같은 Singleton 객체 입니다.");
        }else{
        	System.out.println("다른 Singleton 객체 입니다.");
        }
    }
}

'Study_web > Java' 카테고리의 다른 글

변수의 자료형  (0) 2021.06.20
배열 메서드  (0) 2021.06.19
List와 Map 간단하게 이해하기  (0) 2021.02.19
클래스 선언  (0) 2021.01.03
객체와 클래스  (0) 2021.01.03