Programming Languages/Java

[Java] - 싱글턴 패턴 (Singleton Pattern)

Jesse 2021. 4. 15. 00:31

싱글턴 패턴이란?

하나의 인스턴스만 가진 클래스를 정의하고, 해당 인스턴스를 다른 클래스에서 사용할수 있게 하는 디자인 패턴을 뜻한다.

즉, 클래스의 인스턴스는 한번만 생성되어야 하며, 생성된 객체는 모든 다른 클래스에서 사용될수 있다. 

찾아보니 Spring framework에서 기본 객체 운영방식이 싱글턴 패턴이라고 하네요. 자바를 공부하면서 꼭 알아둬야 되는 디자인 패턴 같습니다.

언제 사용하는가

  • 시스템 상에서 단 한번 객체를 생성하고 여러 곳에서 공유해 사용하고자 할 때

적용방법

  • 생성자의 접근 제어자를 private으로 명시해 외부에서 객체 생성하는 것을 막는다.
  • private static 멤버변수 차원에서 클래스 로딩시점에 자신의 생성자를 이용해 객체를 생성하고 주소값을 저장한다.
  • public static 메서드로 한번 만든 객체의 주소값을 외부에서 사용하도록 반환해주도록 정의한다.

 

예시

 class Company{
	// class loading 시점에 한번 실행되어 객체 생성되고 static 영역에 주소값 저장
	private static Company instance=new Company();
	private String comInfo="회사정보";
    
	private Company() {
		System.out.println("Company 객체 생성");
	}
	//외부(다른 클래스)에서 Company 객체를 사용하고 싶을 때 아래 메서드를 호출해서 
	//class loading 시점에 단 한번 생성한 객체를 반환받아 사용한다 
	public static Company getInstance() {
		return instance;
	}
	public String getComInfo() {
		return comInfo;
	}
}

이제 Company 클래스는 인스턴스를 통해서 여러 다른 클래스에서 사용 가능 합니다.

public class TestSingleton {

	public static void main(String[] args) {
		String info = Company.getInstance().getComInfo();
        	System.out.println(info);
	}
    
}

  이제 Company.getInstance()를 통해서 시스템 내의 다른 클래스에서 Company 객체를 매번 새로 생성하지 않으면서 사용 가능합니다.