프로그래밍/Python

Class의 등장 3탄 상속??

seungdols 2015. 1. 1. 01:23

상속이란 보통 말 그대로 물려받는다는 의미입니다.


프로그래밍 세계에서도 상속의 개념이 있습니다. 정말 말그대로 무언가를 물려 받습니다!


과연 그것이 뭘까요??


우선 상속 배우기전에 앞서 설명을 들어보자!!


>>> 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++에서는 지원합니다.

https://wikidocs.net/28


반응형

'프로그래밍 > 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