안녕하세요 열코입니다.

이번시간에는 자바에서의 싱글톤 클래스에 대해 알아보도록 하겠습니다.


☞ 싱글톤 클래스란

객체지향 프로그래밍에서 싱글톤 클래스는 한번에 하나의 객체(Instance)만 가질 수 있는 클래스입니다.

싱글톤 클래스의 객체를 만들때 변수는 첫번째 객체를 가리킵니다.

따라서 어떤 객체를 통해 클래스 내부 변수를 수정하면 생성된 단일 객체의 변수에 영향을 미칩니다.



싱글톤 클래스를 만드는 방법

1. 생성자를 private으로 만듭니다.

2. 싱글톤 클래스를 반환 유형으로 한 정적 메소드를 작성합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MySingletonClass {
    private static MySingletonClass single_instance = null;
    
    private MySingletonClass() {
        
    }
    
    public static MySingletonClass getInstance() {
        if(single_instance == null) {
            single_instance = new MySingletonClass();
        }
        
        return single_instance;
    }
}
cs



일반 클래스 vs 싱글톤 클래스

일반 클래스의 경우 클래스를 정의할때 생성자를 사용하는 반면, 싱글톤 클래스의 경우 getInstance() 메소드를 사용합니다.



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
34
35
public class Main {
    public static void main(String[] args) 
    {
        MySingletonClass singleton1 = MySingletonClass.getInstance();
        MySingletonClass singleton2 = MySingletonClass.getInstance();
        MySingletonClass singleton3 = MySingletonClass.getInstance();
        
        System.out.println(singleton1.s);
        System.out.println(singleton2.s);
        System.out.println(singleton3.s);
        
        singleton1.s = "Change String";
        
        System.out.println(singleton1.s);
        System.out.println(singleton2.s);
        System.out.println(singleton3.s);
    }
}
class MySingletonClass {
    private static MySingletonClass single_instance = null;
    
    public String s;
    
    private MySingletonClass() {
        s = "MySingletonClass";
    }
    
    public static MySingletonClass getInstance() {
        if(single_instance == null) {
            single_instance = new MySingletonClass();
        }
        
        return single_instance;
    }
}
cs


4번째 줄에 MySingletonClass라는 제가 정의한 싱글톤 클래스의 객체(인스턴스)를 3개 만드는 것을 볼 수 있습니다.

일반 클래스의 경우 class a = new class(); 이런식으로 객체를 생성하는것과 달리

싱글톤 클래스의 경우 getInstance() 메소드를 호출하여 객체를 생성하는 모습입니다.


8,9,10번 줄의 결과는 어떻게될까요?

아시다시피 s는 "MySingletonClass"라는 문자열입니다. 이 문자열이 3번 출력됩니다.


12번째 줄에서 첫번째 싱글톤 객체의 s를 "Change String"으로 변경했습니다.


그 다음에 출력을 해보면 어떤 결과가 나올까요?

첫번째 싱글톤 객체의 s만 바꿨기 때문에

ChangeString

MySingletonClass
MySingletonClass

가 나올것 같지만 아닙니다!!


싱글톤 클래스는 위에서 말씀드렸다시피 여러 객체를 생성해도 하나의 객체만 가리키고 있기 때문에

MySingletonClass

MySingletonClass
MySingletonClass

의 출력 결과를 가집니다.


singleton1, singleton2, singleton3 모두 하나의 클래스 객체를 가리키고 있는것이죠.



질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.




to Top