본문 바로가기
개발/파이썬

[파이썬] 싱글톤 객체 만들기

by hamcheeseburger 2021. 1. 17.

참조블로그 : 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__ 메소드에서만 처리를 해주는 방식으로 활용할 수 있겠다.

 

이전 댓글