기록하는 코더

[Java] Singleton 싱글톤 패턴 본문

JAVA

[Java] Singleton 싱글톤 패턴

damda_di 2023. 1. 15. 00:48

Singleton Pattrn (싱글톤 패턴)

⇒ 객체가 1개만 만들어지게 하는 방법 (외부에서 new 명령을 사용하지 못하게 한다.)

생성자를 접근제한자(private)로 제한

 

📌 사용 이유!
1. 메모리 낭비 방지할 수 있다.
2. 데이터를 한 곳에 모아 놓고 공유하기 쉽다.

 

📌 singleton 클래스 만드는 방법(필수 구성 요소)

  1. 자신 class의 참조값이 저장될 변수를 private static으로 선언한다.
  2. 모든 생성자의 접근 제한자를 private으로 한다.
  3. 자신 class의 인스턴스를 생성하고 반환하는 메서드를 public static으로 작성한다.
    (이 메서드의 이름은 보통 getInstance()로 한다.)

 

주로 DAO와 Service를 싱글톤으로 만든다.

 


예제 코드

 

public class MySingleton {

	// 1번
	private static MySingleton single;
	
	// 2번
	private MySingleton() {
		System.out.println("싱글톤 클래스의 생성자입니다");
	}

	// 3번
	public static MySingleton getInstance() {
		// 1번의 변수가 null 이면 새로운 객체를 생성하여 1번 변수에 저장한다.
		if(single == null) single = new MySingleton();

		// 1번 변수를 반환
		return single;
	}
	
	// 기타 이 클래스가 처리할 내용들을 작성하면 된다.
	public void displayTest() {
		System.out.println();
		System.out.println("싱글톤 클래스에서 만든 메서드 호출입니다");
	}
	
	
}
public class SIngletonTest {

	public static void main(String[] args) {
//		MySingleton test = new MySingleton();	// 외부에서 new 명령으로 생성 불가
		
		MySingleton test2 = MySingleton.getInstance();
		MySingleton test3 = MySingleton.getInstance();
		
		System.out.println();
		System.out.println("test2 => " + test2);
		System.out.println("test3 => " + test3);
		
		System.out.println();
		System.out.println("test2 == test3 --> " + (test2==test3));
		System.out.println("test2.equals(test3) --> " + (test2.equals(test3)));
		
		test2.displayTest();
	}
}