파이썬 공부

Python Class 완전 쉽게 이해하기 (2) - 인스턴스변수, 클래스변수, 생성자, 메서드

조뚜비 2021. 1. 27. 23:15
728x90

안녕하세요 조뚜비입니다. 

이전 글에 이어서, (코딩을 하면서도 바로 이해하기가 어려웠던) 클래스에 대해 공부 해 보겠습니다

 


▼ 객체와 클래스 기본개념은 아래에서 보고오기

2021/01/27 - [파이썬 공부] - Python Class 개념 이해하기 (1) - 객체(object) 란

 

Python Class 개념 이해하기 (1) - 객체(object) 란

안녕하세요. 조뚜비입니다. 제대로 된 잡덕..⭐ 이번엔 파이썬 공부 카테고리로 왔습니다🤣 찐잡덕 인증,, 저는 학부때도 입사 후에도 코딩의 ㅋ도 모르는 코알못이었는데요, 회사에서 딥러닝

dduby-dubab.tistory.com

▼ 아래 본문의 내용들은 "아무튼 워라밸" 님의 블로그에서 공부한 내용을 바탕으로 작성하였습니다.

 

파이썬 클래스(Class) 쉽게 이해하기 - 아무튼 워라밸

파이썬을 공부하게 되면 일단 여러가지 자료형, 조건문, 반복문, 함수를 익혀 어느정도 기초를 다진다. 그 다음엔 보통 클래스(Class)를 접하게 되는데, 여기서부터는 좀 어렵다. 나도 그랬다. 그

hleecaster.com

** 그 당시 나 정말 감사했나봐,, 댓글에 주접 신나게 털고 갔따,,,⭐ 

    다시보니까 새-삼 민망한것.. (아이디마저 사노예잔앜ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ)

 

ㅋㅋㅋㅋㅋ 주접댓글... '아무튼워라밸'님 보고계신지... ㅠㅠ 민망슼ㅋㅋㅋㅋㅋㅋㅋ


 

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 님

 

이제 클래스의 기본 개념들은 공부를 마쳤습니다. 가끔 가끔 클래스 사용법을 까먹을 때마다 저도 다시 들어와서 기웃기웃 해보아야겠어요. 모두 안녕!🖐