[python] - First Class Function 와 closer

김기용·2020년 10월 25일
0

🤔 Fisrt Class Function

First Class Function은 프로그래밍 언어가 함수를 ⚡️first-class citizen(일급객체) 로 취급하는 것을 뜻합니다. 평소에 다루던 객체(숫자, 문자열 그리고 클래스)를 다루는것처럼 함수도 동일하게 취급하는것 이라고 생각하면 쉽다.

🕹 First Class Citizen(일급객체) 란?
1. 변수 또는 데이터구조에 할당할 수 있다.
2. 인자로써 다른 함수의 매개변수로 전달 가능하다.
3. 다른 함수의 리턴값으로 사용 될 수 있다.


🕹 i. 함수를 변수에 할당하고 인자로써 다른 함수의 매개변수로 전달해보자

fadd 함수주소의 반환값을 할당하고 addf 를 출력해보면 메모리 주소 값이 같다. 🤭

print(f(5,5))
코드를 입력해보면 이제 f가 add 함수처럼 
동작하는것을 확인할 수 있다.

🕹 First Class Function의 재사용성, DRY(Don't repeat yourself)


simple 함수를 이용해 간단하게 구현도 가능하지만, 만약 add, multiply, divide, 등 여러 함수가 존재할때 First Class Function 쓰게 된다면 미리 만들어진 코드를 ⚡️재사용가능하다는 장점이 있다.😎


🤔 closer

프로그래밍 언어에서의 클로저란 네임 바인딩 기술이다. 클로저는 어떤 함수를 함수 자신이 가지고 있는 환경과 함께 저장한 레코드이다. 또한 함수가 가진 프리변수(free variable)를 클로저가 만들어지는 당시의 값과 레퍼런스에 맵핑하여 주는 역할을 한다. 클로저는 일반 함수와는 다르게, 자신의 영역 밖에서 호출된 함수의 변수값과 레퍼런스를 복사하고 저장한 뒤, 이 캡처한 값들에 액세스할 수 있게 도와준다.

🕹 i. 내부 함수에서 외부 함수 변수 참조

1. return inner_ function  -> 출력되지 않음(함수의 주소만을 반환한다.)
2. return inner_function() -> 출력: hello (함수호출과 반환을 동시에)

⚡️message 변수는 inner_function 안에 선언이 되지 않았지만 outer_function 블럭 안에 inner_function 과 message 함께 선언됬기 때문에 inner 블럭 안에서도 참조가 가능합니다.


🕹 ii. 자신의 영역 밖에서 호출된 함수의 변수값

분명 outer_function 함수호출은 result 변수에 함수 주소를 할당해주고 끝났을텐데 이상하게도 print(result())를 해보면 outer_function의 로컬변수인 message를 참조를 하고 있습니다.

closer는 프리변수를 저장하고 이 값들에 대해 접근을 허용하게 해준다.

profile
매일 새로운 배움을 통해 꾸준히 성장하는 것을 목표를 두고 있습니다. 논리적인 사고로 문제해결 하는것에 희열을 느끼고 언젠가 제가 만든 결과물들이 사람들에게 편이를 제공하며 사용되는 날을 간절히 소망하고 있습니다. 🙏

0개의 댓글