[책] ⟨코딩을 지탱하는 기술⟩, 클로저Closure, 믹스인Mixin의 어원
2019 / 04 / 29
제가 봤던 책들 중에 가장 사진이 이상하게 찍히는 책입니다. 실제로 보면 적당히 윤기있고 짙은 초록색과 차분한 금색이 섞여서 고급스러운데, 사진으로 찍어놓은 모든 이미지들이 이모양입니다. 눈으로 보는 느낌을 담은 책 사진이 단 한장도 없습니다.
학부생때 듣는 프로그래밍 언어론 수업을 교양서로 써낸 것 같은 느낌입니다. 그렇다고 깊이가 없는 책은 아니라서, 초심자부터 전공자까지 아무나 읽어도 얻을 것이 있습니다.
저는 제목에 적은 것처럼, 클로저Closure와 믹스인Mixin의 어원을 찾았습니다. 프로그래밍 언어론을 수강했음에도 불구하고, 도대체 왜 저런 이름인지 알지 못했는데 드디어 알게됐습니다. 요새 타입스크립트를 하면서 클로저를 유용하게 쓰고 있습니다.
책에서 설명하는 클로저의 어원은 다음과 같습니다.
클로저(closure)라는 명칭에서 무언가를 닫는다는 느낌이 든다. 왜 클로저라고 부르는 걸까? 어떤 standard ML 학습서에는 다음과 같이 써있다.
*"왜 이것을 클로저라고 부를까? 그것은 자유 변수를 포함한 식을 '열린 식'이라고 부르고, 그 자유 변수의 바인딩을 조합함으로 해당 식을 닫고 있기 때문이다." *
- Ake Wikstorm, Functional programing using standard ML, Prentice-Hall, 1987.앞의 코드로 설명하자면, 함수
push
는 변수count
를 참조하지만 이것은 함수push
안에 정의되어 있지 않다. 이런 변수를 자유 변수라고 한다. 함수push
는 자유 변수를 포함하고 있기 때문에 열린 함수다. 그리고 함수makeCounter
대응표에서는 0이라는 값과count
라는 이름이 연결되어 있다. 값에 이름을 연결하는 것을 '바인딩'이라고 한다. 열린 함수push
가makeCounter
대응표와 세트가 됨으로, 더 이상 그 이외의 스코프에 변수 정의를 찾으러 가지 않아도 되는 완결된 상태가 된다. 이것을 '닫았다'라고 표현한다.
- ⟨코딩을 지탱하는 기술⟩ 208쪽.
믹스인은 훨씬 더 귀여운 어원을 가지고 있습니다.
어떤 클래스는 선조 클래스까지 도달하는 경로가 여러 개 있는 것이 문제다. 그렇다면 재사용하고 싶은 기능만을 모은 작은 클래스를 만들어서 해당 기능을 추가하고 싶은 클래스에 섞어 넣으면 된다. 이런 설계 방침이나 섞어 넣는 것, 그리고 섞기 위한 작은 클래스를 믹스-인(Mix-in)이라고 부른다. Mix-in이란 용어의 기원은 C++의 설계자인 Bjarne Stroustrup에 의하면 'MIT 근처에 있는 아이스크림 집에서 땅콩이나 건포도를 아이스크림에 섞어서 주는 것'에서 왔다고 한다.
- ⟨코딩을 지탱하는 기술⟩ 231쪽.
사실 저자가 이 책을 쓴 목적은 어원보다도 '왜'에 대한 답을 알려주기 위함입니다. 보통 당연시하는 if
나 while
, for
혹은 class
등이 왜 그런 형태를 갖게 됐는지 여러 언어들을 통사적으로 분석하면서 이유를 찾습니다. 저는 프로그래밍 언어론 수업을 리마인드 하는 느낌으로 봤는데, 수준과 관계없이 얻어갈 것들이 분명 있는 책입니다. 뒷 부분의 운영체제와 병렬 프로그래밍 부분은 꽤 깊이가 있습니다. 원래 어려운 주제라서 그런 것일까요.