파이썬의 일급함수(First class Function)에 대해서 정리해보았습니다.
일급객체
프로그래밍 언어에서 일급객체(First class Object)란 아래의 조건을 만족하는 객체를 의미합니다.
- 변수에 할당할 수 있습니다.
- 함수의 인자로 전달할 수 있습니다.
- 함수의 리턴값으로 사용할 수 있습니다.
- 자료구조에 담을 수 있습니다.
파이썬에서는 숫자, 문자열, 리스트, 딕셔너리 뿐만 아니라 함수도 위의 조건을 만족합니다.
그래서 파이썬의 함수는 일급객체, 그리고 함수를 제공하는 파이썬은 일급 함수를 지원하는 언어입니다.
1. 함수를 변수에 할당
# 함수정의
def factorial(n):
if n==1:
return 1
return n * factorial(n-1)
# 변수에 함수 할당
var_func = factorial
# 변수를 통한 함수 실행
print(var_func(10)) # 10! = 3628800
예제에서 factorial 함수는 var_func 변수에 그래도 할당되어 사용됩니다.
위와 같이 파이썬에서 함수는 객체처럼 변수에 저장할 수 있습니다.
2. 함수를 인자로 전달
def double_apply(func, n):
return func(func(n))
print(double_apply(factorial,3))# factorial(factorial(3)) = factorial(6) = 6! 720
예제는 함수를 인자로 전달해서 두 번 적용하는 고차함수입니다.
이처럼 파이썬에서는 함수를 함수의 인자로 넘길 수 있습니다.
3. 함수를 리턴값으로 사용
def make_logger(func):
def wrapper(n):
print(f"Calling {func.__name__}({n})")
return func(n)
return wrapper
logged_factorial = make_logger(factorial)
print(logged_factorial(4))
# Calling factorial(4)
# 24
위의 예제에서는 함수를 감싸는 wrapper함수를 반환하여 새 동작을 추가합니다.
위의 구조는 데코레이터의 핵심이기도 합니다.
4. 함수를 자료구조에 담을 수 있음
funcs = [abs, factorial, lambda x: x + 10]
for f in funcs:
print(f(5))
# abs(5) = 5
# factorial(5) = 120
# 5+10 = 15
위의 예제에서 funcs라는 list에 abs, factorial, lambda 함수를 담고 루프문을 통해 함수를 실행합니다.
위의 예제와 같이 파이썬에서는 자료구조에 함수를 담을 수 있습니다.
정리
이번 글에서는 파이썬의 factorial 함수를 예제로 사용하여 일급 함수의 개념과 특징을 정리해보았습니다.
파이썬에서 함수는 변수에 할당할 수 있고, 인자로 전달하거나 반환값으로 사용할 수 있으며,
심지어 자료구조에 담을 수도 있는 완전한 일급 객체입니다.
이러한 특징 덕분에 파이썬은 함수를 유연하고 강력하게 활용할 수 있는 프로그래밍 언어이며,
데코레이터, 클로저, 고차 함수와 같은 다양한 함수형 프로그래밍 기법을 자연스럽게 적용할 수 있습니다.
'Programming > Python' 카테고리의 다른 글
[Python] 코루틴(Coroutine) 이해하기 (13) | 2025.06.19 |
---|---|
[Python] 클로저 (Closure) (0) | 2025.06.17 |
[Python] Generator에 대한 이해 (0) | 2025.06.16 |
[Python] 매직메소드 (2) | 2025.06.15 |
[Python] 클래스 변수, 인스턴수 변수와 메소드 차이 정리 (0) | 2025.06.10 |