결론
'Overriding'은 상속받은 내용을 덮어쓰기
'Overloading'은 다양한 형태의 인수로 동일한 함수를 실행하기
쉽게 이해하기위해 범위를 좁혀 말하자면 위와 같다고 할 수 있다.
(실제는 좀 더 넓은 개념으로 생각하면 좋을 것 같다.)
Overriding 예제 코드
# 부모 클래스
class ParentMoney:
def introduce(self, name):
self.money = 1000
self.name = name
self.word = "어때 부럽지?"
return f"내 이름은 {self.name}, {self.money}원을 가지고 있지. {self.word}"
# 자식 클래스
class ChildMoney(ParentMoney):
def introduce(self, name):
super().introduce(name)
self.money = 50
self.name = name
return f"내 이름은 {self.name}, {self.money}원을 가지고 있지. {self.word}"
parent_object = ParentMoney()
parent_answer = parent_object.introduce("김부모")
print(parent_answer)
child_object = ChildMoney()
child_answer = child_object.introduce("박자식")
print(child_answer)
'''
<결과>
내 이름은 김부모, 1000원을 가지고 있지. 어때 부럽지?
내 이름은 박자식, 50원을 가지고 있지. 어때 부럽지?
'''
이 코드를 보면 부모클래스의 속성을 자식클래스가 상속받고 있다.
그리고 자식클래스는 부모클래스와 동일한 함수 'introduce'에 새로운 값을 할당한다.
그 결과 self.money는 기존 상속 값을 따르지 않고 50으로 수정되었다.
하지만 새로운 값을 할당하지 않은 self.word의 경우, 상속 값을 그대로 따르는 것을 볼 수 있다.
즉, 오버라이딩은 기존 상속 값에 새로 지정한 값을 덮어쓰기 하는 것이고 새로 지정한 값이 없다면 기존 상속 값을 그대로 가진다.
Overloading 예제 코드
class Money:
def introduce(self, name="익명", money=10):
self.name = name
self.money = money
self.word = "어때 부럽지?"
return f"내 이름은 {self.name}, {self.money}원을 가지고 있지. {self.word}"
object = Money()
answer1 = object.introduce(name="변덕순")
print(answer1)
answer2 = object.introduce(money=10000)
print(answer2)
answer3 = object.introduce("마동규", 5000)
print(answer3)
answer4 = object.introduce()
print(answer4)
'''
<결과>
내 이름은 변덕순, 10원을 가지고 있지. 어때 부럽지?
내 이름은 익명, 10000원을 가지고 있지. 어때 부럽지?
내 이름은 마동규, 5000원을 가지고 있지. 어때 부럽지?
내 이름은 익명, 10원을 가지고 있지. 어때 부럽지?
'''
Money객체를 만들어 introduce 메서드를 사용할 때,
인수에 대한 기본값을 설정하였으므로 인수를 다양한 형태(여기서는 0개에서 2개까지)로 넣을 수 있다.
인수로 어떤 것을 넣어도 introduce 메서드를 사용할 수 있고 거기에 따라 결과 값도 다양하게 얻을 수 있다.
이러한 형태를 Overloading 이라 부른다.
오버로딩의 가장 대표적인 예는 print() 라고 할 수 있다. print() 라는 함수에 다양한 자료형을 넣어 출력할 수 있듯이, 유사하지만 다른 여러 종류의 요청들을 하나의 함수로 응답하는 것을 오버로딩으로 볼 수 있다.
이러한 오버라이딩과 오버로딩은 객체의 특성 중 하나인 '다형성'과도 관련 되어있다.
*다형성이란? 상수, 변수, 식, 오브젝트, 함수, 메소드 등이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다.
'나는 이렇게 학습한다 > Language' 카테고리의 다른 글
Python _ 딕셔너리 추가, 삭제 메서드 정리 (0) | 2022.03.04 |
---|---|
파이썬 range로 음수와 0도 반복할 수 있을까? (0) | 2022.02.10 |
파이썬 멀티 프로세싱, GIL (0) | 2022.01.24 |
파이썬 멀티 스레딩 (0) | 2022.01.16 |
파이썬 코루틴 활용 (0) | 2022.01.16 |