자바 싱글톤 클래스(Singleton class)
안녕하세요 열코입니다.
이번시간에는 자바에서의 싱글톤 클래스에 대해 알아보도록 하겠습니다.
☞ 싱글톤 클래스란
객체지향 프로그래밍에서 싱글톤 클래스는 한번에 하나의 객체(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 모두 하나의 클래스 객체를 가리키고 있는것이죠.
질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!
공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.
[관련 게시글]
2018/10/15 - [Java] - 자바 Wrapper Class
2018/09/29 - [Java] - 자바 가비지 컬렉션(Java Garbage Collection)
'Java' 카테고리의 다른 글
java spring pwa fcm web push 구현 (2) | 2019.09.10 |
---|---|
Object 클래스에 대해 (0) | 2018.11.04 |
자바 표준 입력 클래스 Scanner 사용법 (1) | 2018.11.04 |
자바 상속 (0) | 2018.10.17 |
자바 Wrapper Class (0) | 2018.10.15 |
자바 파일 입출력 (0) | 2018.10.04 |
자바 가비지 컬렉션(Java Garbage Collection) (0) | 2018.09.29 |
자바 벡터(Vector)와 어레이리스트(ArrayList) 비교 (5) | 2018.09.23 |