CodeGym /자바 코스 /Python SELF KO /객체 초기화

객체 초기화

Python SELF KO
레벨 15 , 레슨 4
사용 가능

4.1 초기화

보통 객체는 생성 직후 바로 사용할 준비가 안 되어 있어. 먼저 필요한 데이터를 전달해야 해: 작업 파라미터, 초기값, 다른 객체에 대한 참조 등등.

이 과정을 초기화라고 하고, 객체가 생성된 직후에 바로 진행해야 해.

예를 들어, (Cat)이라는 클래스가 있고, 이름과 나이를 설정하고 싶다고 하자. 이 작업은 다양한 방식으로 할 수 있어:

객체 생성 후 속성 초기화

아래 예제에서는 다음과 같은 과정을 보여줘:

  • 빈 객체 Cat 생성.
  • barsik라는 이름의 Cat 클래스 인스턴스 생성.
  • 그 후 barsik 객체에 두 개의 속성 nameage를 직접 추가.


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

클래스 필드를 사용

이 예제에서는 nameage 속성이 클래스 수준에서 정의돼 있어. 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)  # 출력: 나이는 음수가 될 수 없습니다
               
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION