멀티패러다임 프로그래밍

“한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬받아 작성된 서평입니다.”

멀티패러다임? 갑작스럽게 책 제목으로 접한 용어다. 처음에는 뭘 말하는지 몰라 책을 읽기 시작했을 때에는 그냥 자바스크립트, 타입스크립트 언어 활용서라고 착각이 될 정도였다. 그런데 저 언어를 중심으로 설명을 한 건 단순히 접하기 쉽고 설명에 적합하기 때문이라는 걸 읽어나가면서 이해하게 됐다.

더욱이 이게 아주 진귀한 뭔가가 아니라 사실상 내가 지금까지 작업해왔던 걸 좀 더 명징하게 표현해주는 용어라는 생각이 들었다. 이게 무슨 뚱딴지 같은 소리일까? 주로 자바와 자바스크립트를 사용하고 있는 내게 멀티패러다임을 이미 하고 있다고? 생각해보면 처음 코딩을 배우고 시작할 때부터 멀티패러다임을 적용해오고 있었던 거였다. 다만 그 개념을 잘 적용하고 인지하고 썼다기보단 별 생각없이 이게 잘 작동하니까, 또는 메모리를 고려해서, 이게 보기 깔끔하니까라는 식으로 적용해왔던 거다.

대학에서 C/C++를 배우고 자바를 배웠다. 자바스크립트는 거의 독학으로 익혀왔고, 이제 막 타입스크립트를 배워보려고 워밍업하는 상황이다. C를 쓰다가 C++를 썼다고 객체지향적으로 내가 코드를 작성했나? 사실은 C 같은 C++를 사용했다. 자바로 처음 넘어왔을 때 진정한 객체지향적인 개발을 했을까? 글쎄올시다다. 과거의 자바 스타일에서 현재 자바 스타일을 생각해보면 과거의 그 자바 스타일로 현재 코딩하고 있을까? 근래는 오히려 함수형으로 작성해보려고 가급적 Optional과 Stream을 활용하고 있다. 기본적으로 절차/명령/객체지향/함수형 그 뭐가 됐든 다 섞어서 코딩하는 중이다.

다시 말해, 나도 모르는 사이에 언어가 제공하는 기술들을 쓰다보면 자연스럽게 멀티패러다임을 적용해 코딩을 하고 있다는 거. 중요한 건 인지하고 이를 의도적으로 의식하고 개발하는 건 아니라는 점이다. 상황에 맞게, 또는 내 변덕으로 이들을 섞어 쓰고 있다. 요즘은 목적에 맞는 걸 사용하려고 애쓰는 상황이긴 하지만.

그렇다면 이 책이 나에게 주는 가치는 무엇일까? 솔직히 기본적으로 목적하는 바에 비해 코드량이 많으면 무조건 버그가 숨어 있다고 생각한다. 그렇기에 가급적 명확하고 적은 양의 코드를 작성해보려고 쓰는 편인데, 이럴 때 기준으로 삼아야 할 게 생겼다. 그런데 그게 그 때 그 때 달라서 애를 먹는다. 그런데 이 책에서는 각 패러다임을 실무적으로 어떻게 적용할 수 있는 알려준다. 아마 체득하면 꽤 유용할 거라 생각한다.

아마도 1장이 가장 난해할 것이다. 가장 생각이 많아지고 책을 덮고 싶을지도 모를 정도로 혼란스러우면서도, 제일 시간을 많이 들여야 하는 구간이다. 아마 코딩하면서 깊게 생각 안 하고 막 쓰고 있었을지도 모르겠다. 그래서 다 아는(?) 내용을 왜 이렇게 구구절절 말하는 거지? 라는 생각이 들지도 모른다. 내 생각엔 그 반응은 정상이다. 그렇기에 그 이면에 숨은, 평소에는 궁금하지 않았던 이 내용을 이해하는 건 앞으로 책을 읽어나가거나, 읽고 난 후 코딩을 할 때 아마 무의식적으로 이걸 생각하면서 코드를 작성하게 될 게 뻔하다. 그만큼 파괴력 있는 기초 중의 기초다.

이게 슬 눈에 익으면 2장에서 현대 개발 언어에서 많이 보는 내용들이 등장한다. 특히 타입 추론, 제네릭 같은 건 빼고 싶어도 뺄 수 없는 핵심이다. 참고로 LISP를 대학 수업 때 배웠고, 과제도 간단하게나마 해봤던 기억이 있다. 가장 인상 깊은 설명은 시스템을 재컴파일과 중단 없이 도중에 정지하고 새로운 코드를 갈아 끼운 다음 정지한 지점부터 재개할 수 있다는 내용이었다. 자동차 렌더링 솔루션인데, 차를 모델링하고 주행시켜보다가 타이어 모델이 맘에 들지 않아 잠깐 중지하고 타이어 모델을 다른 것으로 갈아 끼운 다음, 중단된 순간부터 재개하면 전체 시스템을 중지하지 않고도 바뀐 타이어가 장착된 차가 움직이는 모습을 볼 수 있다고 교수님이 설명하셨다. 그게 얼마나 강렬하게 인상에 남았던지 30년이 지났어도 기억이 난다.

1, 2장에서 설명해온 내용을 기반으로 3장에서 심화 학습하는 느낌이다. 정말로 별 생각없이 사용하던 함수들을 여기서 그 내용을 속속들이 설명하면서 지연 평가 등을 적용한 내용을 알려준다. 아무래도 이해도가 올라갈 수밖에 없다. 끈질기게 설명을 해주니까 더 그렇다.

4장, 비동기를 다루는데, 웹 프론트엔드 개발을 할 때 이해하지 않으면 제대로 할 수 없는 그런 내용을 다룬다. 이 배경지식이 없다면 SPA 같은 걸 이해하는 데 어려움이 있을 것 같다. (사실 그런 개념이 약했어도 얼추 수백 번의 에러를 겪다보면 막연하게나마 이해했을지도 모르겠다)

5, 6, 7장은 실무라고 생각하면 좋다. 실제 업무에 활용할만한 내용들이 많으므로 이건 한 번 읽고 넘길 게 아니라, 진짜 업무를 본다 생각하고 틈날 때마다 하나씩 꼼꼼히 이해해보는 게 좋을 거다. 실력 발전을 위해서라면 말이다. 그렇다고 이게 전부는 아니니, 가이드라인이나 연습문제 정도로 생각해보면 어떨까 싶다.

다시 거듭 말하지만, 별나라 얘기를 하는 게 아니다. 본인이 인지하고 있든 인지하지 않았든, 우리가 늘상 해왔던 내용들이다. 이 책은 그걸 좀 더 체계적이고 인식할 수 있게 잘 가다듬어 설명하고 있다. 비록 큰 관심이 없었던 몇 가지 언어가 중간에 튀어나와 당황스럽긴 했지만, 그마저도 잘 설명을 해주고 있어서 덜 부담스럽다. 오히려 흥미를 느꼈다면 추가로 해당 언어를 익히는 계기가 될지도 모르겠다.

멀티패러다임, 거창하게 느껴지나 거창하지 않다. 우리는 이미 해오고 있던 것이니까.