본문 바로가기
파이썬

파이썬 init 생성자 공부하기!

by 여름코딩 2023. 2. 12.
반응형

안녕하세요 판타지코딩입니다!

 

파이썬에는 '클래스'라는 개념이 있습니다. 클래스 내에는 여러 가지 함수를 정의하고, 객체를 생성해서 함수를 호출합니다. 그런데 클래스에는 '__init__'이라는 함수가 있습니다. 이 함수를 바로 '생성자'라고 합니다.

 

오늘은 생성자가 무엇인지 알아보겠습니다.

 

생성자

 

1. 클래스의 '__init__'이 무엇일까?

  클래스를 보면 여러 가지 함수가 정의되어 있습니다. 그 중에서도 def __init__이라는 함수를 볼 수 있습니다. 이 함수는 클래스 내의 변수를 정의하고 초기화 하는 역할을 합니다. 그래서 이 함수는 '생성자' 라고 부릅니다.

 

2. 생성자 이해하기

class plus:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
        
    def getplus(self):
        self.result = self.num1 + self.num2
        return self.result

  plus 클래스를 정의했습니다. 이 클래스에는 __init__ 함수와 getplus 함수가 있습니다. 이 중에서 __init__은 인자로 num1과 num2를 받습니다. 그리고 self.num1과 self.num2에 각각 값을 저장합니다. 이 과정은 self.num1과 self.num2를 초기화하는 것입니다.

 

객체를 생성하고 함수를 호출해 보겠습니다.

a = plus(1, 2)

a.getplus()

  plus 클래스로 객체 a를 생성하면서 인자로 1과 2를 줬습니다. num1과 num2에 각각 1과 2가 저장되어 self.num1은 1, self.num2가 2로 초기화 됩니다. 그리고 getplus 함수는 self.num1과 self.num2의 합이 self.result에 저장되므로 3이 반환됩니다.

 

  변수를 생성하면 그 변수를 활용하기 위해 초기화 하는 과정이 필요합니다. 만약 초기화 없이 변수를 활용하면 오류가 발생할 수 있습니다.

 

  위와 비슷한 코드지만 생성자에 self.num1과 self.num2의 초기화 과정이 없습니다. 그러므로 self.num1과 self.num2에 값이 없는 상태입니다.

class plus:
    def __init__(self):
        self.num1
        self.num2
        
    def getplus(self):
        self.result = self.num1 + self.num2
        return self.result

 

  위의 코드에서 self.num1에 저장된 값이 없는데, getplus에서 self.num1과 self.num2의 합인 self.result 값을 return한다면 오류가 발생하겠죠?

 

  이번에는 객체 a를 생성할 때 plus의 괄호 안에 인자를 주지 않습니다. 생성자에서 변수를 초기화하는 과정이 없기 때문입니다. 위의 코드에서는 __init__(self, num1, num2)라고 정의해서 self.num1과 self.num2에 num1값과 num2값을 넣어줬지만, 이번에는 __init__(self)라고 정의되어 있으므로 인자를 넣지 않습니다.

a = plus()

a.getplus()

  plus 클래스를 활용해서 객체 a를 생성했습니다. 객체 a로 getplus를 호출했고, getplus 함수는 self.num1의 값과 self.num2의 값을 합해서 self.result에 저장해야 합니다. 그러나 self.num1과 self.num2에 저장된 값이 없으므로 합을 구할 수 없으므로 오류가 발생하게 됩니다. 그러므로 변수를 생성하면 활용전 반드시 초기화를 해야 합니다. 그것을 위해서 __init__이라는 생성자에서 변수 초기화 과정을 거칩니다.

 

그럼 오늘은 생성자에 대해서 알아보았습니다.

 

감사합니다!

반응형