__init__(생성자 함수)와 setter 메서드는 겉으로는 비슷하게 보일 수 있지만, 용도와 시점에서 큰 차이가 있다.
__init__ 생성자 함수ClassName(...)) 한 번만 자동으로 호출됨class Person:
def __init__(self, name, age): # 생성자 함수
self.name = name # 객체 생성 시 속성 초기화
self.age = age
# 객체 생성과 동시에 초기화
p = Person("Alice", 30)
print(p.name) # Alice
print(p.age) # 30
__init__을 사용 시, 클래스 설계자가 객체에 반드시 필요한 속성을 강제로 설정하도록 요구 가능__init__이 초기화에 초점이 맞춰져 있다면, setter는 초기화 이후의 속성 변경에 초점이 맞춰져 있음class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def set_name(self, name): # Setter 메서드
self.name = name
def set_age(self, age): # Setter 메서드
self.age = age
# 객체 생성
p = Person("Alice", 30)
# 속성 변경
p.set_name("Bob") # 이름 변경
p.set_age(35) # 나이 변경
print(p.name) # Bob
print(p.age) # 35
__init__과 달리 setter는 객체 생성 후에 개발자가 직접 호출해야 함__init__ vs. Setter: 주요 차이| 구분 | __init__ | Setter |
|---|---|---|
| 호출 시점 | 객체 생성 시 자동 호출 | 객체 생성 후, 필요에 따라 명시적으로 호출 |
| 용도 | 객체의 초기 속성을 설정 | 이미 존재하는 속성값을 변경 또는 설정 |
| 호출 횟수 | 객체 생성 시 한 번 | 필요할 때 여러 번 호출 가능 |
| 필수성 | 객체 설계의 필수적인 속성을 강제 설정 | 선택적으로 호출 가능 |
| 초점 | 초기화 (객체가 생성된 직후 필요한 상태 설정) | 수정/변경 (객체가 생성된 이후 값 변경) |
__init__으로 객체 초기화를 담당하고, setter로 추후 속성 변경을 처리하는 것이 일반적인 패턴임class Car:
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year
def set_year(self, year): # Setter 메서드
self.year = year
# 객체 생성과 초기화
my_car = Car("Tesla", "Model S", 2022)
# 초기값 확인
print(my_car.year) # 2022
# Setter로 속성 변경
my_car.set_year(2023)
print(my_car.year) # 2023
__init__은 객체를 생성하면서 초기화하는 데 사용된다. 객체의 필수 속성을 강제적으로 설정한다.setter 메서드는 객체 생성 후 속성을 변경하거나 재설정할 때 사용된다.