상위 목록: 하위 목록: 작성 날짜: 읽는 데 6 분 소요

디스패치(Dispatch)

디스패치(Dispatch)오버로딩(Overloading) 구현을 위한 라이브러리입니다.

오버로딩이란 같은 이름의 메서드(method)에 매개변수의 개수형식을 다르게 지정해 2개 이상의 메서드를 정의하는 것을 의미합니다.

Python에서는 오버로딩을 지원하지 않지만, multipledispatch 라이브러리를 통해 오버로딩을 구현할 수 있습니다.

multipledispatch 라이브러리는 인스턴스 메서드, 내장 추상 클래스(int, float, str, …)를 지원하며, 캐시를 통해 빠르게 반복 조회할 수 있습니다.



디스패치(Dispatch) 설치

pip install multipledispatch

multipledispatch 라이브러리는 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 등)로 구현한 메서드가 있다면, 하위 클래스의 메서드로 연결됩니다.

댓글 남기기