Java

[Java]싱글톤 디자인(Single Tone Design)

MoZZANG 2022. 3. 14. 19:54
싱글톤 디자인(Single Tone Design)이란?
  • 클래스를 설계하는 디자인 패턴의 하나로, 하나의 인스턴스 즉, 하나의 메모리를 생성해 이를 공유하고자 할 때 사용하는 패턴이다.
  • 즉 하나의 메모리를 서로 공유해서 사용하므로, 값 변경 시 문제가 발생할 수 있는 경우는 읽기전용으로 하자.
  • 읽기전용이라는 것은 getter만 가지는 것을 예로 들 수 있다.

대표적으로 java.util패키지의 Calendar클래스가 있다.

 

 

싱글톤 디자인의 방법

  1. 생성자의 접근 지정자를 private으로 한다.
  2. 정적 메소드로 해당 클래스의 객체를 반환하도록 정의한다.

 

 

싱글톤을 사용한 것과 하지 않은 것의 차이를 알기위해 우선 싱글톤을 사용하지 않은 경우부터 예제로 보자.

 

 

▲ 위 코드를 출력해보자

 

 

▲ 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