Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 함수(메서드) 오버로딩을 구현하는 방법

파이썬에서는 하나의 메서드를 여러 가지 방식으로 호출할 수 있도록 정의할 수 있습니다. 함수 정의에 따라 매개변수 없이 호출하거나, 하나, 두 개 또는 그 이상의 매개변수와 함께 호출할 수 있습니다. 이처럼 같은 이름의 메서드를 다양한 형태로 호출하는 기법을 메서드 오버로딩(Method Overloading)이라고 합니다.

다만 자바나 C++와 달리 파이썬은 전통적인 의미의 오버로딩 문법을 지원하지 않습니다. 대신 기본 매개변수(default parameter)를 활용하면 동일한 효과를 얻을 수 있습니다.

아래 예제에는 sayHello() 메서드 하나만 가진 클래스가 있습니다. 이 메서드의 매개변수 name에 기본값 None을 설정하면, 인자를 넘기지 않고 호출하거나 인자를 넘겨서 호출하는 두 가지 방식 모두 사용할 수 있습니다.

클래스를 기반으로 객체를 생성한 뒤, 메서드 오버로딩을 구현하기 위해 sayHello()를 두 가지 방식으로 호출해 보겠습니다.

  1. obj.sayHello() — 인자 없이 호출
  2. obj.sayHello('Rambo') — 인자를 하나 넘겨서 호출

이렇게 하면 정의 시 허용된 개수보다 적은 인자로 메서드를 호출할 수 있습니다. 선택적 매개변수는 두 개로 제한되지 않으므로, 필요하다면 더 많은 옵션 매개변수를 추가할 수도 있습니다.

예제 코드

class Human:
    def sayHello(self, name=None):
        if name is not None:
            print('Hello ' + name)
        else:
            print('Hello')

obj = Human()
obj.sayHello()
obj.sayHello('Rambo')

실행 결과

Hello
Hello Rambo

추가 팁: 더 유연한 오버로딩 기법

기본 매개변수 외에도 다음과 같은 방법으로 오버로딩 효과를 낼 수 있습니다.

  • *args, **kwargs: 가변 인자를 받아 호출 시 전달된 인자의 개수와 타입에 따라 분기 처리할 수 있습니다.
  • functools.singledispatch: 첫 번째 인자의 타입에 따라 서로 다른 구현체가 실행되도록 등록할 수 있어, 타입 기반 오버로딩을 구현할 때 유용합니다.

이러한 기법들을 조합하면 파이썬에서도 자바·C++ 스타일의 오버로딩과 거의 동일한 동작을 구현할 수 있습니다.