클래스의 필요성
비슷한 기능과 쓰임을 가진 객체들을 신속하고 많이 만드는데 유리하며, 독립적으로 작용하는 객체를 만들 수 있기 때문.
만약 위 그림처럼 게임을 제작할 때 캐릭터들의 기본값을 저장해둔다고 하자.
기존의 방식으로는 검술사,요정,도적 등 각 직업의 체력,공격력,공격방법등을 전부 다시 정의해야 하지만
클래스를 사용하면 클래스 내부의 변수를 조정하는 것만으로도 새로운 직업을 만들 수도 있다.
클래스와 객체, 인스턴스
클래스(class)란 똑같은 무언가를 계속 만들어 낼 수 있는 설계 도면(과자 틀),
객체(object)란 클래스로 만든 피조물(과자 틀로 찍어 낸 과자)을 뜻한다.
또한, 각 객체들은 서로 독립적이며 영향을 주고받지 않는다.
인스턴스(instance)는 객체를 부르는 또 다른 표현이다. 다만, 인스턴스라는 말을 사용할 때에는
'a는 인스턴스다'라는 표현보다는 'a는 b클래스의 인스턴스다'라는 표현으로 사용한다.
파이썬에서의 클래스 정의
class Calculator:
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 mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
위의 방식처럼 "class 클래스이름(입력받을 매개변수):" 의 형태로 정의하며,
그 아래에는 클래스 내부에서 사용할 내부변수와 함수의 정의로 이루어져 있다.
클래스의 상속
class 클래스_이름(상속할_클래스_이름)
기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다
예를 들어 위에 만든 calculator함수에 추가적으로 결괏값을 출력하는 함수를 만들고자 할 때
상속을 이용해서 제작할 수 있다.
class Print_Calculator(Calculator):
def print_Cal(self):
print(Calculator.first,Calculator.second)
Calculator를 상속하여 Calculator의 멤버변수 first와 second를 리턴하는 함수
메서드 오버라이딩
부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것을 말한다.
메서드를 오버라이딩하면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출된다.
class SafeFourCal(Calculator)
def div(self):
if self.second == 0: # 나누는 값이 0인 경우 0을 리턴하도록 수정
return 0
else:
return self.first / self.second
위처럼 safeFourCal이라는 클래스로 Calculator 클래스를 상속받아 사용했을 때, div 함수를 오버라이딩하면
나누는 값이 0일 경우의 오류를 방지할 수 있다.