Python에서 함수는 일급 객체(first-class citizen)로, 다른 함수의 인자로 넘기거나 반환값으로 활용할 수 있습니다. 이때 함수 타입을 명시적으로 지정하고 싶다면 typing 모듈의 Callable 타입힌팅을 사용할 수 있습니다.
이번 글에서는 Callable의 기본적인 사용법부터, 여러 인자를 받는 경우, 그리고 반환 타입을 또 다른 Callable로 지정하는 방법까지 예제를 통해 살펴보겠습니다.
기본 타입 지정
가장 간단한 형태는 하나의 인자를 받고 특정 타입을 반환하는 함수를 정의할 때입니다.
from typing import Callable
# int → str 함수 타입을 인자로 받음
def apply_func(x: int, func: Callable[[int], str]) -> str:
return func(x)
# 사용 예시
result = apply_func(5, lambda n: f"Number: {n}")
print(result) # 출력: "Number: 5"
위 예제에서 func의 타입은 Callable[[int], str] 입니다. 즉, int를 입력받아 str을 반환하는 함수만 인자로 전달할 수 있습니다.
여러 인자 타입 지정
Callable은 여러 개의 인자를 받는 함수 타입도 정의할 수 있습니다. 인자의 타입을 리스트 형식으로 차례대로 나열하면 됩니다.
from typing import Callable
# (int, int) → float 함수 타입
def operate(a: int, b: int, op: Callable[[int, int], float]) -> float:
return op(a, b)
# 사용 예시
print(operate(10, 3, lambda x, y: x / y)) # 3.333...
print(operate(10, 3, lambda x, y: x * y)) # 30.0
이 경우 operate는 두 개의 int를 입력받아 float을 반환하는 함수여야 합니다.
반환 타입이 또 다른 Callable인 경우
조금 더 고급 예제로, 함수가 또 다른 함수를 반환하는 경우를 타입힌팅으로 표현할 수도 있습니다.
from typing import Callable
# int를 받아 Callable[[str], str]을 반환하는 함수 타입
def make_repeater(n: int) -> Callable[[str], str]:
def repeater(text: str) -> str:
return text * n
return repeater
# 사용 예시
repeat_three = make_repeater(3)
print(repeat_three("Hi")) # 출력: "HiHiHi"
여기서 make_repeater의 반환 타입은 Callable[[str], str]입니다. 즉, 문자열을 받아 문자열을 반환하는 함수를 리턴한다는 의미입니다.
정리
- Callable은 호출 가능한 객체(함수, 람다, functor 등) 의 타입을 정의할 때 사용
- 기본 형태: Callable[[ArgType1, ArgType2, ...], ReturnType]
- 인자가 여러 개일 경우 리스트로 나열
- 반환 타입도 Callable로 지정 가능 → 고차 함수(higher-order function) 표현에 유용
타입힌팅을 활용하면 함수형 프로그래밍 패턴에서 코드의 가독성과 안정성을 높일 수 있습니다.
'파이썬 > 타입 힌트' 카테고리의 다른 글
| Python 타입힌트: Final로 상수 정의하기 (0) | 2025.09.10 |
|---|---|
| Python 타입힌트: 클래스 내부에서 자기 자신 참조하기 (0) | 2025.09.10 |
| Python 타입힌트: Optional 타입 활용법 (0) | 2025.09.10 |
| Python 타입힌트: Union 타입 활용법 (0) | 2025.09.10 |
| Python 타입힌트: 클래스 타입 활용법 (0) | 2025.09.10 |