Skip to content

Commit

Permalink
마무리 멘트 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
witch-factory committed Nov 6, 2024
1 parent b7d1274 commit 4de586c
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions content/javascript-closure-deep-dive-history/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -402,15 +402,15 @@ Date 클래스는 Java의 `java.util.Date`를 대충 가져온 거였고 `==`나

컴퓨터는 기계적으로 계산 가능한 것들의 구현을 위해 설계되었다. 그리고 람다 계산법은 연산 중심의 튜링 기계와 달리 함수를 이용해 기계적인 계산이라는 개념을 표현하는 방식 중 하나이다.

그리고 전혀 뜬금없어 보이는 인공지능 연구자들이 나타나 함수를 프로그래밍의 세계로 끌어들였다. Lisp를 만들었고, Algol을 만들었다. 그리고 Algol에서 뻗어나가 Simula나 Smalltalk같은 언어와 액터 모델을 만들었다. 이외에도 IPL, SASL, Prolog처럼 제대로 언급되지도 않은 언어 등등 수많은 시도와 실패가 있었다.
그리고 당시의 인공지능 연구자들이 나타나 함수를 프로그래밍의 세계로 끌어들였다. Lisp를 만들었고, Algol을 만들었다. 그리고 Algol에서 뻗어나가 Simula나 Smalltalk같은 언어와 액터 모델을 만들었다. 이외에도 IPL, SASL, Prolog처럼 제대로 언급되지도 않은 언어 등등 수많은 시도와 실패가 있었다.

그 과정에서 함수는 람다 계산법에서와 똑같은 "일급 객체" 그러니까 함수의 인수도 될 수 있고 함수의 결과로 반환될 수도 있는 지위로 끌어올려졌다. 또한 거기서 생긴 funarg problem을 해결하며 클로저를 만들어냈다.

액터 모델을 공부하던 인공지능 연구실 사람들은 Scheme을 만들며 클로저를 도입했고 이건 SICP라는 고전을 만들어냈다. 이는 클로저를 널리 퍼뜨렸고 JavaScript에도 영향을 주었다.

Java의 보조 언어로서 시작한 JavaScript는 멀티 패러다임 언어로 설계되었지만 급하게 만들어지느라 없는 게 많았다. 특히 객체지향을 지원할 수 있는 기능이 거의 없었다. 그래서 클래스, 모듈, 네임스페이스, 정보 은닉 등 객체지향적인 기능을 구현하기 위해 클로저가 많이 사용되었다.
Java의 보조 언어로서 시작한 JavaScript는 멀티 패러다임 언어로 설계되었지만 급하게 만들어지느라 없는 게 많았다. 특히 객체지향을 지원할 수 있는 기능이 거의 없었다. 그래서 클래스, 모듈, 네임스페이스, 정보 은닉 등 객체지향적인 기능을 구현하기 위해 클로저가 많이 사용되었다. 그렇게 클로저는 JavaScript에서 중요한 개념 중 하나로 자리 잡게 되었다.

그 과정에서 자연스럽게 다른 응용도 많이 생겨났고, JavaScript에서 매우 중요한 개념 중 하나로 떠오르게 되었다.
이제 끝이다. 클로저란 뭐였을까? 첫번째 글에서 이야기했듯 표현식과 표현식이 평가된 환경의 묶음이다. 하지만 그렇게 건조하게 끝내기에는 어쩐지 흘러간 이야기 속에 너무 많은 사람들의 노력이 묻어버린 느낌이다. 그러니까, 수학자들의 꿈에서 비롯한 기계적인 계산 가능성의 정의, 컴퓨터, 람다 계산법과 표현식, Lisp와 Algol과 함수형 프로그래밍과 거기서 생긴 표현식의 평가에 관한 문제와 그 깔끔한 해결에서 시작해 Scheme과 JavaScript까지 이어진 이 흐름이 남긴 커다란 흔적, 이걸 우리는 오늘날 클로저라 부른다.

# 부록

Expand Down

0 comments on commit 4de586c

Please sign in to comment.