반응형
안녕하세요
K-IN 입니다.
프로그래밍 언어를 배우다보면 컴퓨터 과학(Computer Science)에서 사용되는 용어들이 나오는 경우가 있습니다.
예를 들어, 아래와 같은 단어들이 주로 보입니다.
- First Class Functions
- First Class Citizens
- First Class Objects
우선 First Class Citizens 에 대해서 이해해야 나머지 용어들을 이해할 수 있습니다.
위키 피디아에서 제공하는 정의를 통해 핵심을 파악해 봅니다. (출처)
In a given programming language design, a first-class citizen[a] is an entity which supports all the operations generally available to other entities. These operations typically include being passed as an argument, returned from a function, and assigned to a variable.[1]
요약하면 First Class Citizen 이란 다른 엔티티들이 일반적으로 수행하는 모든 연산들을 지원하는 엔티티를 말합니다.
여기서 일반적으로 수행하는 모든 연산이란 아래의 연산들을 말합니다.
- First Class Citizen 엔티티는 인자로서 전달 가능 (being passed as argument)
- First Class Citizen 엔티티는 함수로부터 리턴이 가능 (being returned from a function)
- First Class Citizen 엔티티는 변수에 할당이 가능 (being assigned to a variable)
자 그렇다면, 여기에 First Class Functions 를 대입해서 각각의 의미를 파악해보겠습니다.
- 함수 엔티티가 인자로 전달이 가능
- 함수 엔티티가 함수로부터 리턴이 가능
- 함수 엔티티가 변수에 할당이 가능
우선, 클로저(Closure)의 개념을 통해 함수가 일급 시민에 해당하는지 확인할 수 있습니다.
대표적인 파이썬 코드를 보면서 이해할 수 있습니다.
- 클로저는 함수가 선언된 환경을 함께 기억하는 개념입니다. 즉, 함수 내부에서 함수를 선언하며 선언된 함수를 리턴이 가능합니다.
- 이 때 함수 내의 함수는 외부 함수의 변수에 접근할 수 있습니다.
- 즉, 파이썬에서 함수는 변수에 할당이 가능(3)하며, 함수로부터 리턴이 가능(2)한 특성을 만족합니다.
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
add_five = outer_function(5)
result = add_five(3) # 결과: 8
- 또한, 함수가 다른 함수에 인자로 전달이 가능한 특성 또한 아래의 예시를 통해서도 확인이 가능합니다.
def operation(x, y, func):
return func(x, y)
def add(x, y):
return x + y
def subtract(x, y):
return x - y
result = operation(5, 3, add)
print(result) # 출력: 8
result = operation(5, 3, subtract)
print(result) # 출력: 2
따라서, 파이썬 언어에서 함수는 일급 시민(First Class Citizens)에 속하며 First Class Functions 라고 부릅니다.
이처럼 일급 시민의 개념을 대입하여 프로그래밍 언어에서 특정 엔티티가 First Class 인지를 확인해 볼 수 있는 개념적 도구를 획득하셨습니다. 이를 활용하여 클로저, 람다함수 등의 개념을 잘 파악할 수 있습니다.
이상입니다.
K-IN 올림.
반응형
'프로그래밍' 카테고리의 다른 글
코드 리뷰 주의사항, 선언(Declaration)과 정의(Definition)의 차이점 (78) | 2024.02.27 |
---|---|
PHP 갑작스럽게 500 에러가 발생하였다면? - max_execution_time 설정 (111) | 2024.02.22 |
리눅스, Inotify Error 해결 방법 (2) | 2024.02.01 |
[vscode] Visual Studio Code 확장 프로그램 추천 - MySQL (대부분 DB 연결이 한번에 가능) 데이터 베이스 매니저 확장 프로그램! (0) | 2023.03.03 |
Memory Footprint 란? (1) | 2023.03.01 |