JAVA

자바 singleton 싱글톤 패턴 클래스란?

쏜스 2021. 1. 13. 02:56

자바에서 많이 사용하는 패턴은 Singleton (싱글톤) 패턴이다.

클래스에 Static 메모리를 할당하고 그 Static 메모리에 객체(인스턴스)를 만들어 사용하는 디자인 패턴이다.

싱글톤 패턴을 사용하는 이유?

인스턴스가 1개만 생성되는 특징을 가지고 있어, 요청이 많은 곳에서 사용하면 효율을 높일 수가 있다.

또한 한번의 객체 생성으로 사용이 가능하므로 메모리 낭비를 방지할 수가 있다.

하지만 동시다발적으로 호출되는 문제점을 고려해서 설계해야된다는 단점 또한 가지고 있다.

 

자바 싱글톤 패턴에 대해서 자세하게 알아보자.

public class Calc {
	// 싱글톤(singleton 패턴)
	private static Calc instance = null;
	
	public static Calc getInstance() {
		if(instance == null) instance = new Calc();
		
		return instance;
	}
	// 생성자가 private 이므로 new로 객체 생성 불가능.
	private Calc() {}
	
	public void plus(int x, int y) {
		System.out.println(x + " + " + y + " = " + (x+y));
	}
	public void minus(int x, int y) {
		System.out.println(x + " - " + y + " = " + (x-y));
	}
}
public class Exam6 {
	public static void main(String[] args) {
		// singleton 사용 방법 1
		Calc calc = Calc.getInstance();
		calc.plus(5, 7);
		calc.minus(5, 7);
		System.out.println("-----------");
				
		// singleton 사용 방법 2
		Calc.getInstance().plus(5, 7);
		Calc.getInstance().minus(5, 7);
	}

}

위의 코드에서 instance 라는 전역 변수를 선언하는데 접근 제한자를 private 로 지정함으로써

직접적인 접근을 불가능하게 한다.

 

생성자 또한 private 으로 설정되어있으므로 new 를 통한 객체 생성도 불가능하게된다.

싱글톤 패턴은 멀티쓰레드, 스프링에서도 자주 사용하는데 후에 알아보도록 하자.