본문 바로가기
언어/Python

[Python 기본 공부정리] 8-2. 클래스 - 생성자(constructor)

by 민-Zero 2019. 12. 30.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다.

틀린 부분에 대한 지적은 감사합니다.

1. 생성자(constructor) 란?

생성자는 객체가 생성될때 해당 객체의 멤버 변수등 초기화가 필요한 데이터를 객체가 생성될때 초기화 해주는 역할을 수행한다.

예를 들어 위와 같은 클래스가 존재한다고 하자. 클래스 멤버 변수 num에 대한 값이 설정되어 있지 않기 때문에 print_num함수를 객체 생성후 바로 호출한다면 

아무런 값도 들어있지 않은 멤버 변수를 호출하므로 에러를 발생시킨다. 따라서 해당 객체를 생성후 매번 set_num 이라는 함수를 통해 멤버 변수 num을 초기화 해줘야 한다. 이처럼 일일이 멤버 변수를 설정하는 함수를 호출하는것은 에러를 발생시킬 가능성이 있으므로 생성자를 통해 객체를 생성하면서 자동으로 초기화 하는것이 안전하다.

 

2. 생성자 사용

생성자를 생성하는 방법은 간단하다. 멤버함수의 이름을 __init__ 으로 하면 해당 멤버 함수는 생성자의 역할을 하도록 약속 되어있다.

문법)

def __init__(self, 매개변수1, 매개변수2, ..):

    self.멤버변수 = 매개변수1

    ...

(_)를 2개 사용하여 init 앞뒤로 붙여주며 일반적인 기능동작이 아닌 초기화를 목적으로 하는 객체생성과 동시에 호출되는 함수라고 생각하면 된다.

꼭 매개변수와 멤버 변수의 이름이 같을 필요는 없다. 두 변수가 다른변수 임을 보여주기위해 일부러 같은 변수명을 사용했다.

위 클래스는 생성자가 존재하며 인수는 1개만 받아 들인다. self는 자기자신을 나타내는 다른 매개변수라 객체 생성시 값을 넘겨줄 필요가 없음을 앞에서 정리 하였다.

따라서 객체 생성시 Test(10)처럼 생성자의 매개변수에 값을 넘겨주어 멤버 변수의 값을 초기화 시켜야 한다.

생성자는 print_num함수가 호출되기도 전인 객체 생성 과정에서 바로 호출되는 것을 확인 할 수 있다.

즉, 객체 생성 → 생성자 호출 → 멤버 변수 초기화 → 객체를 통한 기능 수행 의 순서로 클래스가 동작하는 것을 알 수 있다.

댓글