파이썬에서 객체 지향 프로그래밍(OOP)을 배울 때 가장 먼저 만나는 개념 중 하나가 __init__ 메서드입니다. 이 특별한 메서드는 생성자(Constructor)라고 불리며, 객체의 초기화를 담당합니다. 이 글에서는 __init__ 메서드의 역할, 사용법, 그리고 흔히 하는 실수에 대해 알아보겠습니다.
__init__이란 무엇인가요?
__init__ 메서드는 클래스의 객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다. 객체의 초기 상태를 설정하거나 필요한 데이터를 전달받아 속성을 정의하는 데 사용됩니다.
__init__ 메서드의 기본 구조
class 클래스명:
def __init__(self, 매개변수):
# 초기화 코드
self.속성 = 값
- self: 생성된 객체 자신을 참조합니다. 반드시 첫 번째 매개변수로 전달되어야 합니다.
- 매개변수: 객체를 초기화할 때 전달받는 값들입니다.
예제: 기본적인 __init__ 사용법
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def introduce(self):
return f"저는 {self.name}이고, {self.breed}입니다."
# 객체 생성
dog1 = Dog("바디", "골든 리트리버")
dog2 = Dog("찰리", "푸들")
print(dog1.introduce()) # 출력: 저는 바디이고, 골든 리트리버입니다.
print(dog2.introduce()) # 출력: 저는 찰리이고, 푸들입니다.
위 코드에서 Dog 클래스의 __init__ 메서드는 name과 breed 속성을 초기화합니다. 객체를 생성할 때 전달한 값에 따라 각 객체의 상태가 설정됩니다.
__init__에서 기본값 사용하기
__init__ 메서드에서 매개변수에 기본값을 지정하면, 객체 생성 시 해당 매개변수를 생략할 수 있습니다.
class Car:
def __init__(self, make, model, year=2020):
self.make = make
self.model = model
self.year = year
car1 = Car("현대", "소나타")
car2 = Car("기아", "K5", 2023)
print(car1.year) # 출력: 2020
print(car2.year) # 출력: 2023
기본값을 사용하면 코드가 더욱 간결해지고 유연성이 높아집니다.
__init__ 메서드의 역할
- 객체 초기화: 객체 생성 후 초기 상태를 설정합니다.
- 데이터 전달: 객체에 필요한 데이터를 생성 시 전달받습니다.
- 일관성 유지: 모든 객체가 동일한 초기화 과정을 거칩니다.
흔히 하는 실수와 주의점
1. self 누락
self를 사용하지 않으면 속성이 객체에 저장되지 않고 지역 변수로 처리됩니다.
class Example:
def __init__(self, value):
value = value # 잘못된 코드
obj = Example(10)
print(obj.value) # AttributeError 발생
올바른 코드:
class Example:
def __init__(self, value):
self.value = value
obj = Example(10)
print(obj.value) # 출력: 10
2. 생성자 역할에 대한 오해
__init__은 객체를 생성하는 메서드가 아니라 초기화하는 메서드입니다. 객체의 생성은 __new__ 메서드가 담당합니다.
상속에서 __init__ 사용하기
상속 관계에서 부모 클래스의 __init__ 메서드를 호출하려면 super()를 사용할 수 있습니다.
class Animal:
def __init__(self, species):
self.species = species
class Dog(Animal):
def __init__(self, name, breed):
super().__init__("Dog")
self.name = name
self.breed = breed
buddy = Dog("버디", "래브라도")
print(buddy.species) # 출력: Dog
super()를 사용하면 부모 클래스의 초기화 로직을 재사용할 수 있어 코드의 중복을 줄일 수 있습니다.
고급 사용법
1. 초기화 로직 분리
__init__ 내부에서 별도의 메서드를 호출하여 초기화 로직을 분리할 수 있습니다.
class Person:
def __init__(self, first_name, last_name):
self.full_name = self._create_full_name(first_name, last_name)
def _create_full_name(self, first, last):
return f"{first} {last}"
person = Person("홍", "길동")
print(person.full_name) # 출력: 홍 길동
'프로그래밍 > python' 카테고리의 다른 글
[파이썬] __init__.py 파일 이해하기: 패키지 초기화의 핵심 (0) | 2024.12.30 |
---|---|
[파이썬] random 모듈 사용 방법 (1) | 2024.12.27 |
[OpenCV] OpenCV를 활용한 퍼스펙티브 변환 (Perspective Transformation) (0) | 2024.09.05 |
[Python] json 파일 읽기 (0) | 2024.06.03 |
[PySide6] styleSheet 사용방법 - QLabel (1) (0) | 2024.06.03 |
댓글