아무것도 몰라도 타입 검사를 그냥 '사용'할 수는 있다. 하지만 타입 검사를 제대로 '활용'하는 것은 전혀 다른 문제다.

왜 타입이 중요한가?

아무래도 타입은 프로그래밍을 할 때 가장 많이 고려하는 요소라고 할 수 있다. 우리는 프로그래밍 언어가 제공하는 문법을 통해 입력 데이터를 원하는 결과로 만들어 나간다. 이를 극도로 추상화하면 입력 -> 출력이라고 볼 수 있다. 세세하게 바라보면 결국 최종 목적지를 위한 입출력의 연속이라 볼 수 있다. 이 과정에서 데이터의 타입은 계속 바뀐다. 이는 로직마다 관심사1가 달라지기 때문이다. 즉, 입력에서 출력까지의 데이터 흐름에 타입 변화는 항상 따라다니는 짝궁 같은 것이다.

로직은 입출력의 연속

이 책에서 언급한 것처럼 파이썬이나 자바스크립트와 같은 언어를 사용한다면 타입 검사가 매우 귀찮게 느껴질 수 있지만 개발자에게 막강한 무기가 될 수도 있다. 타입은 함수와 데이터가 준수해야 하는 엄격한 계약이며 타입 시스템은 이를 어길 수 없게 만든다. 까놓고 이야기하면 개발자는 생각보다 실수를 많이 한다. 처음엔 타입 검사가 귀찮고 오히려 생산성만 떨어뜨린다고 느낄 수 있지만, 되돌아가는게 더 빠를 수 있다고 실수를 바로잡는 시간일 생각하면 타입 검사를 하는게 오히려 생산성을 높다고 볼 수 있다.2

일단 개발을 해봤다면 누구나 읽을 수 있는 책

필자도 사실 타입에 대한 이야기를 Type-Driven Development 포스팅을 통해 한 번 다룬적이 있다. 이 글을 쓰던 당시에는 이 책을 읽지 않은 상태였지만, 만약 읽었다면 더 잘 쓸 수 있지 않았을까 싶다. 그만큼 이 책은 타입에 대한 이야기를 쉽게 설명하면서 깊이 있는 내용을 다루고 있다. 그리고 특히 일러스트가 이해하기에 아주 찰떡이다. 이것만 봐도 신경을 많이 쓴 좋은 책이라 생각한다.

씨줄과 날줄

타입 시스템이 왜 필요한가를 생각하면 씨줄과 날줄이라는 표현은 아주 적절하다. 타입 시스템의 본분은 개발자가 만드는 프로그램을 안전하게 만드는 것이다. 마치 직조하여 씨줄과 날줄을 꼼꼼하게 짜서 튼튼한 천을 만드는 것 처럼, 촘촘한 타입 시스템을 통해 안전한 프로그램을 만들 수 있다. 물론 서두에 쓴 것처럼 그냥 '사용'하는 것과 '활용'하는 것은 다르다. 그래서 타입 시스템이 어떻게 동작하는지, 무엇을 제공하는지 잘알고 사용하는 것이 중요하다.

마치며

이 책은 개발을 업으로 삼고있다면 한 번쯤은 읽어보면 좋은 책이라고 생각한다. 너무 어렵지도 않으며 읽기 좋게 구성되어 있어 술술 읽을 수 있다. 어떻게보면 기존 타입과 관련된 서적은 함수형과 연관되어 있거나 너무 깊은 내용을 다루는 경우가 많은데, 이 책은 그런 측면에서 좀 더 가볍게 읽을 수 있는 책이라고 생각한다.

Footnotes

  1. 여기선 함수나 클래스가 맡은 역할을 말한다

  2. 빌드 타임 이야기는 반칙이니까 생략하자