Daily coding

Java Basic : day 12 - Singleton 싱글턴 패턴 본문

Language/Java_basic

Java Basic : day 12 - Singleton 싱글턴 패턴

sunnnkim 2019. 12. 4. 17:00

Singleton 싱글턴 패턴

Design Pattern : 38 가지가 존재
- 목적 : 규정된 코드의 규칙에 따라 프로그램을 짜는 것

 

< 배울 대표적인 디자인 패턴들 >
1. Singleton : 
- 하나의 인스턴스만 생성하여 데이터를 넘겨주는 방식으로 사용
- 클래스끼리의 데이터를 주고 받을 때 코드를 단순하게 만들기 위함
2. Factory :
3. Observer : 해킹하기 좋은 패턴
...
 
 

 

Singleton pattern

 - 단 1개의 instance만을 이용해서 접근하는 패턴
 

 


MyClass와  YouClass의 데이터 교환 방법 1 ( 대화 )

 

MyClass mcls = new MyClass();
YouClass ycls = new YouClass();

 


1. setter와 getter를 통해 데이터 주고받기

int n = mcls.getMyNum();
ycls.setYouNum(n);

ycls.method();

 

 


2. 싱글톤 사용 하기

 

 

1) Sigleton Class

 

public class Singleton {

        

        // 싱글턴 생성자는 단 한개만 만든다( Static )
        private static Singleton single = null;


        // 넘겨줄 값은 public

        // 여기서는 한개의 변수(num)만 교환하기
        public int num;
        
        private Singleton() {
               // 싱글턴 클래스의 생성자
        }

        public static Singleton getInstance() {
                if(single == null) {
                        single = new Singleton();
                }
                return single;
        }
}

 

 

// 데이터를 넘겨줄 클래스 MyClass
public class MyClass {

         private int myNum;
 
         public MyClass() {
                  myNum=123;
                  Singleton single = Singleton.getInstance();
                  single.num = myNum;
         }
}

 

 

// 데이터를 넘겨받을 클래스 YouClass

public class YouClass {

      private int youNum;

      public YouClass() {
       // 생성자

      }


      public void method() {
            Singleton single = Singleton.getInstance();
            youNum = single.num;
            System.out.println("Singleton: youNum = " + youNum);
      }
}

 


Singleton single = Singleton.getInstance();


어디서나 접근할 수 있는 싱글턴 클래스
메인 클래스에서 값을 교환하는 것이 아니고 교환하는 주제가 되는 클래스의
내부에서 교환한다.

 

 

MyClass mycls = new MyClass();

// mycls의 num을 singleton으로 전달

 

YouClass ycls = new YouClass();

// sinigleton의 num을 ycls로 전달 

 


ycls.method();
// 출력 : Singleton: youNum = 123



}
}