본문 바로가기
Dev/Python

[Python] 함수 시그니처

by Yoon_estar 2025. 9. 24.
728x90
반응형

개요

코딩을 하다보면 함수 시그니처(Function Signature)라는 용어를 자주 접하게 됩니다. 코드가 복잡해질수록 그 중요성도 커지는데 함수 시그니처가 무엇이며, 왜 사용하고 어떻게 활용하는지 포스팅하겠습니다.

함수 시그니처란?

함수 시그니처는 한 마디로 함수를 호출하는 방법에 대한 명세입니다. 함수의 이름, 매개변수(Parameter)의 개수와 타입, 그리고 반환 타입(Return Type)을 표현합니다. 이는 마치 우리가 어떤 물건을 사용할 때 사용 설명서를 읽는 것 처럼, 코드를 통해 함수를 어떻게 사용해야하는지 명확하게 보여주는 역할을 합니다.

 

함수 시그니처는 함수의 동작 구현 자체는 포함하지 않습니다. 오직 어떤 입력을 받아 어떤 결과를 반환할 것인지에 대한 약속만을 정의합니다. 파이썬에서는 def 함수명(매개변수: 타입 = 기본값, ...) -> 반환 타입: 과 같은 형태로 정의해 입력과 출력을 명확히 표현할 수 있습니다.

사용 목적

함수 시그니처는 코드의 가독성과 유지 보수성을 크게 향상 시키고, 버그를 줄이는 데 매우 효과적입니다.

  • 코드 이해도 향상 : 함수 시그니처가 잘 작성되어 있으면, 함수 내부 코드를 일일이 들여다보지 않아도 함수의 의도와 사용법을 빠르게 파악할 수 있습니다. 이는 특히 여러 사람이 함께 작업하는 협업 환경에서 큰 도움이 됩니다. 팀원이 작성한 함수를 빠르게 이해하고 사용할 수 있습니다.
  • 버그 감소 : 매개 변수의 타입이나 개수가 명시되어 있기 때문에, 잘못된 인자를 전달했을 때 즉시 오류를 발견할 수 있습니다. 예를 들어 숫자를 입력해야하는 곳에 문자열을 넣으면 바로 경고를 받아 실수를 줄일 수 있습니다.

함수 시그니처 사용 예시

  • 타입 힌트가 없는 경우
def greet(name, age=20):
    return f"Hello, {name}! You are {age} years old."

 

  • 타입 힌트가 있는 경우
def greet(name: str, age: int = 20) -> str:
    return f"Hello, {name}! You are {age} years old."

 

함수 시그니처에 타입힌트를 추가하자 name은 문자열이여야 하고, age는 정수여야하며, 최종적으로 반환되는 값은 문자열이라는 사실을 한 눈에 알 수 있습니다. 

 

파이썬에서 함수 시그니처 확인하는 방법

파이썬의 표준 라이브러리인 inspect 모듈을 사용하면 함수의 시그니처를 프로그램적으로 확인할 수 있습니다. inspect 모듈은 파이썬 객체의 내부 정보를 조회하는 데 사용되는 강력한 도구입니다.

inspect.signature() 함수는 매개 변수와 반환 값에 대한 정보를 담고 있는 Signature 객체를 반환합니다. 이를 통해 함수 시그니처의 각 부분을 프로그래밍 방식으로 쉽게 접근하고 활용할 수 있습니다.

import inspect

def add(x: int, y: int = 0) -> int:
    """두 정수를 더하는 함수입니다."""
    return x + y

# inspect.signature()를 사용하여 함수의 시그니처를 확인합니다.
sig = inspect.signature(add)

print(sig)
# 결과: (x: int, y: int = 0) -> int

print(sig.parameters)
# 결과: OrderedDict([('x', <Parameter "x: int">), ('y', <Parameter "y: int = 0">)])

print(sig.return_annotation)
# 결과: <class 'int'>

 

마무리

함수 시그니처는 단순히 코드의 일부가 아니라 코드의 의도를 명확하게 드러내고, 실수를 줄이며 협업의 효율을 높여주는 핵심적인 도구입니다. 함수를 작성할 때 타입 힌트를 포함한 명확한 함수 시그니처를 사용해보시면 더 깔끔하고 유지보수가 쉬운 코드를 만드는 첫 걸음이 될 수 있을 것입니다.

반응형