[Python] __init__ 과 setter 비교-2025-01-09

정지은·2025년 1월 9일
0

나머지공부

목록 보기
1/17

__init__(생성자 함수)setter 메서드는 겉으로는 비슷하게 보일 수 있지만, 용도와 시점에서 큰 차이가 있다.


1. __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__을 사용 시, 클래스 설계자가 객체에 반드시 필요한 속성을 강제로 설정하도록 요구 가능
  • 1회성 호출: 객체가 생성될 때 딱 한 번만 호출함

2. Setter 메서드

  • 주요 목적: 이미 생성된 객체의 속성을 변경하거나, 특정 값을 설정할 때 사용
  • 명시적 호출: 객체가 생성된 후 개발자가 필요한 시점에 호출함
  • 유연성: __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

결론

  1. __init__객체를 생성하면서 초기화하는 데 사용된다. 객체의 필수 속성을 강제적으로 설정한다.
  2. setter 메서드객체 생성 후 속성을 변경하거나 재설정할 때 사용된다.
  3. 적절히 분리해서 사용하면 코드의 가독성과 유지보수성이 높아진다.

0개의 댓글