싱글톤 패턴

김의석·2024년 3월 21일
0

개발자필수지식

목록 보기
8/8
post-thumbnail

싱글톤 패턴

하나의 클래스에 하나의 인스턴스만 가지는 패턴

  • 사용사례(I/O바운드, Iput/Output operations)
    프로그램이 대기하고 있는 동안에 CPU가 아무것도 하지 못하는 상황
    • 네트워크로 데이터 전송
    • 데이터베이스에 쿼리를 실행하는 작업
    • 파일을 읽거나 쓰는 파일 시스템

파이썬에서 싱글톤 패턴 구현하기

class Singleton(obejct):
	_instance = None
  
  def __new__(cls, *ars, **kwargs):
  	if not cls._instance:
      	cls._instance = super().__new__(cls, *args, **kargs)
      return cls._instance

s = Singltone()
  • __new__는 클래스에 정의되어 있지 않으면 알아서 object 클래스의 __new__가 호출되어 객체를 생성한다.
  • __new__ 메서드는 object 클래스의 __new__가 아니라 클래스의 정의된 __new__가 호출되는데 이를 오버라이드(override) 표현
  • 참고 파이썬의 최상위 클래스는 object, https://wikidocs.net/69361
  • 재 정의된 __new__ 메서드에서 클래스에 대한 객체를 생성하기 위해 super()로 object 클래스의 new 메서드를 호출했고 인자로 cls를 넘겨주었다. 마지막으로 생성된 객체를 리턴한다.
  • 도식화

상속과 super의 차이

상속(Inheritance):

상속은 한 클래스가 다른 클래스의 특성과 기능을 물려받는 것을 의미한다.
파이썬에서 클래스를 정의할 때, 기존 클래스의 특성을 다른 클래스가 상속받을 수 있는데 이때 상속 받는 클래스를 자식 클래스(subclass)라고 하고, 상속을 제공하는 클래스를 부모 클래스(parent class) 혹은 슈퍼 클래스(superclass)라고 한다.

super():

super()는 파이썬에서 다중 상속을 지원하고, 상속된 클래스의 메서드를 호출하기 위한 내장 함수이다.
주로 자식 클래스에서 부모 클래스의 메서드를 호출할 때 사용됩니다.
예를 들어, 자식 클래스에서 부모 클래스의 __init__메서드를 호출할 때 super().__init__() 형태로 사용한다.

싱글톤 패턴의 장점과 단점

장점

  • 하나의 인스턴스 기반으로 다른 모듈들이 공유하여 사용하기 떄문에
    생성비용이 줄고 인스턴스 생성 비용이 많은 I/O 바운드에 사용

단점

  • 하나의 인스턴스에 수정사항이 생기면 공유 된 인스턴스도 수정해야하기 때문에 의존성이 높아지고 TDD를 할때 불편한 단점이 있다.

단어

  • CPU (Central Processing Unit):
    CPU는 컴퓨터에서 가장 중요한 하드웨어 구성 요소 중 하나로, 컴퓨터의 뇌로서 연산, 제어 및 데이터 처리를 수행합니다.

  • 다중 스레드 (Multi-thread):
    다중 스레드는 하나의 CPU에서 동시에 여러 작업을 수행할 수 있도록 해주는 기술입니다.
    이는 여러 작업이 동시에 실행되는 것처럼 보이게 하며, 여러 스레드가 동시에 CPU 자원을 공유하고 실행할 수 있습니다.

  • 동일한 리소스 (Same Resource):
    여러 스레드나 프로세스가 동시에 접근하고 수정할 수 있는 데이터나 자원을 의미합니다. CPU의 경우, 동일한 리소스는 CPU의 연산 능력 자체를 의미합니다.

profile
널리 이롭게

0개의 댓글

관련 채용 정보