[python] 파이썬 생성자

생성자란?

일반적으로 함수는 사용자가 함수이름( )과 같은 형태로 호출해야 코드가 수행됩니다. 이와 달리 클래스 내에서 특별한 이름(init)을 갖기만 하면 객체가 생성될 때 자동으로 호출되는 함수가 있는 이를 생성자라고 합니다.

class Person:
    def __init__(self):
        print("태어남..")

p = Person()

위 코드를 수행하면 문자열이 출력되는데 이는 객체가 생성될 때 자동으로 생성자인 init( )이 호출됐기 때문입니다. 이처럼 생성자는 객체가 생성될 때 자동으로 호출되기 때문에 객체를 초기화하거나 초깃값을 설정하는데 유용하게 사용됩니다.

생성자의 위치

데이터는 객체 (instance variable) 또는 클래스 (class variable)에 저장된다고 배웠습니다. 아래 코드를 수행하면 생성자는 어디에 위치하게 될까요? 앞의 예와 같이 메모리 상태를 생각해보세요.

class Person:
    def __init__(self):
        print("태어남..")

p = Person()

클래스 내에 정의된 메서드는 클래스 공간에 저장됩니다. 따라서 모든 객체에 의해 참조(사용 또는 호출) 될 수 있는 겁니다

인스턴스 개수 세기

이번에는 클래스로부터 생성된 인스턴스의 개수를 세어보겠습니다. 생성된 인스턴스의 개수는 각 인스턴스가 갖고 있기 보다는 모든 인스턴스가 참조할 수 있는 공간인 클래스에 저장되는 것이 좋습니다. 클래스 객체에 저장되는 변수를 클래스 변수 (class variable) 이라고 했지요? 객체가 생성될 때 자동으로 호출되는 생성자에서 클래스 변수에 저장된 변수 값을 1 증가시켜주면 생성된 객체의 개수를 셀 수 있습니다.

class MyClass:
    count = 0

    def __init__(self):
        MyClass.count += 1

    def get_count(self):
        return MyClass.count

MyClass 타입의 객체를 3개 생성한 후 get_count 메서드를 호출해봅시다.

a = MyClass()
b = MyClass()
c = MyClass()

print(a.get_count())

또는 다음과 같이 MyClass.count라는 표현을 통해서도 클래스 변수에 접근할 수 있습니다.

print(MyClass.count)

두 값 모두 3이 출력되는 것을 확인할 수 있습니다.

좋은 웹페이지 즐겨찾기