Python 입문 | 클래스 사용 | 상속 클래스
클래스를 정의하는 가장 큰 장점은 “재사용이 가능하다"라는 것이다. 한번 만들면, 이후에는 그것을 그대로 복사하여 여기 저기에서 사용할 수 있다.
그러나 실제로 사용해 보면 “여기는 이렇게 하는 것이 더 좋다"라고 하는 것이 나올 거다. 하지만, 어느 정도의 규모의 프로그램가 되면, 곳곳에서 클래스를 사용하고 있으면 이런 수정은 제공되지 않는다.
이럴 때 정말 편리한 기능이 준비되어 있다. 그것은 “상속"이라는 것이다.
상속이라는 것은 이미 클래스를 그대로 이어 받아 새로운 클래스를 만드는 것이다. “이어 받는다"라는 것은 “클래스의 모든 기능을 그대로 이어 받는다"라는 것이다. 즉, 그 클래스에 있는 것을 통째로 그대로 받아 새로운 클래스를 만드는 거다.
이 상속을 사용하여 클래스를 정의하려면 다음과 같이 클래스를 만듭니다.
def 클래스 이름(상속하는 클래스):
...... 클래스의 내용 ......
상속에는, 상속하는 원래 클래스를 “기본 클래스”, 새로 만든 클래스를 “파생 클래스"라고 한다.
실제 사용 예를 아래와 같다.
class Member:
name = ""
def __init__(self,str):
self.name = str
def showMsg(self):
print("Hello," + self.name + ".How are you?")
class PowerMember (Member):
mail = ""
def __init__(self,str1,str2):
self.name = str1
self.mail = str2
def showMsg(self):
print("Hello," + self.name + ".")
print("Your mail address is '" + self.mail + "'.")
taro = Member("Taro")
taro.showMsg()
hanako = PowerMember("Hanako","hanako@flower.com")
hanako.showMsg()
여기에서는 Member 클래스를 상속하여 PowerMember라는 파생 클래스를 만들고 있다.
이 PowerMember 클래스는 def __init__(self, str1, str2):
이렇게 하여, 2개의 인수를 준비했다. 그리고 self.name과 self.mail에 각각 설정하고 있다. 그런데, 이상한게 있다. 조금 자세히 더 살펴 보도록 하자.
잘 보면 이 PowerMember 클래스는 “mail"밖에 인스턴스 변수가 포함되어 있지 않았다. 그런데 self.name 값은 잘 저장하고 있다. 이것은 기본 클래스인 Member에 name가 준비되어 있기 때문이다. 상속은 기본 클래스의 모든 기능을 이어 받아 사용할 수 있다. 따라서 PowerMember에 name을 준비 할 필요는 없다.
멤버 변수뿐만 아니라 메소드도 모든 슈퍼 클래스에 있는 것은 그대로 사용할 수 있다. 이 상속을 사용하면 이미 있는 클래스를 점점 확장하여 기능 강화해 나갈 수 있다는 것이다.
Python에는 다양한 클래스가 라이브러리에 포함되어 있다. 그리고 그들을 이용할 때, 이 “상속"이 사용되고 있다.
예를 들어, 먼저 “리스트”, “튜플”, “레인지"라는 컨테이너에 대해 설명을 했었다. 이런 것도 실은 모든 “클래스"로 준비되어 있다. 이 3개의 클래스에 공통된 기능이 많은 것은 ‘시컨스’라는 인덱스에서 관리하는 컨테이너 클래스가 있고 그것을 계승하고 리스트나 튜플이 있다고 생각하면 이미지화하기 쉬울 것이다.