앞서 클래스에 대해 배우면서 오버라이딩(Overriding)과 오버로딩(Overloading)에 대해 나왔었다. 오버라이딩과 오버로딩은 이름에서부터 비슷한 것 같지만 사실은 완전 다른 두 가지 개념이다.
목차
- 오버라이딩(Overriding)
- 오버로딩(Overloading)
1. 오버라이딩(Overriding)
프로그래밍에서의 오버라이딩을 쉽게 설명하면 클래스(Class)의 상속 시 "부모 Class에서 정의한 메소드를 자식 Class에서 변경하는 것"을 말한다. 부모 Class의 메소드 이름과 기본적인 기능은 그대로 사용하지만, 아래와 같이 특정 기능을 바꾸고 싶을 때 자주 사용한다.
class HousePark:
lastname = "박"
def __init__(self, name):
self.fullname = self.lastname + name
def travel(self,where):
print("{0}, {1}여행을 가다." .format(self.fullname, where))
def love(self, other):
print("{0}, {1} 사랑에 빠졌네." .format(self.fullname, other.fullname))
def __add__(self, other):
print("{0}, {1} 결혼했네." .format(self.fullname, other.fullname))
class HouseKim(HousePark): <---- 기본적인 HousePark의 모든 기능 상속
lastname = "김"
def travel(self, where, day):
print("{0}, {1}여행 {2}일 가네." .format(self.fullname, where, day))
위의 소스코드를 보면 HouseKim 클래스는 기본적으로 HousePark 클래스의 모든 기능(__init__, travel, love, __add__)을 상속한다. 즉, 같은 기능의 사용을 위해 반복적인 작성 등 따로 입력하지 않아도 자동적으로 상속된다는 것이다. 하지만 travel 함수는 HouseKim 클래스에 맞게 수정을 한다는 뜻이다.
2. 오버로딩(Overloading)
파이썬에서는 오버로딩을 정식으로 지원하지 않는다. 하지만 구현은 가능하지만 오버로딩을 남발하면 코드가 복잡해지고 난해해진다. 하지만 꼭 필요한 기능이기도 하다.
프로그래밍에서의 오버로딩은 동일한 이름의 함수를 매개변수에 따라 다른 기능으로 동작하도록 할 수 있게 한다.
오버로딩과 오버라이딩을 비교하면 오버라이딩이 클래스의 상속 시에 클래스를 수정하는 것이라면 오버로딩은 하나의 메소드에게 다형성을 부여하는 것이다.
이 오버로딩을 활용하면 메소드를 작성할때 매개 변수의 숫자에 제한이 없기 때문에 사실상 같은 이름으로 동작하는 무수히 많은 메소드를 짤 수 있다.
파이썬에서는 연산자 오버로딩을 사용할 경우가 많이 있는데 이는 연산자(더하기, 빼기, 나누기, 곱하기)를 객체끼리 사용할 수 있게 하는 기법으로 연산자 오버로딩을 사용하면 아래와 같이 동작하도록 할 수 있다.
class HousePark:
lastname = "박"
def __init__(self, name):
self.fullname = self.lastname + name
def __add__(self, other): <---- 연산자 오버로딩 사용
print("{0}, {1} 결혼했네." .format(self.fullname, other.fullname))
class HouseKim(HousePark):
lastname = "김"
def travel(self, where, day):
print("{0}, {1}여행 {2}일 가네." .format(self.fullname, where, day))
pey = HousePark("응용")
juliet = HouseKim("줄리엣")
print(pey + juliet) <---- 연산자 오버로딩 호출
박응용, 김줄리엣 결혼했네.
아직 복잡하고 조금 이해가 어려운 부분이 있다... 더 공부해야 할 것 같다...
'Programing > Python' 카테고리의 다른 글
[Python 입문] 16. 파이썬 패키지 (0) | 2020.03.29 |
---|---|
[Python 입문] 15. 파이썬 모듈 (0) | 2020.03.29 |
[Python 입문] 13. 파이썬 클래스 03 (0) | 2020.03.27 |
[Python 입문] 13. 파이썬 클래스 02 (0) | 2020.03.26 |
[Python 입문] 13. 파이썬 클래스 01 (0) | 2020.03.26 |