study gomi

[Python|파이썬] 기본 문법 - 메소드 오버라이딩 (+파이썬의 메소드 오버로딩?!) 본문

basic/python

[Python|파이썬] 기본 문법 - 메소드 오버라이딩 (+파이썬의 메소드 오버로딩?!)

공부하곰 2024. 1. 8. 21:52
728x90
반응형

예제 코드 출처 : 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++에서 메소드 오버로딩은

- 동일한 이름을 가진 메소드를 여러 개 정의하지만,

- 각각의 메소드가 서로 다른 매개변수의 타입이나 개수를 가질 수 있게 하는 것.

- 즉 메소드 명만 같고 매개변수가 다름.

 

728x90
반응형