싱글톤 디자인(Single Tone Design)이란?
- 클래스를 설계하는 디자인 패턴의 하나로, 하나의 인스턴스 즉, 하나의 메모리를 생성해 이를 공유하고자 할 때 사용하는 패턴이다.
- 즉 하나의 메모리를 서로 공유해서 사용하므로, 값 변경 시 문제가 발생할 수 있는 경우는 읽기전용으로 하자.
- 읽기전용이라는 것은 getter만 가지는 것을 예로 들 수 있다.
대표적으로 java.util패키지의 Calendar클래스가 있다.
싱글톤 디자인의 방법
- 생성자의 접근 지정자를 private으로 한다.
- 정적 메소드로 해당 클래스의 객체를 반환하도록 정의한다.
싱글톤을 사용한 것과 하지 않은 것의 차이를 알기위해 우선 싱글톤을 사용하지 않은 경우부터 예제로 보자.
▲ 위 코드를 출력해보자
▲ NoSingleTone 타입으로 no1과 no2를 생성하고 동시에 사용을 위해 인스턴스화도 하자.
이후 각각의 변수에 100과 200을 넣어주고 출력해보자.
▲ no1과 no2 모두 new생성자를 이용하였기 때문에 각각 다른 메모리를 가지며 따라서 값이 각각 다르게 나온다.
또한 각각 다른 메모리를 참조하므로 주소도 다른 것을 볼 수 있다.
그렇다면 싱글톤을 쓴다면 어떻게 달라질까?
▲ 싱글톤으로 만들 때 2가지의 디자인 방법을 상기하며 만들어보자.
1. 생성자의 접근지정자를 private으로 한다.
2. 정적메소드로 해당 클래스의 객체를 반환하도록 한다.
결과를 출력해보자.
▲ static이므로 클래스명. 으로 접근하며 st1.shareVar에서 100을 대입해주었다. 당연히 100이 출력될 것이다. st2에 new생성자를 사용하지 못하므로 static접근방식으로 하면 결국 새로운 메모리를 만들지 않으므로 st1과 st2는 같은 메모리를 참조하게 될 것이다.
즉, st1에서 100을 넣었던 메모리에 100을 지우고 200을 다시 넣은 것이다.
따라서 결과값 마지막줄을 보면 주소도 동일하고 값도 동일하게 나오는 것을 볼 수 있다. 같은 메모리를 참조하고 있기 때문이다. 아래처럼 말이다.
이처럼 메모리를 새로 생성하지 않고 하나의 메모리를 계속해서 공유하면서 참조할 때 사용하는 방법이 바로
싱글톤 디자인이다.
'Java' 카테고리의 다른 글
[Java]상속(Inheritance) (0) | 2022.03.14 |
---|---|
[Java]String Constructor (0) | 2022.03.14 |
[Java]this() - 자기 자신의 기본생성자 (0) | 2022.03.14 |
[Java]생성자(Constructor) (0) | 2022.03.11 |
[Java]Over loading(중복 정의) (0) | 2022.03.11 |