Python 클래스 생성자 __init__ 와 self 참조 변수 이해

클래스는 객체 지향 프로그래밍에서 객체를 생성하기 위한 템플릿으로 사용됩니다. Python 에서 클래스를 정의할 때는 class 키워드를 사용하며, 클래스 이름은 일반적으로 각 단어의 첫 글자를 대문자로 작성하는 PascalCase 규칙을 따릅니다.

class Developer:
    def __init__(self, nickname, experience_years):
        self.nickname = nickname
        self.experience_years = experience_years

위 코드에서 __init__ 은 특수 메서드로, 생성자 (constructor) 역할을 합니다. 이 메서드는 클래스를 통해 인스턴스 (객체) 가 생성될 때 자동으로 실행되며, 새로 만들어진 객체의 초기 속성 값을 설정하는 데 사용됩니다.

생성자 내부의 self.nickname = nickname 과 같은 문장은 외부에서 전달받은 값을 현재 객체의 속성에 저장합니다. 여기서 self 는 메서드가 호출된 대상인 인스턴스 자체를 참조합니다. 클래스 내부 메서드의 첫 번째 인자는 반드시 self 로 정의되어야 하며, 이는 일반 함수와의 주요한 차이점입니다.

인스턴스를 생성하는 과정은 다음과 같습니다.

dev1 = Developer('Alice', 5)

이 구문은 Developer 클래스의 새로운 객체를 생성하고, __init__ 메서드를 호출하여 속성을 초기화합니다. 'Alice'nickname 에, 5experience_years 에 할당됩니다. 생성된 객체는 변수 dev1 에 저장됩니다. self 인자는 호출 시 자동으로 전달되므로 사용자는 인스턴스 데이터만 명시적으로 전달하면 됩니다.

객체의 속성에 접근하려면 점 (.) 연산자를 사용합니다.

print(dev1.nickname)
print(dev1.experience_years)

클래스 내부에 인스턴스 메서드를 정의하여 객체의 상태를 기반으로 동작하게 할 수 있습니다.

class Developer:
    def __init__(self, nickname, experience_years):
        self.nickname = nickname
        self.experience_years = experience_years
    
    def introduce(self):
        print(f"안녕하세요, {self.nickname} 입니다. 경력은 {self.experience_years} 년입니다.")

클래스 내부에서 속성이나 다른 메서드에 접근할 때는 반드시 self 를 통해 참조해야 합니다. self 는 클래스 외부에서 생성된 구체적인 객체가 내부에서 표현된 형태입니다.

dev1 = Developer('Alice', 5)
dev1.introduce()

dev1.introduce() 를 호출하면 introduce 메서드의 selfdev1 객체를 가리키게 됩니다. 만약 dev2 라는 다른 인스턴스를 생성하여 동일한 메서드를 호출하면, selfdev2 를 참조하여 해당 객체의 고유한 데이터로 동작합니다.

태그: python object-oriented-programming class-constructor instance-variable

9월 23일 00:40에 게시됨