컴퓨터/Python

Python (28) - 오버로딩(Overloading)과 오버라이딩(Overriding)

달서비 2025. 5. 4. 01:30

객체지향 프로그래밍(OOP)에서 자주 등장하는 개념 중 하나가 오버로딩과 오버라이딩입니다.

이 둘의 이름은 비슷하지만, 개념과 사용 방식은 전혀 다릅니다.

보통 Java나 C++로 설명하지만 파이썬을 기준으로 두 개념을 설명하려 합니다.

 

오버로딩 (Overloading) 

오버로딩은 같은 함수 이름을 사용하지만, 매개변수의 타입이나 개수에 따라 다르게 동작하도록 하는 기법입니다. 

Java나 C++ 같은 언어는 함수 오버로딩을 기본적으로 지원하지만, 파이썬에서는 오버로딩을 지원하지 않으며 multipledispatch 패키지를 사용하여 구현할 수 있습니다.

 

패키지 설치

pip install multipledispatch

 

사용예시

from multipledispatch import dispatch

@dispatch(int, int)
def add(a, b):
    return a + b

@dispatch(str, str)
def add(a, b):
    return a + b

print(add(1, 2))     # 3
print(add("a", "b")) # ab

해당 예제는 @dispatch 데코레이터를 통해 파라미터 타입에 따라 add() 함수가 다르게 작동합니다.

 

오버라이딩 (Overriding)

오버라이딩은 상속받은 클래스에서 부모 클래스의 메서드를 재정의하는 개념입니다.

함수 이름은 동일하지만, 자식 클래스에서 자체적으로 구현을 변경하여 사용합니다.

class Animal:
    def speak(self):
        print("동물 소리")

class Dog(Animal):
    def speak(self):
        print("멍멍!")

a = Animal()
d = Dog()

a.speak()  # 동물 소리
d.speak()  # 멍멍!

위 예시에서 Dog 클래스는 Animal 클래스의 speak() 메서드를 오버라이딩하여 자신만의 동작을 정의했습니다.

파이썬에서는 이처럼 오버라이딩이 기본적으로 지원됩니다.

 

오버로딩 vs 오버라이딩

항목 오버로딩(Overloading) 오버라이딩(Overriding)
대상 같은 클래스 내 함수 상속 관계의 함수
매개변수 타입이나 개수를 다르게 정의 이름과 매개 변수는 동일하되, 내부 로직을 변경
파이썬 지원 기본 미지원
(multipledispatch로 구현)
기본 지원
주 사용 언어 C++, Java 등 Java, C++, Python 등 대부분의 OOP 언어

 

마지막으로

객체지향 언어에서는 코드 재사용성과 유연성을 높이기 위해 오버로딩과 오버라이딩을 적절하게 활용하는 것이 중요합니다. 큰 규모의 프로그램이나 패키지 구성 시 해당 개념을 잘 활용하면 유지보수가 훨씬 수월해집니다.

 

Reference

https://unocoings.tistory.com/31

 

[Python] Overloading 개념

Overloading 이란? 프로그램에서 오버로딩(overloading)이란 동일한 이름의 함수를 매개변수 타입, 개수에 따라 다른 기능으로 동작 가능하게 한다. 파이썬에서는 공식적으로 오버로딩(overloading)을 지

unocoings.tistory.com

 

https://velog.io/@dallok97/%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9

 

오버로딩(Overloading) 오버라이딩(Overriding)

🔍 오버로딩, 오버라이딩

velog.io