Python 강좌 : 제 45강 - 디스패치
디스패치(Dispatch)
디스패치(Dispatch)는 오버로딩(Overloading) 구현을 위한 라이브러리입니다.
오버로딩이란 같은 이름의 메서드(method)에 매개변수의 개수나 형식을 다르게 지정해 2개 이상의 메서드를 정의하는 것을 의미합니다.
Python에서는 오버로딩을 지원하지 않지만, multipledispatch 라이브러리를 통해 오버로딩을 구현할 수 있습니다.
multipledispatch 라이브러리는 인스턴스 메서드, 내장 추상 클래스(int, float, str, …)를 지원하며, 캐시를 통해 빠르게 반복 조회할 수 있습니다.
디스패치(Dispatch) 설치
pip install multipledispatchmultipledispatch 라이브러리는 Python 2.6+, Pythono 3.2+를 지원합니다.
종속된 라이브러리로는 six 라이브러리만을 활용해 구현되어 있습니다.
- Tip :
아나콘다(Anaconda)를 통해 Python을 설치한 경우, 라이브러리가 설치되어 있을 수도 있습니다.
오버로딩(Overloading)
from multipledispatch import dispatch
@dispatch(int, int)
def add(x, y):
return x + y
@dispatch(str, int)
def add(x, y):
return f"{x} = {y}"
print(add(3, 6))
print(add("f(x)", 6))- 결과
- 9
f(x) = 6
디스패치(Dispatch)를 사용하기 위해서 오버로딩하려는 메서드 위에 데코레이터(Decorator)를 적용합니다.
메서드는 동일한 이름으로 선언하며, @dispatch(*args)의 구조로 정의합니다.
적용하려는 오버로딩 메서드의 매개변수에 개수나 형식을 다르게 지정해 메서드의 기능을 나눕니다.
dispatch의 매개변수에 따라 서로 다른 메서드가 실행됩니다.
또한, 매개변수의 개수가 달라도 오버로딩을 구현할 수 있습니다.
-
Tip :
@dispatch(str, int)와@dispatch(int, str)는 서로 다른 메서드가 실행됩니다. -
Tip : 동일한 매개변수를 갖는 메서드들이 선언되었다면 가장 아래쪽의 메서드로 적용됩니다.
-
Tip :
상위 클래스(Number 등)와하위 클래스(int, float 등)로 구현한 메서드가 있다면, 하위 클래스의 메서드로 연결됩니다.
공유하기
Kakao
Naver
Twitter
LinkedIn
Facebook
댓글 남기기