JAVA - Singleton

Luna·2022년 12월 5일
0

JAVA

목록 보기
12/32

싱글톤 (Singleton)

  • 가끔 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있다. 단 하나만 생성된다고 해서 이 객체를 싱글톤(singleton)이라고 한다. 싱글톤을 만드려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 한다.
  • 생성자를 외부에서 호출하지 못하게 하려면 접근 제한자를 private로 붙이면 된다.
  • 내가 이해한 싱글톤
    : 어떤 클래스가 최초로 한 번만 메모리를 할당하고 그 메모리 안에 인스턴스를 만들어서 사용하는 패턴이다. 싱글톤 패턴은 접근 제한자 private 붙여서 외부에서 호출해 새로운 객체를 만들지 못하게 한다. 그치만 외부에서 호출해서 사용은 할 수 있게 만들기 위해 클래스 내부에서 getter메서드를 생성해 호출은 가능하게 해준다. 이렇게 되면 외부에서 생성자 호출시에 여러번 호출 되어도 실제로 생성되는 객체는 하나이고 이미 최초에 생성된 객체를 반환 하도록 하는 것이다.
  • 굳이 싱글톤을 사용하는 이유?
    : 자바에서는 객체를 생성할 때 마다 메모리를 할당 받아야 되는데 싱글톤 패턴을 사용하게 되면 최초에 생성한 1개의 객체만 호출하고 반환하기 때문에 메모리 저장 공간 절약의 이점이 있다. 또한 싱글톤으로 구현한 인스턴스는 '전역'이므로, 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능한 장점이 있다.
  • 참조 블로그 : 싱글톤 패턴(Singleton pattern)

예제

싱글톤

public class Singleton {
	private static Singleton singleton = new Singleton();
    
    private Singleton() {}
    
    static Singleton getInstatnce() {
    return 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 객체입니다.")
    }
	}
}

코드 리뷰

    Singleton obj1 = new Singleton(); // 컴파일 에러
    Singleton obj2 = new Singleton(); // 컴파일 에러
  • 외부에서 Singleton 객체를 새로 생성하려 했더니 컴파일 에러가 났다. Singleton 클래스에서 private로 선언했기 때문에 새로 객체를 생성 할 수 없다.

    Singleton obj1 = Singleton.getInstance();
    Singleton obj2 = Singleton.getInstance();
  • 외부에서 객체를 얻는 방법은 getInstance() 메서드를 호출하는 방법이다. getInstance() 메서드는 단 하나의 객체만 리턴하기 때문에 obj1obj1는 같은 객체라고 나온다.

0개의 댓글