__new__와 __init__의 차이

2025. 3. 5. 22:41· Python
목차
  1. 둘 다 Python에서 객체를 생성할 때 호출되는 특별한 메서드입니다.
  2. __new__
  3. __new__를 사용하는 이유
728x90

둘 다 Python에서 객체를 생성할 때 호출되는 특별한 메서드입니다.

__new__

new는 새로운 객체를 생성하는 메서드
클래스의 인스턴스가 생성되기 전 호출, 새로운 객체를 반환
보통 immutable 객체에서 객체 생성 방식을 제어할 때 사용 됩니다.

class MyClass:
	def __new__(cls, *args, **kwargs):
    	print('New 객체 생성')
        instance = super().__new__(cls)
        return instance
    
    def __init__(self, value):
    	print('Init 호출')
        self.value = value
 
 ojb = MyClass(1)
 
# New 객체 생성
# Init 호출

 

__new__는 객체가 메모리에 할당되는 시점에 호출됩니다. 그 후, __init__에서 초기화가 이루어집니다

 

__new__를 사용하는 이유

  • 불변 객체: 불변 객체(예: int, str, tuple)는 새로운 객체를 생성할 때 __new__를 사용하여 객체 생성을 제어할 수 있습니다. 예를 들어, 이미 존재하는 객체를 반환하거나, 같은 값의 객체가 여러 개 만들어지지 않도록 캐싱하는 방식입니다.
  • 싱글톤 패턴: __new__를 사용하여 클래스의 인스턴스가 하나만 존재하도록 만들 수 있습니다.

예시 - 싱글톤 패턴:

class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

    def __init__(self, value):
        self.value = value

obj1 = Singleton(10)
obj2 = Singleton(20)

print(obj1 is obj2)  # True (같은 객체)
 

위와 같은 패턴으로 할 시 value는 덮어씌어짐

obj1 = Singleton(10)  # 새로운 객체 생성, value는 10
obj2 = Singleton(20)  # 이미 존재하는 객체 반환, value는 20으로 덮어씌워짐
print(obj1 is obj2)  # True (같은 객체)
print(obj1.value)  # 20
print(obj2.value)  # 20
저작자표시 비영리 (새창열림)

'Python' 카테고리의 다른 글

Python의 메모리 관리 방식(Garbage Collection 포함)  (0) 2025.03.10
Python의 다중 상속과 MRO(Method Resolution Order)의 동작 방식  (0) 2025.03.05
Python/Django 기술면접 질문  (0) 2025.03.05
스트라이드와 슬라이스를 한 식에 함께 사용하지 말라  (0) 2025.02.06
:= 바다코끼리 연산자  (0) 2025.02.06
  1. 둘 다 Python에서 객체를 생성할 때 호출되는 특별한 메서드입니다.
  2. __new__
  3. __new__를 사용하는 이유
'Python' 카테고리의 다른 글
  • Python의 메모리 관리 방식(Garbage Collection 포함)
  • Python의 다중 상속과 MRO(Method Resolution Order)의 동작 방식
  • Python/Django 기술면접 질문
  • 스트라이드와 슬라이스를 한 식에 함께 사용하지 말라
두잇 두두
두잇 두두
읽기 쉬운 코드를 짜기 위해 노력합니다. 좋은 코드는 단순하고 이해하기 쉬워야 한다고 생각합니다.
두두 DB읽기 쉬운 코드를 짜기 위해 노력합니다. 좋은 코드는 단순하고 이해하기 쉬워야 한다고 생각합니다.
두잇 두두
두두 DB
두잇 두두
전체
오늘
어제
  • 분류 전체보기 (135)
    • CS지식 (7)
    • 시스템 설계 (5)
    • 자료구조&알고리즘 (36)
      • 자료구조 (1)
      • 백준 (13)
      • 프로그래머스 (15)
      • 인프런 (2)
    • Python (9)
      • Docs (3)
      • 실험실 (2)
    • Django (36)
      • orm (10)
      • view (3)
      • model (3)
      • admin (3)
      • restframework (13)
      • error (1)
      • utils (2)
    • Java (2)
      • JPA (3)
    • AI (1)
      • AI가 쓴 글 (1)
    • Git (4)
    • Linux (1)
    • 개발자로써 (8)
      • 회고 (1)
    • 문화생활 (0)
      • 여행 (0)
    • 도서📚 (0)
      • 일반 도서 (0)
      • 개발 도서 (0)
    • 프론트 (1)
      • snippet (1)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
두잇 두두
__new__와 __init__의 차이
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.