카테고리 없음2014. 11. 4. 08:40

함수형 프로그래밍 언저리에서 떠돌다 보면 일급 함수, 일급 시민, 일급 값(first-class function, first-class citizen, first-class value)이라는 단어가 자주 튀어나온다.

 

먼저 위에 세 단어는 비슷한 내용을 의미한다. 어떤 언어에서 함수가 일급 시민 일 때, 일급 함수라고 한다. 함수를 값으로 간주해서 인자로 넘기거나 할 수 있을 때 일급 값이라고 부른다. 


 정의가 항상 궁금했는데, 찾아 보던 와중에 쓸만한 레퍼런스(http://blog.doortts.com/m/post/135)가 있어서 조금 더 들여보기로 한다.


위의 블로그에서는 아래와 같이 일급을 정의한다.

어떤 객체(일반명사)가 있을때 다음 조건을 만족하면 일급 객체로 간주한다. 


1. 변수나 데이터 구조안에 담을 수 있다. 

2. 파라미터로 전달 할 수 있다. 

3. 반환값(return value)으로 사용할 수 있다.

4. 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.


이 내용은 처음 크리스토퍼가 정의한 것은 아니지만, SICP(http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-12.html#call_footnote_Temp_121)에서 정의 했다.


뭐 이렇게 따지면 복잡한데, 다른 값 처럼 넘길 수 있는가를 기준으로 판단 하면 쉽다. 각 언어별로 아래 링크에서 확인하면 된다. http://stackoverflow.com/questions/5178068/what-is-a-first-class-citizen-function


Java는 Java8에 와서 method reference를 통해서 함수가 first-class citizen이 되었다. 예는 아래와 같다.


File[] hiddenFiles = new File(".").listFiles(File::isHidden);


자세한 내용은 https://www.youtube.com/watch?v=gDTzlfjMe98#t=662 의 동영상을 참고 하자.





Posted by Arnold Arnny

댓글을 달아 주세요