[Python|파이썬] 기본 문법 - 메소드 오버라이딩 (+파이썬의 메소드 오버로딩?!)
예제 코드 출처 : Chat GPT
메소드 오버라이딩(Overriding)
- 서브클래스(자식 클래스)가 슈퍼클래스(부모 클래스)로부터 상속받은 메소드를 재정의하는 것
- 이를 통해 상속받은 메소드와 동일한 이름을 가진 새로운 메소드를 생성.
- 서브클래스에 맞게 기능을 변경할 수 있다.
- 메소드 오버라이딩은 상속받은 기능을 서브클래스의 필요에 맞게 변경할 수 있도록 해주어 객체 지향 프로그래밍에서 매우 유용한 기능이다.
- 자식 클래스에서 같은 메소드를 새로 정의하면 자식 클래스의 메소드 사용 (그렇지 않으면 부모 클래스의 것 사용)
class Animal:
def speak(self):
print("이 동물은 소리를 낼 수 있습니다.")
class Dog(Animal):
def speak(self):
print("멍멍!")
class Cat(Animal):
def speak(self):
print("야옹!")
# 객체 생성
animal = Animal()
dog = Dog()
cat = Cat()
# 메소드 호출
animal.speak() # 출력: 이 동물은 소리를 낼 수 있습니다.
dog.speak() # 출력: 멍멍!
cat.speak() # 출력: 야옹!
메소드 오버로딩(Overloading) : 오버로딩과 유사한 기능을 구현할 수 있지만, 전통적인 오버로딩은 지원하지 않는다.
- Python에서는 동일한 이름의 함수나 메소드를 여러 번 정의할 수 없기 때문에 정식 지원 x.
- C++이나 다른 언어에서 볼 수 있는 전통적인 형태로는 존재하지 않음.
- 대신 기본 매개변수 값, 가변 매개변수 목록 등을 통해 유사하게 구현할 수는 있음.
- 함수가 여러 개의 매개변수를 받을 수 있도록 하거나, 하나의 매개변수가 여러 타입의 값을 받을 수 있게 하는 방법 사용.
# greet 함수는 두 번째 매개변수인 msg에 기본값을 제공
def greet(name, msg="안녕하세요!"):
print(f"{name}, {msg}")
# 함수를 호출할 때 두 번째 매개변수를 생략할 수 있음.
# 일종의 오버로딩과 유사한 효과를 제공
greet("철수")
greet("영희", "반가워요!")
# sum_numbers 함수가 임의의 개수의 인자를 받을 수 있게 작성.
#
def sum_numbers(*args):
return sum(args)
# 다양한 개수의 매개변수를 처리할 수 있게 됨.
# 오버로딩과 유사한 효과를 낼 수 있음.
print(sum_numbers(10, 20))
print(sum_numbers(10, 20, 30))
* 참고 : c++에서의 오버로딩 (본인이 익숙한 게 c++이라 c++로 설명)
C++에서 메소드 오버로딩은
- 동일한 이름을 가진 메소드를 여러 개 정의하지만,
- 각각의 메소드가 서로 다른 매개변수의 타입이나 개수를 가질 수 있게 하는 것.
- 즉 메소드 명만 같고 매개변수가 다름.