[Python] 클래스 생성자
안녕하세요 동기 여러분!
오늘은 클래스의 생성자(constructor)에 대해 알아봅시다!
클래스 생성자(constructor)
class Area:
def settings(self, width, height):
self.width = width
self.height = height
def triangle(self):
area = self.width * self.height / 2
return area
def square(self):
area = self.width * self.height
return area
area_1 = Area()
area_2 = Area()
area_1.settings(5, 8)
area_2.settings(3, 7)
print(area_1.triangle(), area_1.square())
print(area_2.triangle(), area_1.square())
# 출력값 :
# 20.0 40
# 10.5 40
넓이를 계산해주는 클래스 Area입니다.
첫 번째 메서드인 settings는 인자를 두 개 받기 위해서 self.width = width, self.height = height로 선언해줍니다.
두 번째 메서드는 삼각형의 넓이를 구해주는 메서드입니다.
세 번째 메서드는 사격형의 넓이를 구해주는 메서드입니다.
area_1 = Area(), area_2 = Area() 각 변수에 클래스를 선언해줍니다.
그리고 settings 메서드를 이용해서 넣고 싶은 숫자를 넣어서 세팅을 해줍니다.
마지막으로 area_1.triangle(), area_1.square(), area_2.triangle(), area_1.square() 출력하면 촥 출력됩니다.
뭐가 이렇게 복잡해?
제가 적으면서도 상당히 복잡해서 스트레스 받습니다. 그냥 클래스 선언할 때 바로 인자를 넣으면 안 될까?
네 ~ 안됩니닼ㅋㅋㅋ 이렇게 바로 전달이 안 되는 경우에 __init__ 메서드를 사용합니다.
생성자 추가
class Area:
def __init__(self, width, height):
self.width = width
self.height = height
def settings(self, width, height):
self.width = width
self.height = height
def triangle(self):
area = self.width * self.height / 2
return area
def square(self):
area = self.width * self.height
return area
area_1 = Area(5, 8)
area_2 = Area(3, 7)
print(area_1.triangle(), area_1.square())
print(area_2.triangle(), area_1.square())
# 출력값 :
# 20.0 40
# 10.5 40
__init__ 메서드를 추가하니까 되네???
생성자 정의
밑줄 두 개 init 밑줄 두 개로 작성해서 double underscores method 부르기 때문에 __init__을 줄임말로 dunder method라고 부릅니다. dunder method는 새롭게 만들어진 객체를 초기 설정하기 위해 사용되고 클래스가 호출될 때마다 인스턴스화 됩니다.
이렇게 객체를 인스턴스화 하는 것을 준비하기 위해 사용되는 메서드를 생성자(constructor)이라고 부릅니다. 다른 프로그래밍 객체 지향 언어에서는 생성자를 다르게 표현하지만 Python에서는 __init__ 메서드를 말합니다.
아무튼, __init__메서드인 생성자를 추가하게 되면 클래스로 들어온 인자들이 자동으로 촥촥 넘어가서 맨 위 코드처럼 복잡하게 하지 않아도 됩니다!
오늘의 느낌
영어로 읽는 코드 설명은 이해가 오래 걸리고 한글로 읽는 코드 설명도 말이 어려워서 이해가 안 되고 끊임없이 읽고 시도해봐서 머리로 이해를 해도 글로 표현하기가 참 어렵구나.