2020.11.16 고급자바 수업노트 singleton 패턴 싱글톤 패턴

 package kr.or.ddit.singleton;


public class MySingleton {


/*

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

-singleton 클래스를 만드는 방법 ( 필수 구성 요소 ) 3가지 규칙 필수구성 + ~ 추가  

  

  1. 자신 class 의 참조값이 저장될 변수를 private static 으로 선언한다. 

  2. 생성자의 접근제한자를 private 으로 한다. ( 외부에서 사용하지 못하게 한다. )  

  3. 자신 class 의 인스턴스를 생성하고 , 생성된 인스턴스의 참조값을 반환하는 메서드를 public static 으로 작성한다. 

  (이 메서드의 이름은 보통 getInstance 로 한다. )  

//싱글톤 사용하는 이유 : 주로 메소드만 있는 경우 or 어떤 데이터를 항상 하나만 객체를 생성해서 그곳에서만 데이터가 변화되도록 하고 싶을때  



*/

//1번 

private static MySingleton single; //참조값이 저장될 변수 

//2번 

private MySingleton() {

System.out.println("생성자 입니다.");

}

//3번

public static MySingleton getInstance() {

if(single == null) single = new MySingleton(); 

return single; 

}

//static 안에서는 static 변수만 있어야 한다. 

//생성자는 private 이라서 접근이 외부에서는 안되고 

//static 인 이유는 : getInstance() 는 static 이어서 이것을 불러온다 ( 외부에서 ) 

// 3번까지가 필수 아래는 선택 ----------------------------------------------------

//기타 이 클래스가 처리할 내용을 작성한다. 

public void displayTest() {

System.out.println("이 메서드는 싱글톤 클래스의 메서드 처리 내용입니다. ");

}


}



-----------------------------------------------------------------------------------------------------

test


package kr.or.ddit.singleton;

public class SingletonTest {

public static void main(String[] args) {
//생성자가 private 이면 바깥에서는 new 로 생성을 못한다. 
//MySingleton test1 = new MySingleton(); 
//외부에서 NEW 명령으로 생성 불가 
MySingleton test2 = MySingleton.getInstance(); 
MySingleton test3 = MySingleton.getInstance(); 
//test2 에 저장된 참조값과 test3 에 저장된 참조값이 같다(getInstance() 로 불러온것 ) . 원래는 생성자를 호출하면 두개의 참조값이 달라야하는데 
System.out.println("test2 = " + test2.toString());
System.out.println("test3 = " + test3.toString());
//print 되는 내용이 생성자입니다. 라고 출력이 되는데 
//이거는 1번만 객체생성이 됬다는 뜻
System.out.println(test2 == test3 );
System.out.println(test2.equals(test3));
test2.displayTest();

}

}

댓글