티스토리 뷰
[AI 서비스 개발] 싱글톤 패턴, 클래스, 인스턴스, __new__, __init__, cls, self
brave_sol 2025. 2. 10. 22:551. 싱글톤 패턴이란?
- 클래스의 인스턴스를 단 하나만 생성하여 전역적으로 공유하는 디자인 패턴
- 동일한 객체를 여러 곳에서 공유할 수 있어, 메모리 낭비를 줄이고 일관성을 유지할 수 있다
- 한 번 만들어진 객체의 메모리 주소를 공유
2. 싱글톤 패턴이 필요한 경우
1) 데이터베이스 연결
- DB 커넥션은 여러 개 만들 필요 없이 하나만 유지해야 함
2) 웹크롤러 인스턴스
- Selenium 같은 크롤러를 사용할 때, 여러 개 만들지 않고 하나의 브라우저 인스턴스를 공유
3) 설정(Configuration) 객체
- 애플리케이션의 환경 설정을 하나의 객체로 관리하여 모든 모듈에서 동일한 설정을 사용
4) 로그 시스템
- 모든 모듈이 동일한 로그 시스템을 공유
3. 일반 클래스와 싱글톤 패턴 비교
class Normal:
def __init__(self):
print("새로운 인스턴스가 생성됨!")
a = Normal() # 새로운 인스턴스가 생성됨!
b = Normal() # 새로운 인스턴스가 생성됨!
print(a is b) # False (각기 다른 객체)
print(a) # <__main__.Normal object at 0x000001E55061DC40>
print(b) # <__main__.Normal object at 0x000001E55061DC40>
class Singleton:
_instance = None # 1) 클래스 변수로 인스턴스를 저장
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls) # 2) __new__를 오버라이딩하여 기존 객체 반환
print("새로운 인스턴스가 생성됨!")
return cls._instance # 3) 기존 객체를 반환
# 테스트
c = Singleton() # 새로운 인스턴스가 생성됨!
d = Singleton() # 출력값 없음
print(c is d) # True (두 변수가 같은 객체를 가리킴)
print(c) # <__main__.Singleton object at 0x000001E55061CB90>
print(d) # <__main__.Singleton object at 0x000001E55061CB90>
4. 객체 생성 과정 비교
1) __new__() : 객체를 생성(인스턴스가 생성되기 전에 실행되는 메서드)
2) __init__() : 생성된 객체를 초기화(설정)
3) cls: 클래스 자체를 가리킴
* 클래스 레벨에서 동작한다 : 객체(인스턴스)가 만들어지기 전, 클래스 자체에서 실행된다
4) self는 인스턴스가 존재해야 접근 가능
* 인스턴스 레벨에서 동작한다 : 인스턴스를 만들고 나서 실행되는 코드. 인스턴스가 있어야 호출할 수 있음
5) python에서 모든 클래스는 기본적으로 object를 상속받는다
- super().__new__(cls)를 호출하면 부모 클래스의 object. __new__가 실행됨
- super() : 현재 클래스의 부모를 의미
class Test1:
def __new__(cls):
print("새로운 객체를 만들지 않음!")
c = Test1() # 새로운 객체를 만들지 않음!
print(c) # None
class Test2:
def __new__(cls):
print("__new__ 실행됨!")
instance = super().__new__(cls) # 실제 객체 생성
return instance # 생성된 객체 반환
def __init__(self):
print("__init__ 실행됨!") # 객체가 생성된 후 실행됨
a = Test2()
# __new__ 실행됨!
# __init__ 실행됨!
print(a) # <__main__.Test2 object at 0x000001E55061ED80>
b = Test2()
# __new__ 실행됨!
# __init__ 실행됨!
print(b) # <__main__.Test2 object at 0x000001E55060B0E0>
# 매번 객체를 생성하기 때문에 다른 주소를 가리킴
'AI > AI 서비스 개발' 카테고리의 다른 글
[AI 서비스 개발] Cookie (1) | 2025.02.06 |
---|---|
[AI 서비스 개발] 비동기, 멀티스레딩, 멀티프로세싱, MSA (0) | 2025.02.05 |
[AI 서비스 개발] 도메인, 서브 도메인, CORS, HTTPS (0) | 2025.02.04 |
[AI 서비스 개발] AWS에 DB 생성하기 - Docker volumes, AWS RDS (0) | 2025.02.03 |
[AI 서비스 개발] crewai tool - SerperDevTool() (0) | 2025.02.02 |
- Total
- Today
- Yesterday
- 오픽
- 프로그래머스
- 아침
- 경제
- 운동
- C언어
- 루틴
- 영어회화
- 아침운동
- 습관
- 줄넘기
- 미라클모닝
- 실기
- 갓생
- llm
- Python
- 30분
- 티스토리챌린지
- 기초
- 다이어트
- SQL
- Ai
- 뉴스
- IH
- opic
- 빅데이터 분석기사
- 고득점 Kit
- 오블완
- ChatGPT
- 스크랩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |