개요
컴퓨터 프로그래밍에서 메서드 오버로딩(Overloading)이란, 함수 이름은 같지만 매개변수나 반환 데이터 타입을 다르게 정의하는 것을 의미한다.
Python은 함수를 정의할 때 타입을 지정하기 않기 때문에 기본적으로 오버로딩을 지원하지 않는다. 하지만 multipledispatch라는 라이브러리를 사용하면 오버로딩을 적용할 수 있다고 한다. 사용 방법을 정의한다.
multipledispatch
Python multipledispatch는 상속, 인스턴스 메서드, 추상 클래스, Union 타입 지원 등을 제공하는 라이브러리이다.
Python 기본 라이브러리가 아니기 때문에 pip 등으로 설치해야 한다.
pip install multipledispatch
모듈 임포트
메서드 오버로딩을 구현할 때는 dispatch 데코레이터를 사용한다. 다음과 같이 import 하여 사용하면 된다.
from multipledispatch import dispatch
사용 예시
dispatch는 데코레이더로 매개변수의 데이터 타입을 순서대로 기재해 주면 된다.
from multipledispatch import dispatch
@dispatch(int, int)
def add(a, b):
return a + b
@dispatch(str, str)
def add(a, b):
return a + b
이제 아래와 같이 add 함수에 정수형 데이터, 문자열 데이터를 전달하면
print(add(1, 2))
print(add('1', '1'))
정상적으로 잘 동작하는 모습을 확인할 수 있다.
시험 삼아 float형 데이터도 전달해 보았는데, 이 경우에는 데이터 타입이 맞지 않아 에러가 발생하는 모습을 확인할 수 있었다.
참고 문서
https://076923.github.io/posts/Python-45/
https://multiple-dispatch.readthedocs.io/en/latest/design.html#namespaces-and-dispatch