일급 객체 그리고 익명 함수? 람다?

1 minute read

여러분들은 익명 함수란 용어는 많이 들어봤을 것입니다.
프로그래밍 언어에서 언급되는 일급 객체(First-class citizen)에 익명 함수가 포함되어 있습니다. 즉 익명 함수가 일급 개체인 샘이죠.
그렇다면 일급 객체는 무엇이고 익명 함수는 뭘까요? 어떤 관계가 있고 어떻게 설명할 수 있을까요? 사실 자주 사용하는 용어지만 명확하게 설명하기란 참 어려운 게 사실입니다. 프로그래밍을 하는 개발자 입장에서는 이해하고 있지만 명확히 설명하기가 좀 어려운 경우도 많고요. 그래서 이번 포스트에서는 Javascript 프로그래밍에서 사용되는 익명 함수를 이용해 몇 가지 중요한 개념을 간단하게 소개할까 합니다.



일급 객체란? (First-class citizen)

  • 함수의 인자로 넘겨받을 수 있는 객체.
  • 함수의 결과값으로 반환할 수 있는 객체.
  • 변수에 값을 할당할 수 있는 객체.


익명 함수란?

  • 익명 함수는 람다 대수로부터 영향을 받아 만들어진 함수 표현 방식이다.
  • 대부분의 프로그래밍 언어가 익명 함수를 지원한다.
  • 각 프로그래밍 언어에서 표현방법은 다르나 공통적으로 일급객체에 속한다.


프로그래밍 언어에서 익명 함수는 애초에 다른 함수에 인자로 넘기거나 함수의 결과값으로 반환할 용도로 만들어지기 때문에 위와 같은 특징을 갖고 있고 언어마다 표현 방법은 각각 다르겠지만 공통적으로 일급 객체라는 공통 특징을 가지고 있습니다.

추가로 익명 함수를 설명할 때 보통 람다라는 용어를 사용하기도 합니다. 람다? 람다란 뭘까요? 람다의 근간은 수학과 기초 컴퓨터과학 분약에서의 람다 대수를 나타냅니다. 람다 대수를 간단히 말하자면 수학에서 사용하는 함수를 보다 단순하게 표한하는 방법을 말하며 이러한 람다 대수에는 몇가지 특징이 있습니다.

  • 람다 대수는 이름을 가질 필요가 없다 (익명 함수)
  • 2개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 단순화될 수 있다.
  • 람다식은 사용하는 변수의 종류에 따라 닫힌 람다식, 열린 람다식 으로 나눌 수 있다.
  • 람다 표현식에서 사용하는 변수들이 모두 묶인 변수일 때 닫힌 람다식이라 부른다.
  • 람다 표현식에서 하나라도 자유변수가 있을 때 열린 람다식이라고 부른다.


Javascript 에서의 익명 함수? 람다?
Javascript의 모든 함수는 일급 객체입니다. 그리고 Javascript에서는 익명 함수로 사용된다면 람다라고 볼 수 있죠. 어디서 많이 사용될까요? 지금까지 명확한 개념을 모르고 사용했을 수도 있겠지만 우린 익명 함수를 많이 사용해 왔습니다. 정답은 바로 콜백 함수입니다. 우리가 가장 흔하게 사용하고 있고 많이 봐왔던 콜백이라 불리는 콜백 함수가 대표적인 익명 함수의 예입니다. 보통 콜백을 Named Function으로 넘기지 않고 대부분 일회용 함수를 넘기기 위해 익명 함수를 사용합니다. 그리고 여러분이 잘 알고 있는 클로저 또한 익명 함수를 사용합니다.

람다와 클로저

  • 클로저는 람다에서 파생된 개념이다.
  • 클로저는 열린 람다식을 닫힌 람다식으로 만든다.
  • 클로저는 람다식내의 모든 자유 변수를 Scope 내로 가져와 묶기 때문에 만들어진 환경을 기억한다.


사실 지금까지 우린 빈번하게 익명 함수, 클로저를 이용한 프로그래밍을 해왔습니다. 람다나 익명 함수에 대한 개념을 정확히 모르는 상태에서도 프로그래밍을 하는데 전혀 지장이 없는 게 사실입니다. 무조건 개념과 관계를 명확히 인지하고 사용해야 한다는 강제성은 어디에도 없으니까요. 단지 더 나은 프로그래밍 그리고 개발자가 되기 위한 요소일 뿐이죠.

Tags:

Categories:

Updated:

 

 

Leave a comment