반응형

먼저 간략하게 Singleton 패턴이 무엇인지 알아보고 진행하겠습니다.

 

Singleton 패턴 이란?

Singleton 패턴은 전체 프로그램 스콥에서, 특정 클래스를 사용할 때, 단 하나의 인스턴스만 생성해서 사용하는 패턴입니다. 하나의 인스턴스를 사용하게 되면 다음과 같은 장점이 있습니다.

 

- 공유 자원에 대해서 동시 접근을 제한할 수 있습니다.

- 전역에서 사용가능한 리소스를 생성할 수 있습니다.

- 프로그램 스콥에서 단 하나의 인스턴스만 생성해서 사용하기 때문에 메모리 낭비를 막을 수 있습니다.

 

모듈 레벨의 Singleton

python에서는 기본적으로 모든 module 은 singleton 으로 정의되어 있습니다. 다음의 예시는 하나의 프로그램 내에서 실행하거나 혹은 동일 shell에서 실행해야 확인이 가능합니다.

 

## singleton.py

# shared_variable에 초기값 지정
shared_variable = "init value"

 

## module1.py

import singleton

# 원래 shared_variable에 있는 내용을 확인
print(singleton.shared_variable)

# shared_variable에 내용을 추가
singleton.shared_variable += ", some text"

 

## module2.py

import singleton

# shared_variable에 있는 내용을 확인
print(singleton.shared_variable)

 

실행결과

 

 

클래스 레벨의 Singleton

이번에는 클래스를 정의해서 singleton 패턴을 구현해 보도록 하겠습니다. 

 

python에서는 클래스의 생성자에서 특정 attribute을 정의해서 항상 같은 값을 바라보는 결과를 리턴하게 처리하면 됩니다.

class SingletonClass():
    def __new__(cls):
        if not hasattr(cls, "instance"):
            cls.instance = super().__new__(cls)
        return cls.instance

 

 

python shell에서 다음과 같이 실행해 보면, SingletonClass로 생성한 instance의 결과가 같다는 것을 알 수 있습니다.

 

 

 

 

반응형

'프로그래밍 > Python' 카테고리의 다른 글

decorator 사용하기  (0) 2024.06.06
9. 파일 관리  (0) 2019.02.21
8. 파일 읽고 쓰기  (0) 2019.02.21
7. 정규 표현식  (0) 2019.01.09
6. 문자열 다루기  (0) 2019.01.08

+ Recent posts