“개발자 여러분, 좋아하시나요? 버그 밟는 소리를.”

한때 가을이 되면 상투적으로 인용되던 레미 드 구르몽의 시 「낙엽」의 한 구절(“시몬, 너는 좋으냐? 낙엽 밟는 소리가.”)을 패러디해 보았습니다.
프로그래밍이 시작된 이후로 버그는 고질병이자 박멸 불가능해 보이는 벌레처럼 여겨졌습니다.

그레이스 호퍼가 발견한 버그: 이런 버그만 있다면 적어도 컴퓨터 안에서는 살충제로 박멸할 수 있겠습니다만….

버그를 잡기 위해 직접적으로는 디버거가 개발되어 왔고 한편으로는 버그가 발생하지 않도록 사전에 취할 수 있는 전략도 고안되었습니다. 넓은 맥락에서는 테스트 주도 개발 역시 이에 해당한다고 볼 수 있습니다. 짧은 보폭으로 테스트를 촘촘히 작성하면서 ‘빨간불-초록불-리팩터링’ 주기를 반복해 나가다 보면 탄탄한 코드를 작성할 수 있게 됩니다.
한편 프로그래밍 언어 수준에서는 좀 더 견고한 프로그래밍을 위한 타입과 타입 검사 등이 오래전부터 연구되고 있었습니다. 한 예로 최근 주목받는 러스트에 적용된 선형 타입의 이론적 기반은 1980년대부터 마련되기 시작했습니다. 이처럼 수십 년의 연구와 현실 세계 적용을 거쳐 오늘날에는 컴파일러의 ‘불평’을 귀 기울여 듣는다면 상당한 수준으로 버그를 걸러 낼 수 있는 시대가 되었습니다.
타입과 타입 검사의 효용은 버그를 잡는 데만 있지 않습니다. 우화(?)를 하나 소개해 보려고 합니다.

큐리 박사: 어이, 처르지, 내가 만든 기계 구경할래?
처르지: 와, 이 엄청난 건 뭐야?
큐리 박사: 하하, 이 몸의 위대한 발명품 ‘완전자동카레조리기계’지. 아무 사람이나 와서 자신의 정보를 입력하면, 그 사람에게 가장 잘 맞는 재료 배합을 선정해서 카레를 만들어 준다고. 저 앞 학교에서 급식 시간에 사용하겠다며 만들어 달라고 했어.
처르지: 이야, 대단한 걸?
…중략…
며칠 후
큐리 박사: 처르지, 큰일이야. 오늘 아침에 내 ‘완전자동카레조리기계’를 완성하고 나서 그 소식을 전하러 학교에 갔거든. 근데 학교에서 원한 건 각 사람에게 적합한 음식을 만들어 주는 기계였대. …중략… 어떡하지? 기계를 처음부터 다시 만들어야 할까?
처르지: 그건 아니지 않을까? 카레는 음식이잖아. 각 사람에게 적합한 카레를 만들어 주는 기계라면, 그 기계가 각 사람에게 적합한 음식을 만들어 준다고 말해도 틀린 건 아니지 않을까? 최소한 기계에서 음식이 아닌 게 나오지는 않잖아. 그냥 조용히 하고 학교에 네 기계를 갖다 줘.
…중략…
며칠 후
처르지: 큐리, 오늘은 얼굴에 근심이 가득하네. 어떻게 된 거야?
큐리 박사: 내가 오늘 아침에 ‘건강쑥쑥완전자동카레조리기계’를 완성했거든. 근데 내가 또 학교에서 원하는 걸 잘못 알아들었나 봐. …중략… 학교에서는 영양제를 학생들한테만 먹일 생각이었나 봐. …중략…
처르지: 잠깐 기다려 봐. 네 ‘건강쑥쑥완전자동카레조리기계’는 각 사람에게 적합한 카레를 만들어 주는 기계잖아. 근데 어차피 학생은 사람이야. …중략… 그러니 각 사람에게 적합한 카레를 만들어주는 기계가 각 학생에게 적합한 카레를 만들어 준다고 말해도 틀린 게 아니야. 그러니까 이번에도 그냥 조용히 하고 기계를 학교에 갖다 줘.

잠시 후 소개할 책에 실린 이야기의 한 토막입니다. 무엇을 비유하는지 눈치챈 분들도 있을 것 같습니다. 이 이야기에서 큐리 박사는 위기(?)를 무사히 넘겼는데요. 다소 과장되기는 했습니다만 프로그래밍 언어 차원에서 타입을 어떻게 구성하고 사용하는지가 문제 해결에 영향을 미칠 수 있다는 비유로 이해하면 좋을 듯합니다.
타입과 타입 검사는 유용하지만 한편으로 꽤 어렵고 까다롭습니다. 특히 정적 타입 언어에서는 더욱 그렇죠. 웹 2.0 시기에 동적 타입 언어가 각광받았던 것도 이러한 까다로움과 무관하지는 않을 겁니다.
그런데 타입의 장점을 살리면서도 유연하게 쓸 수 있는 기능 역시 마련되어 있습니다. 바로 다형성입니다. 지금껏 잘 다루지 않은 내용을 설명하려다 보니 글이 길어졌습니다. 이번에 소개할 책 《타입으로 견고하게 다형성으로 유연하게》는 머나먼 이론 세계의 것으로 여겨지던 타입과 타입 검사를 다형성을 이용해 현실 세계로 끌어오는 내용을 앞서 소개한 기묘한(?) 이야기와 함께 풀어 나가고 있습니다.
큐리 박사와 처르지의 해프닝을 읽으며 타입과 타입 검사, 다형성이 어떤 고민과 문제의식 아래에서 고안되었는지 이해하고 딱딱하기만 한 개념이 현실 세계에서 어떻게 적용되고 있는지 주요 언어별 사례를 살펴보면서 낯설게만 느껴지던 프로그래밍 영역을 탐험해 보는 계기가 될 수 있으리라 생각합니다.
이 책 읽고 타입과 다형성 한 번 써 보시겠어요?

다음 인터넷 서점에서 주문하실 수 있습니다.
교보문고 | 알라딘 | 예스24 | 영풍문고