Python Class 완전 쉽게 이해하기 (2) - 인스턴스변수, 클래스변수, 생성자, 메서드
안녕하세요 조뚜비입니다.
이전 글에 이어서, (코딩을 하면서도 바로 이해하기가 어려웠던) 클래스에 대해 공부 해 보겠습니다
▼ 객체와 클래스 기본개념은 아래에서 보고오기
2021/01/27 - [파이썬 공부] - Python Class 개념 이해하기 (1) - 객체(object) 란
▼ 아래 본문의 내용들은 "아무튼 워라밸" 님의 블로그에서 공부한 내용을 바탕으로 작성하였습니다.
** 그 당시 나 정말 감사했나봐,, 댓글에 주접 신나게 털고 갔따,,,⭐
다시보니까 새-삼 민망한것.. (아이디마저 사노예잔앜ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ)
1편 글을 읽고와도, 아직까지 '클래스' 개념이 바로 와 닿지 않으실 겁니다. 이번엔 아주아주 간단한 예시들을 들며 설명하겠습니다.
1. 클래스와 인스턴스
클래스와 인스턴스의 개념은, 간단히 말하자면 붕어빵 틀과 붕어빵의 관계입니다. 붕어빵 틀로 붕어빵을 찍어낼 때, 팥 붕어빵 / 슈크림 붕어빵 / 초코 붕어빵 등등이 나오는 것과 같은 원리에요.
class Car:
pass
instance_1 = Car()
instance_2 = Car()
instance_3 = Car()
이렇게 지정해주면 인스턴스가 생성이 됩니다! 어떻게 써먹는지는 이후 단계에서 설명할게요.
2. 클래스 변수 (Class Variables)
클래스 변수는 클래스 안에서 선언 된 변수 입니다. 클래스를 정의할 때 변수를 함께 정의 해 두면 모든 인스턴스 들에서 동일한 값을 사용할 수 있습니다. (붕어빵 틀 안에 팥 맛을 넣어두면 모두 팥 붕어빵이 나오는...!...)
class Kpopstar:
mind = 'We love music'
main_vocal = Kpopstar()
rapper = Kpopstar()
dancer = Kpopstar()
print(main_vocal.mind)
print(rapper.mind)
print(dancer.mind)
#We love music
#We love music
#We love music
Kpopstar 라는 클래스 안에 mind 라는 변수를 'We love music'
이라고 지정 해 두었기 때문에, 모든 값이 'We love music' 이라고 출력 됩니다 😊
3. 메서드 (Methods)
클래스 변수가 클래스 안에 정의 된 변수의 값이라면, 메서드는 클래스 안에서 정의 된 함수입니다! 일반적인 함수 (def 로 정의하는 함수) 와 다른 점은, 첫번째 매개변수를 self
로 넣어야 한다는 규칙이 있다는 것입니다.
class Circle:
# 클래스 변수로 pi 를 3.14 로 지정
pi = 3.14
# 원의 넓이를 구하는 함수 지정, 반지름을 입력하면 pi*반지름의 제곱 반환
def area(self, radius):
return self.pi * (radius**2)
# 인스턴스 변수 'circle' 을 지정
circle = Circle()
pizza_area = circle.area(3)
table_area = circle.area(10)
print(pizza_area) #28.26
print(table_area) #314.0
area
는 클래스 안에 있는 함수(=메소드) 이기 때문에, 함수 안에 self
라는 매개변수를 첫 번째로 넣었습니다. 여기까지 이해했다 손들어어엇! ✋✋✋
4. 생성자 (Constructor)
클래스 이름과 같은 함수를 생성자 라고 합니다. 클래스를 호출할 때 어떤 함수가 실행되거나 값을 바로 호출할 수 있습니다. 생성자 역시 '함수' 이기 때문에, 메소드와 동일하게 def
로 호출하고, self
를 첫 매개변수에 두어야 하는 것이 동일하지만, 이름을 __init__
으로 설정해야 합니다.
class Bts:
# 첫 매개변수로는 self를, 두번째 매개변수는 name을 넣음
def __init__(self, name):
print('my name is {} of BTS'.format(name))
# self를 지정한 부분은 더 넣을 필요가 없고, name에 해당하는 값만 넣으면 된다
rm = Bts('RM')
# my name is RM of BTS
위의 메소드와 다른점을 찾으셨나요! 🤔
위에서 피자 넓이를 구할 때는, 메소드로 넓이를 구하는 함수가 지정이 되어 있었기 때문에,pizza_area = circle.area(3)
이라고, 인스턴스 변수에 메소드를 이어서 호출했습니다! 근데 생성자는 클래스 이름과 같은 함수이기 때문에 그 과정을 건너뛰고! 바로 rm = Bts('RM') 이라고 클래스에다가 바로 값만 넣어줘도, 생성자에 지정해 두었던 대로 'my name is 'RM' of BTS' 가 바로 출력이 됩니다.
5. 인스턴스 변수 (Instance Variables)
클래스 변수와 동일하게 클래스 안에 지정된 변수의 개념입니다.
클래스 변수와 다른 점은, 클래스변수는 모든 인스턴스가 그 값을 공유하지만, 인스턴스 변수는 지정 해 둔 인스턴스마다 다른 값을 지정할 수 있다는 점! 입니다. (머리 굴리기가 어려워 '아무튼워라밸' 님의 블로그 예시를 그대로 가져왔습니다)
class AutoEmail:
intro = "안녕하세요"
def __init__(self, name):
self.name = name
def say_hello(self):
return "{intro} {name} 님".format(intro=self.intro, name=self.name)
print(AutoEmail('Park').say_hello())
print(AutoEmail('Kim').say_hello())
# 안녕하세요 Park 님
# 안녕하세요 Kim 님
이제 클래스의 기본 개념들은 공부를 마쳤습니다. 가끔 가끔 클래스 사용법을 까먹을 때마다 저도 다시 들어와서 기웃기웃 해보아야겠어요. 모두 안녕!🖐