코딩을 지탱하는 기술

제가 봤던 책들 중에 가장 사진이 이상하게 찍히는 책입니다. 실제로 보면 적당히 윤기있고 짙은 초록색과 차분한 금색이 섞여서 고급스러운데, 사진으로 찍어놓은 모든 이미지들이 이모양입니다. 눈으로 보는 느낌을 담은 책 사진이 단 한장도 없습니다.

학부생때 듣는 프로그래밍 언어론 수업을 교양서로 써낸 것 같은 느낌입니다. 그렇다고 깊이가 없는 책은 아니라서, 초심자부터 전공자까지 아무나 읽어도 얻을 것이 있습니다.

저는 제목에 적은 것처럼, 클로저Closure와 믹스인Mixin의 어원을 찾았습니다. 프로그래밍 언어론을 수강했음에도 불구하고, 도대체 왜 저런 이름인지 알지 못했는데 드디어 알게됐습니다. 요새 타입스크립트를 하면서 클로저를 유용하게 쓰고 있습니다.

책에서 설명하는 클로저의 어원은 다음과 같습니다.

왜 클로저라고 부를까?

클로저(closure)라는 명칭에서 무언가를 닫는다는 느낌이 든다. 왜 클로저라고 부르는 걸까? 어떤 standard ML 학습서에는 다음과 같이 써있다.

*"왜 이것을 클로저라고 부를까? 그것은 자유 변수를 포함한 식을 '열린 식'이라고 부르고, 그 자유 변수의 바인딩을 조합함으로 해당 식을 닫고 있기 때문이다." *
  - Ake Wikstorm, Functional programing using standard ML, Prentice-Hall, 1987.

앞의 코드로 설명하자면, 함수 push는 변수 count를 참조하지만 이것은 함수 push 안에 정의되어 있지 않다. 이런 변수를 자유 변수라고 한다. 함수 push는 자유 변수를 포함하고 있기 때문에 열린 함수다. 그리고 함수 makeCounter 대응표에서는 0이라는 값과 count라는 이름이 연결되어 있다. 값에 이름을 연결하는 것을 '바인딩'이라고 한다. 열린 함수 pushmakeCounter 대응표와 세트가 됨으로, 더 이상 그 이외의 스코프에 변수 정의를 찾으러 가지 않아도 되는 완결된 상태가 된다. 이것을 '닫았다'라고 표햔한다.

믹스인은 훨씬 더 귀여운 어원을 가지고 있습니다.

해결책 3: 처리를 섞는다.

어떤 클래스는 선조 클래스까지 도달하는 경로가 여러 개 있는 것이 문제다. 그렇다면 재사용하고 싶은 기능만을 모은 작은 클래스를 만들어서 해당 기능을 추가하고 싶은 클래스에 섞어 넣으면 된다. 이런 설계 방침이나 섞어 넣는 것, 그리고 섞기 위한 작은 클래스를 믹스-인(Mix-in)이라고 부른다. Mix-in이란 용어의 기원은 C++의 설계자인 Bjarne Stroustrup에 의하면 'MIT 근처에 있는 아이스크림 집에서 땅콩이나 건포도를 아이스크림에 섞어서 주는 것'에서 왔다고 한다.

마름모 상속에서 믹스-인으로

사실 저자가 이 책을 쓴 목적은 어원보다도 ''에 대한 답을 알려주기 위함입니다. 보통 당연시하는 ifwhile, for 혹은 class등이 왜 그런 형태를 갖게 됐는지 여러 언어들을 통사적으로 분석하면서 이유를 찾습니다. 저는 프로그래밍 언어론 수업을 리마인드 하는 느낌으로 봤는데, 수준과 관계없이 얻어갈 것들이 분명 있는 책입니다. 뒷 부분의 운영체제와 병렬 프로그래밍 부분은 꽤 깊이가 있습니다. 원래 어려운 주제라서 그런 것일까요.