참조블로그 : https://yamalab.tistory.com/74
프로젝트를 하던 도중, 객체가 생성될 때 엄청난 딜레이가 발생하는 것을 발견했다.
__init__ 함수에서 이미지를 불러오는 작업을 하기 때문이었는데, 객체가 생성될 때 마다 이미지를 불러올 필요는 없어서 싱글톤 패턴으로 구현하면 적합하겠다는 생각을 했다.
구조는 아래와 같다.
# single.py
class Single:
_instance = None
@classmethod
def _getInstance(cls):
print("_getInstance call")
return cls._instance
@classmethod
def instance(cls, *args, **kargs):
print("instance call")
cls._instance = cls(*args, **kargs)
cls.instance = cls._getInstance
return cls._instance
def __init__(self):
print("__init__ call")
이제, 호출해보자.
호출하는 방식이 기존 객체 생성 방식과 다르니 유의해야 한다.
# main.py
from single import Single
print("<first call>")
obj = Single.instance()
print("<second call>")
obj2 = Single.instance()
실행결과
<first call>
instance call
__init__ call
<second call>
_getInstance call
결과를 보아하니, 첫 번째 호출에선 instance 메소드와 __init__메소드가 호출되면서 객체가 반환이 되고
두 번째 호출에선 _getInstace 메소드의 호출만으로도 객체가 반환이 되는 것을 확인할 수 있다.
객체를 호출할 때 마다 초기화 되어야 하는 변수가 있다면 _getInstance 메소드에서 처리를 해주고, 객체가 최초에 생성될 때만 초기화가 필요한 변수들은 __init__ 메소드에서만 처리를 해주는 방식으로 활용할 수 있겠다.
'개발 > 파이썬' 카테고리의 다른 글
[파이썬] Counter 모듈에 대해서 (list 요소별 개수 파악하기) (0) | 2021.04.03 |
---|---|
[파이썬] 파일 읽기 쓰기, utf-8로 encoding하기 (0) | 2021.02.06 |
이전 댓글