ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python으로 싱글톤 패턴 사용하기
    Computer Science/OS & Algorithm 2018. 5. 24. 02:06

    github 자료와 메모 자료들을 정리하던 도중, CS 관련 지식들을 정리해놓은 자료들을 발견했다.

    아주 기초적이고 쉬운 내용들이지만, 복습 겸 블로그에 다시 정리하고자 한다.


    이번 포스팅에서는 파이썬으로 싱글톤 패턴을 사용하는 매우 간단한 방법에 대해 정리하겠다.







    싱글톤 패턴이란 프로그래밍 디자인 패턴의 하나로, 가장 간단하면서도 유용한 디자인 패턴이다.


    인스턴스를 하나만 생성하여 사용하기 위한 디자인 패턴이 싱글톤 패턴의 정의이다. 실행중인 프로세스(OOP로 구현된)에서 오로지 하나의 인스턴스만을 유지하기 위해 생성자에 접근 제한을 두고, 유일한 단일 객체를 반환하기 위해 정적 메소드를 사용한다. 또한, 유일한 단일객체 역시 정적 참조변수가 필요하다.


    Java, C++과 같은 대표적인 OOP 언어와 마찬가지로 Python에서도 이를 구현하기에는 매우 쉽다.

    물론 더 퍼포먼스가 좋은 방법들도 있겠지만, Class를 이용하여 Python에서 간단하게 구현한 코드는 다음과 같다.


    class GradeMap:
        _instance = None
    
        @classmethod
        def _getInstance(cls):
            return cls._instance
    
        @classmethod
        def instance(cls, *args, **kargs):
            cls._instance = cls(*args, **kargs)
            cls.instance = cls._getInstance
            return cls._instance
    
        def __init__(self):
            self._dict = {}
    
        def setitem(self, key, item):
            self._dict[key] = item

    위 코드는 GradeMap 이라는 Class를 Singleton Pattern으로 디자인된 클래스를 구현한 것이다.

    다른 곳에서 GradeMap이라는 클래스의 인스턴스가 호출된다면, GradeMap을 싱글톤 패턴으로 사용하는 것이 가능하다.

    다른 클래스에서 GradeMap을 member instance로 사용하는 예제코드는 다음과 같다.


    from student.student_utilities.grade_map import GradeMap
    
    class Student:
        def __init__(self, age, name, korean, mathematics, english):
            self._age = age
            self._grade = GradeMap.instance().get_grade(age)
    
        @property
        def age(self):
            return self._age
    
        @property
        def grade(self):
            return self._grade


    Student의 member instance인 grade는 Student Object가 아무리 많이 생성되어도 모든 오브젝트에서 단일 객체로 사용되는 싱글톤 인스턴스가 된다.


    관련된 전체 코드 github 주소

    댓글

분노의 분석실 Y.LAB