Python

[Python] Overloading 개념

UnoCoding 2023. 2. 12. 17:19

Overloading 이란?

 

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

 

파이썬에서는 공식적으로 오버로딩(overloading)을 지원하지 않으며 외부 페키지 multipledispatch를 이용해서 구현해야 한다.

 

사용 목적

  • 동일 메소드 재정의
  • 네이밍 기능 예측
  • 코드절약, 가독성 향상
  • 메소드 파라미터 기반 호출 방식

 

파이썬이 지원하지 않는 다고 말한 예제

class SampleA:
    def add(self, x, y):
        return x + y

    def add(self, x, y, z): # -< 이 함수가 실행됨
        return x + y + z
        
sampleCode1 = SampleA()
print("Ex1 > ", sampleCode1.add(10, 20, 30))
print("Ex1 > ", sampleCode1.add(10, 20))

2번째로 정의한 add 함수를 호출하는 것을 볼 수 있다.

2번째 print문으로 에러가 발생한 모습

 

dispatch를 이용한 Overloading 예제

 

dispatch 설치

pip install multipledispatch

예제 코드

from multipledispatch import dispatch


class Sample3(object):
    @dispatch(int, int)
    def mul(x, y):
        return x * y

    @dispatch(int, int, int)
    def mul(x, y, z):
        return x * y * z

    @dispatch(float, float, float)
    def mul(x, y, z):
        return x * y * z

    @dispatch(int, int)
    def add(x, y):
        return x + y

    @dispatch(str, str)
    def add(x, y):
        return " ".join([x, y])


sample3 = Sample3()
print(sample3.mul(10, 20))
print(sample3.mul(10, 20, 30))
print(sample3.mul(10.1, 20.2, 30.3))
print(sample3.add(10, 20))
print(sample3.add("hello", "world"))

Output

 

왜?  python이 orverloading을 지원하지 않는가

 

해당 의견은 글쓴이의 개인적인 생각입니다.

 

혹시라도 근거 있는 내용이 있을 경우 댓글로 알려 주세요.

 

파이썬은 공식적으로 Overloading을 지원하지 않습니다. 

 

기본적으로 파이썬에는 "명시적인 것이 암시적인 것보다 낫다" 라는 철학을 가지고 있습니다. 그렇기 때문에 overloading은 덜 명시적이다 라고 판단 한것 같습니다.

 

1. Default 값을 통한 방법

def add(a, b=0):
    return a + b

print(add(10)) # 10
print(add(10, 20)) # 30

 

2. *args, **kwargs를 통한 방법 

def add(*args, **kwargs):
    result = 0
    for arg in args:
        result += arg
    for key in kwargs:
        result += kwargs[key]
    return result

print(add(10, 20, 30, 40, 50, a=60, b=70)) # 300

3. python 3.0 이후로 추가된 Function Annotation

def add(a: int, b: int) -> int:
    return a + b

print(add(10, 20)) # 30

 

이러한 방식으로 파이썬은 함수 호출하는 방법과 동작에 대한 많은 유연성과 제어를 제공하지만 코드의 동작을 보다 명확하고 이해하기 쉽게 만드는것 같습니다.