티스토리 뷰

[java 27강] 디자인 패턴(Design Patterns) - 싱글톤 (singleton pattern)



자바에는 많은 디자인 패턴이 있습니다.

디자인 패턴이 무엇인지 모르시는분? 은 아래의 링크로 먼저 가서 선행 부탁드립니다...


http://bvc12.tistory.com/184


오늘은 디자인 패턴에서 가장많이? 쓰이는 싱글톤에 대해서 알아보겠습니다.

싱글톤은 객체를 하나만 만들수 있도록 하는 패턴이라고 보시면 됩니다.

객체를 만들때는 생성을 하여 사용을 하였죠?

근대 생성을 단 한번만 되도록 하는것 입니다.

객체를 하나만 만들어서 쓰일때가 있습니다.

여기저기서 객체를 생성해서 쓰는 구조보다는

하나의 객체를 공유하여 사용할때! 많이 쓰입니다.

이것도 안드로이드를 제작하다보면... 

아! 이럴때 쓰이는구나 하는것이 보입니다.

그럼 우선 문법을 알고 있어야 겠죠?


바로 예제 들어갑니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package test27;
 
public class test27 {
    public static void main(String[] args) {
        Singleton a = Singleton.getSingleton();
        Singleton b = Singleton.getSingleton();
        
        a.setA(10);
        a.printA();
        b.printA();
    }
}
 
class Singleton{
    private static Singleton test;
    private int a = 0;
    
    public static Singleton getSingleton(){
        if(test == null){
            test = new Singleton();
        }
        
        return test;
    }
    
    public void setA(int i) {
        a = i;
    }
    public void printA() {
        System.out.println("변수 i의 값 : "+a);
    }
}
 
cs


결과



풀이


class Singleton{
    private static Singleton test;
    private int a = 0;
    
    public static Singleton getSingleton(){
        if(test == null){
            test = new Singleton();
        }
        
        return test;
    }
    
    public void setA(int i) {
        a = i;
    }
    public void printA() {
        System.out.println("변수 i의 값 : "+a);
    }
}


Singleton 톤이라는 클레스를 만들어 주었습니다.

그다음 private static Singleton test; 라는 객체를 만들어 주었습니다.

static 을 사용한이유는 바로바로 접근이 가능해야 하기때문입니다.

그리고 private int a = 0; 변수를 하나 만들어 주었습니다.

그다음


public static Singleton getSingleton(){
        if(test == null){
            test = new Singleton();
        }
        
        return test;
    }

객체 생성용 메소드를 하나 만들어 주었습니다.

이메소드도 어디서든 접근이 가능하게 static 을 붙여주었습니다.

그리고 return 값은 Singleton 이라고 선언 해주었습니다.

객체 생성용 메소드 안에서 조건문을 넣어 줍니다.


if(test == null){
            test = new Singleton();
        }


Singleton test 가 null 이라면..

객체를 생성해주고...

만약 null 이 아니라면 조건문을 그냥 빠져나오고 Singleton test 을 return 해줍니다.


public void setA(int i) {
        a = i;
    }

위에 만들어 놓은 변수 private int a = 0; 의 값을 넣을수 있는 메소드를 하나 만들어 주었습니다.


public void printA() {
        System.out.println("변수 i의 값 : "+a);
    }

변수의 현재 값을 출력할수 있는 메소드도 하나 만들어 주었습니다.


public class test27 {
    public static void main(String[] args) {
        Singleton a = Singleton.getSingleton();
        Singleton b = Singleton.getSingleton();
        
        a.setA(10);
        a.printA();
        b.printA();
    }
}

그다음 main 으로 오시면...

Singleton a = Singleton.getSingleton(); 라고 작성되어 있습니다.

Singleton a 에 new 를 사용하여 작성하지 않고 클레스 안에 있는 메소드로 값을 넣어준 것을 볼수 있습니다.

이 부분이 싱글톤의 핵심입니다.

그리고 Singleton b = Singleton.getSingleton(); 라고 작성되어 있습니다.

하나의 객체가 생성되는지 확인을 위해 하나더 생성해 보았습니다.

그다음 a.setA(10); 로 변수에 값을 10을 넣어 주었습니다.

그다음 a.printA(); 과  b.printA(); 를 호출하였습니다.

결과는 같은값 10이 출력되는 것을 확인 할수 있습니다.

값을 a에만 넣었는대 b에도 값이 동일 하게 출력되는것....

그럼 결론은 같은 객체를 사용하고 있다는것이고..

싱글톤이 적용되었다고 볼수 있습니다.


위의 예제는 최대한 쉽게 작성하였습니다.

전문적으로 볼때 조금더 소스를 손봐야 하지만...

싱글톤을 쉽게 설명하기 위하여 최대한 쉽게 작성하였습니다.

(예제로는 문제가 없습니다.. ㅎㅎ)


이상으로 싱글톤에 대해서 알아보았습니다.

모두들 수고하세요^^







댓글