상속이란 보통 말 그대로 물려받는다는 의미입니다.
프로그래밍 세계에서도 상속의 개념이 있습니다. 정말 말그대로 무언가를 물려 받습니다!
과연 그것이 뭘까요??
우선 상속 배우기전에 앞서 설명을 들어보자!!
>>> class Choi: lastName = "choi" def __init__(self,name): self.fullName = self.lastName + name def printName(self): print("%s" % self.fullName) def __del__(self): print("class delete")
이런 구조의 클래스를 작성해보았습니다. 우선 __del__ 함수는 넘어갑니다!
생성자에서 지금 성이 choi와 객체 생성시 입력받은 인자와 문자열 덧셈을 하고 있습니다.
그걸 printName()메서드에서 이름 전체를 출력합니다.
실행을 해보도록 하겠습니다.
>>> test = Choi("Hi") >>> test.printName() choiHi >>> del test class delete >>>
del 이라는건 객체를 지울때 쓰는 명령이다.즉 위에서 __del__은 소멸자라고 불리는 것으로 생성자와 반대의 기능이다.
결과는 객체를 지운다.
이제 상속을 배워보자!
class 클래스명(상속받은 클래스명)
클래스 구문
이런 구조로 이루어진다.
>>> class Kim(Choi): lastName="kim" >>>이렇게 써주고 실행해보자!
>>> k = Kim("somang") >>> k.printName() kimsomang >>>
이렇게 값은 달라졌으나, 내용은 같아졌다!!!!
이렇게 상속을 유용하게 사용 할 수 있습니다. 물론 조상 클래스를 잡을 땐 유사한 기능이 같을 때 이야기입니다.
그리고 상속 개념과 더불어서 메소드 오버라이딩, 연산자 오버로딩등 개념이 있습니다.
메소드 오버라이딩은 상속 받은 메소드를 다시 재정의 = (다시 코드를 쓴다) 한다는 의미입니다.
>>> class Choi: lastName = "choi" def __init__(self,name): self.fullName = self.lastName + name def printName(self): print("%s" % self.fullName) def __del__(self): print("class delete") >>> class Kim(Choi): lastName="kim" def printName(self): print("my name : %s" % (self.fullName))
두 클래스에서 printName()을 사용하는데 kim 클래스에서 choi 클래스를 상속 받고 있습니다. 이 때 메소드를 다시 정의 하고 싶다면!
그래서 kim 클래스에서 다시 메소드를 써줍니다. 이 때 메소드명이 같아야 메소드 오버라이딩입니다. Java의 경우 오버라이딩 조건이 존재합니다. 그 외는 성립하지 않습니다.
조건으로는 인자 수, 인자 타입, 인자 순서, 메소드 명으로 Java compiler가 구분을 하게 됩니다.
파이썬의 경우도 같다고 볼 수 있습니다.
연산자 오버로딩은 연산자 +, - 등과 같은 것들을 객체 단위로 할 수 있도록 해줍니다. 다만 편리성이 증가 할 수 있으나 가독성, 유지보수에 큰 무리가 갈 수 있습니다.
그래서 연산자 오버로딩은 점프 투 파이썬을 참고하시기 바랍니다.
Java 의 경우 연산자 오버로딩은 지원하지 않습니다. C++에서는 지원합니다.
'프로그래밍 > Python' 카테고리의 다른 글
python - pip 설치 하기 (0) | 2015.02.20 |
---|---|
Python IDE - pycham 설치 가이드 (0) | 2015.02.20 |
Class의 등장 2탄 (0) | 2015.01.01 |
Class의 등장 1탄 (0) | 2014.12.31 |
새로운 데이터 구조 딕셔너리(dictionary) (0) | 2014.12.31 |