클래스 : 반복되는 변수 & 메서드(함수)를 미리 정해놓은 틀(설계도)
■ 클래스가 필요한 이유
- 계산기 1개
>>> result = 0
>>> def add(num):
global result
result += num
return result
>>> print(add(3))
>>> print(add(4))
3
7
- 계산기 2개 (함수가 반복됨)
>>> result1 = 0
>>> result2 = 0
>>> def add1(num):
global result1
result += num
return result1
>>> def add2(num):
global result2
result += num
return result2
>>> print(add1(3))
>>> print(add1(4))
>>> print(add2(3))
>>> print(add2(7))
3
7
3
10
계산기의 기능을 하는 함수를 만들었다고 가정하면, 1개의 계산기는 1개의 함수만 있으면 되기에 상관없지만 2개 이상의 계산기를 만든다면 반복되는 함수들이 생긴다. 이러한 번거로움을 해결하기 위해 더하기라는 것을 클래스로 만들고 별개의 cal1, cal2 계산기가 각각의 역할울 수행하게 만들면 된다.
■ 클래스와 객체
클래스는 똑같은 무언가를 계속 만들어 낼 수 있는 설계도면이고, 객체는 클래스로 만든 피조물을 뜻한다.
>>> class Cookie
pass
위에서 작성한 Cookie 클래스는 아무런 기능도 가지고 있지 않은 컵질뿐인 클래스이다.
>>> class Cookie
pass
>>> a = Cookie()
>>> b = Cookie()
Cookie()의 결과값을 리턴받은 a와 b가 바로 객체이다. 마치 함수를 사용해 결과값을 리턴받는 모습과 비슷하다.
※객체와 인스턴스의 차이
a = Cookie() 로 만든 a는 객체이다. 그리고 a 객체는 Cookie의 인스턴스이다. 즉, 인스턴스는 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용한다.
■ 클래스 사용 예시
>>> class Calculator:
def __init__(self):
self.result = 0
def add(self, num):
self.result += num
return self.result
>>> cal1 = Calculator()
>>> cal2 = Calculator()
>>> print(cal1.add(3))
>>> print(cal1.add(4))
>>> print(cal2.add(3))
>>> print(cal2.add(7))
3
7
3
10
- 사칙연산 기능을 가진 계산기 작성
>>> class = FourCal
def __init__(self, first, second):
self.first = first
self.second = second
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def sub(self):
result = self.fisrt - self.second
return result
def mul(self):
result = self.first * self.second
return result
def div(self):
result = self.first / self.second
return result
>>> a = FourCal(4,2)
>>> a.setdata(4,2)
>>> print(a.add())
6
■ 클래스 상속
클래스의 상속이란, 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만드는 것이다.
- 사칙연산 기능을 가진 계산기에 a의 b제곱 값을 구하는 기능 추가
>>>
>>> class = FourCal
def __init__(self, first, second):
self.first = first
self.second = second
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def sub(self):
result = self.fisrt - self.second
return result
def mul(self):
result = self.first * self.second
return result
def div(self):
result = self.first / self.second
return result
>>> class MoreFourCal(FourCal):
def pow(self):
result = self.first ** self.second
return result
>>> a = MoreFourCal(4,2)
>>> print(a.pow())
>>> print(a.add())
16
6
기존의 사칙연산 기능을 가진 클래스 "FourCal"에 a의 b제곱 기능을 가진 MoreFourCal 클래스를 만들어서 기존의 클래스를 상속시켜 준 예시이다. MoreFourCal 클래스로 만든 객체 a에 값 4와 2를 지정한 후 pow 메서드를 호출하면 4의 2제곱인 16을 리턴한다. 또한, 상속받은 기능인 add 메서드도 잘 작동한다.
상속은 MoreFourCal 클래스처럼 기존 클래스(FourCal)는 그대로 놔둔 채 클래스의 기능을 확장할 때 주로 사용한다.