"__new__" is Awesome in Python
__new__는 객체 생성의 첫 단계로, 클래스 레벨에서 인스턴스 생성을 제어합니다. 🏗️
__init__은 객체 생성의 두 번째 단계로, 인스턴스 레벨에서 속성을 초기화합니다. 🎨
- 대부분의 경우
__init__만 사용하며, __new__는 고급 사용 사례에서 인스턴스 생성을 세밀하게 제어할 때 필요합니다. ⚙️
__new__는 __init__보다 먼저 호출됩니다. ⏳
- 싱글톤 패턴 구현 시
__new__를 사용하여 인스턴스가 단 하나만 생성되도록 보장할 수 있습니다. 🔑
- 싱글톤 패턴에서 초기화가 여러 번 호출되는 것을 방지하기 위해 초기화 여부를 추적하는 플래그를 사용할 수 있습니다. 🚩
- 불변 타입(immutable types)을 상속할 때
__new__는 필수적입니다. 🛡️
- 팩토리 패턴에서
__new__를 사용하여 다양한 타입의 객체를 반환할 수 있습니다. 🏭
__new__에서 잘못된 타입을 반환하면 예기치 않은 동작이 발생할 수 있으므로 주의해야 합니다. ⚠️
__new__에서 인스턴스를 반환하는 것을 잊으면 __init__에서 오류가 발생할 수 있습니다. ❌
- Enum 클래스에서
__new__는 각 Enum 값의 고유성을 보장하고 사용자 정의 속성을 설정하는 데 필수적입니다. 🧮
__init__은 인스턴스 속성 설정, 가변 타입 작업, 일반적인 클래스 초기화에 사용됩니다. ✅
__new__는 불변 타입 상속, 싱글톤 패턴, 팩토리 메서드, 인스턴스 생성 제어 등에 사용됩니다. 💡