Singleton
Class가 있고 이 Class의 Instance가 생성될 때 Instance가 단 하나만 생성되게 하는 방법입니다.
- 일반적으로는 Class의 Instance는 여러 개가 생성될 수 있습니다.
- 하지만, 때로는 클래스 내부 값이 여러 컨텍스트에서 값을 잃지 말고 지속적으로 유지해야할 때가 있기 때문에 Singleton은 필요한 기법입니다.
- 데이터베이스를 사용하는 등의 동작을 예로 들 수 있습니다.
예를 들어 보도록 하겠습니다.
- Code는 Python 2.7 기준입니다.
1 ~ 10 Singleton Class
- Singleton Class를 만드는 방법에는 여러가지 방법이 있는데 그 중 Metaclass를 이용하는 방법입니다.
- Metaclass는 Instance를 Class로 가지는 Class를 말하는데 자세한 내용은 다음에 포스팅 할 수 있도록 하겠습니다.
- Singleton Class가 호출되었을 때 Instance가 한 곳을 바라보게 만듭니다.
8. 현재 생성된 Instance가 _instance 리스트에 속하는지 확인합니다. 이전에 생성된 적이 없었다면 속하지 않을 것입니다.
9. 현재 생성된 Instance의 Class (super : 상위 클래스) 생성자를 호출해 _instance 리스트에 추가합니다.
10. 이를 리턴
- 즉, Instance들이 생성되면 _instance 내의 cls(Instance)를 바라보게 만들어 하나의 인스턴스만 생성되게 하는 방식입니다.
12 ~ 17. Database Class
- Database Class를 만들고 Singleton Instance를 Metaclass로 가져가면서 Singleton Class가 되었습니다.
- 초기화와 함께 value 변수를 갖게되고 이 변수를 0으로 초기화합니다.
20, 21. 두 개의 Database 인스턴스를 생성합니다.
23~26. 이 둘을 비교하고 같으면 "Same", 다르면 "Different"를 출력합니다.
28. instance1의 value를 1로 세팅하고
29. instance1과 instance2의 value를 출력해 두 instance가 하나인지 확인해봅니다.
결과는
Instance는 2개 선언되었지만 같은 값을 참조하는 것을 알 수 있습니다.