First-class Function(일급 함수)
- 함수를
First-class Citizen
으로 취급하는 언어
- 파이썬 함수 특징
런타임 초기화
- 함수를
변수
에다 할당 가능
- 함수를 다른 함수의
인자
로 전달 가능
- 함수를 결과로
반환
가능(return)
-> 파이썬은 위의 것들이 가능하므로 함수형 프로그래밍
가능
Higher-order function(고위 함수)
map
, filter
, reduce
, lambda
- callable
- partial
Code 1
Closure(클로저)
- scope가 닫혀도 값을
기억(remember)
한다.
- 서버 프로그래밍은 동시성(concurrency) 제어 -> 메모리 공간에 여러 자원이 접근 -> DeadLock이 발생
- 이를 해결하기 위해
- 메모리를 공유하지 않고 메시지 전달로 처리하기 위한 ->
Erlang
Closure
는 메모리는 공유하되 변경되지 않는(Immutable
, read only
구조를 적극적으로 사용 -> 함수형 프로그래밍
Closure
는 불변 자료구조 및 atom, STM
- 멀티 스레드 프로그래밍에 강점
- Coroutine을 통해 단일 스레드에서도 병행성 가능
Code 2
- '외부에서 호출된' 함수의 변수 값, 상태(주소) 복사 후 저장
- 전역변수(global)을 사용하는 경우 유지 보수가 어려울 수 있는데, 이런 식으로 Closure를 사용하면 문제를 해결할 수 있다.
Code 3
Decorator(데코레이터)
- 장점
- 중복 제거, 코드 간결, 공통 함수 작성
- 로깅, 프레임워크, 유효성 체크... 등 가능 -> 공통 기능
- 조합해서 사용 용이
- 단점
- 가독성 감소
- 특정 기능에 한정된 함수는 -> 단일 함수로 작성하는 것이 유리
- 디버깅 불편
- 예를 들어 함수의 실행 시간을 구하는 기능 ->
- 어떤 함수든 공통적으로 실행 시간을 뽑을 수 있다 -> 다른 함수를 장식해줄 수 있다.(데코레이터)
Code 4