4.1 초기화
보통 객체는 생성 직후 바로 사용할 준비가 안 되어 있어. 먼저 필요한 데이터를 전달해야 해: 작업 파라미터, 초기값, 다른 객체에 대한 참조 등등.
이 과정을 초기화라고 하고, 객체가 생성된 직후에 바로 진행해야 해.
예를 들어, (Cat)
이라는 클래스가 있고, 이름과 나이를 설정하고 싶다고 하자. 이 작업은 다양한 방식으로 할 수 있어:
객체 생성 후 속성 초기화
아래 예제에서는 다음과 같은 과정을 보여줘:
- 빈 객체
Cat
생성. barsik
라는 이름의Cat
클래스 인스턴스 생성.- 그 후
barsik
객체에 두 개의 속성name
과age
를 직접 추가.
class Cat:
pass
# Cat 객체 생성
barsik = Cat()
# 객체 생성 후 속성 초기화
barsik.name = "Barsik"
barsik.age = 5
print(f"고양이 이름: {barsik.name}, 나이: {barsik.age}") # 출력: 고양이 이름: Barsik, 나이: 5
속성 초기화를 위한 메서드 사용
이 예제에서는 속성 초기화를 위해 initialize
메서드를 사용해. Cat
객체는 아무 속성 없이 생성되고, 이후 initialize()
메서드를 사용해 속성 값이 설정돼.
class Cat:
def initialize(self, name, age):
self.name = name
self.age = age
# Cat 객체 생성
barsik = Cat()
# 메서드를 통한 속성 초기화
barsik.initialize("Barsik", 5)
print(f"고양이 이름: {barsik.name}, 나이: {barsik.age}") # 출력: 고양이 이름: Barsik, 나이: 5
클래스 필드를 사용
이 예제에서는 name
과 age
속성이 클래스 수준에서 정의돼 있어. barsik
객체가 생성된 후 속성이 바로 초기화돼.
class Cat:
name = ""
age = 0
# Cat 객체 생성
barsik = Cat()
# 객체 속성 초기화
barsik.name = "Barsik"
barsik.age = 5
print(f"고양이 이름: {barsik.name}, 나이: {barsik.age}") # 출력: 고양이 이름: Barsik, 나이: 5
어떤 방식이 더 나을까? 아무것도 없어! 제일 좋은 건 생성자를 이용하는 거야 :)
4.2 생성자
생성자는 자동으로
클래스의 새 객체를 생성할 때 호출되는 특별한 메서드야. 생성자는 객체의 필드를 초기화하고 추가로 필요한 초기 작업을 수행할 수 있어.
Python에서는 __init__
라는 이름의 메서드가 생성자야. 주요 특징은:
-
__init__
메서드가 Python에서 생성자야. 자동으로 호출되며, 클래스 인스턴스가 생성될 때 실행되지. -
__init__
는 최소한self
라는 하나의 매개변수를 받아.self
는 생성된 객체를 참조해. 추가적으로 다른 매개변수를 받아서 객체의 속성을 초기화할 수 있어. -
__init__
메서드 내부에서self
를 사용해 객체 속성의 초기 값을 설정할 수 있어. - 생성자는 다른 객체와의 연관 설정이나 입력 데이터 검증 같은 추가 작업도 수행 가능해.
생성자에 매개변수를 전달하는 작업은 자동으로 처리돼. 객체 생성 시 괄호 안에 매개변수만 적어주면 돼.
아래는 생성자를 사용하여 우리의 고양이를 초기화하는 방식이야:
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age
# 이름과 나이를 가진 Cat 객체 생성
barsik = Cat("Barsik", 5)
print(f"고양이 이름: {barsik.name}, 나이: {barsik.age}") # 출력: 고양이 이름: Barsik, 나이: 5
Cat
타입의 객체가 생성된 후, __init__
메서드가 자동으로 호출되고, 세 개의 매개변수가 전달돼:
self
매개변수로 barsik 객체 참조name
매개변수로 문자열 "Barsik"age
매개변수로 숫자 5
편리하고 깔끔하지.
데이터 유효성 검사
생성자 내부에서 데이터 유효성 검사를 수행할 수도 있어. 생성자의 목적은 작업 가능한 유효한 객체를 생성하는 것이거든. 예를 들어:
class Cat:
def __init__(self, name, age):
if age < 0:
raise ValueError("나이는 음수가 될 수 없습니다")
self.name = name
self.age = age
# 나이 값을 검사하는 Cat 객체 생성
try:
barsik = Cat("Barsik", -3)
except ValueError as e:
print(e) # 출력: 나이는 음수가 될 수 없습니다
GO TO FULL VERSION