이 포스팅은 점프 투 파이썬을 보고 정리하여 작성한 것입니다.
혹시나 수정해야 할 부분이나 질문이 있으면 댓글로 알려주세요!
파이썬에서 클래스란 함수나 자료형처럼 꼭 필요한 요소는 아니지만
프로그램 작성에 있어 보다 쉽게 만들 수 있게 해주는 것이다.
클래스(Class)와 객체(Object)
점프 투 파이썬에서는 클래스와 객체를 과자 틀과 과자 틀로 만든 과자로 비유하고 있다.
클래스는 도면이고 객체는 도면(클래스)으로 만든 것을 뜻한다.
객체는 객체마다 고유한 성격을 가진다는 특징이 있다.
무슨 말인가 하면, 동일한 클래스로 만든 객체들은 서로 영향을 전혀 주지 않는다는 것이다.
객체와 인스턴스의 차이
a = Calc()
- 관계 위주로 설명 할 때 사용하는 것 똑같지만 어떤 것이 주체인가에 따라 다르다.
- a 객체는 Calc의 인스턴스
- a는 객체, a는 Calc의 인스턴스
- a는 인스턴스 ( x )
클래스의 구조
class Calc:
def set(self, n1, n2):
self.n1 = n1
self.n2 = n2
def 함수명(매개변수):
수행할 문장
계산기를 클래스로 만든다고 생각했을때 계산기 클래스 안에 숫자를 저장하는 함수를 만들었다.
클래스 안에 만들어진 함수는 메서드(Method)라고 부른다.
메서드(Method)
def set(self, n1, n2): # 매개변수
self.n1 = n1 # 수행문
self.n2 = n2 # 수행문
set 메서드를 보면 self, n1, n2를 입력 값으로 받는다.
그런데 함수와는 다르게 첫번째 매개변수인 self는 특별한 의미를 가진다.
a = Calc()
a.set(10,5)
객체를 통해 메서드를 호출 하려면 .(도트) 연산자를 사용하여 호출한다.
자세히 보면 호출했을 때 self를 입력으로 받지 않았다.
그 이유는 a.set(10,5) 로 호출했을 때 self 매개변수는 호출한 객체 a로 자동으로 전달되기 때문이다.
메서드의 첫 번째 매개변수는 관례적으로 self를 사용한다. 물론 다른 아무 단어를 적어도 괜찮다!
a.n1 = 10
a.n2 = 5
객체에 생성되는 객체만의 변수를 객체 변수라고 한다
set 메서드가 실행되면 a 객체에 객체변수 n1과 n2가 생성되고 10, 5의 값이 저장된다.
a = Calc()
b = Calc()
a = set(10, 5)
b = set(6, 3)
a와 b를 동일한 클래스와 메서드를 이용했을 때
각 객체가 서로 영향을 끼치지 않는다.
즉, a.n1 = 10 이며 b.n1 = 6이라는 의미이다.
생성자 (Constructor)
생성자란 객체가 생성될 때 자동으로 호출되는 매서드를 의미한다.
class Calc:
def set(self, n1, n2):
self.n1 = n1
self.n2 = n2
def add(self, n1, n2):
return self.n1 + self.n2
예를 들어 클래스에 add라는 더하기 메서드를 만들었을때
set으로 n1과 n2를 정의 하지 않고 add를 쓰면 오류가 발생한다.
이것을 방지하기 위해 메서드 이름으로 __init__ 를 사용하면 이 메서드는 생성자가 된다.
class Calc:
def __init__(self, n1, n2):
self.n1 = n1
self.n2 = n2
def set(self, n1, n2):
self.n1 = n1
self.n2 = n2
def add(self, n1, n2):
return self.n1 + self.n2
__init__ 는 set과 이름만 다르고 모든 게 동일, 그렇지만 __init__으로 메서드를 생성했기 때문에
생성자로 인식되어 클래스가 실행되면 자동으로 호출된다.
__init__ 이 있으면 Calc 클래스를 호출할 때 매개변수 값을 입력해주어야 한다.
a = Calc(10,5)
생성자가 있기 때문에 매개변수 없이 클래스를 호출한다면 오류가 발생한다.
클래스의 상속 (Inheritance)
클래스에서 상속이란 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만든 것이다.
class 클래스 이름(상속할 클래스 이름)으로 상속한다.
class GoodCalc(Calc):
pass
GoodCalc는 Calc를 상속했기 때문에 add와 set 등 Calc의 모든 기능을 사용할 수 있다
즉, 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 변경할 때 사용한다.
메서드 오버라이딩 (Overriding, 덮어쓰기)
부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것을 의미한다.
메서드 오버라이딩을 하면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출된다.
부모 클래스의 메서드를 같은 이름으로 수정하고 호출할 때 사용한다.
이렇게 파이썬에서 클래스와 객체의 의미와 기초적인 사용방법을 공부한 것을 정리하였다.
파이썬이 쉽다고 하지만 깊이 들어가면 다른 언어와 마찬가지로 어려운 부분이 존재한다는 것을 알았다.
위 내용에서 질문이나 틀린 내용이 있으면 댓글로 남겨주시면 감사하겠습니다!
'Python > Python 정리' 카테고리의 다른 글
[Python] 가정 설정문 assert 정리 (0) | 2021.06.07 |
---|---|
[Python] __call__ 함수 정리 (2) | 2021.06.06 |
[Python] *args와 **kwargs 정리 (0) | 2021.05.23 |
[Python] if __name__ == "__main__" 정리 (0) | 2021.05.09 |
Python , NumPy 기본 (1) (0) | 2020.12.01 |