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 함수를 호출하는 것을 볼 수 있다.
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
이러한 방식으로 파이썬은 함수 호출하는 방법과 동작에 대한 많은 유연성과 제어를 제공하지만 코드의 동작을 보다 명확하고 이해하기 쉽게 만드는것 같습니다.
'Python' 카테고리의 다른 글
[Python] SOLID 의존성 역전 원칙(DIP) (0) | 2023.02.09 |
---|---|
[Python] SOLID_인터페이스 분리(ISP) (0) | 2023.02.09 |
[Python] SOLID_리스코프 치환 원칙(LSP) (0) | 2023.02.08 |
[Python] SOLID_개방/폐쇄 원칙(OCP) (0) | 2023.02.07 |
[Python] SOLID_단일 책임 원칙(SRP) (0) | 2023.02.06 |