타입은 개발자에게 친숙하면서도 어색할 수 있는 개념이다. 특히 정적 타입 언어를 사용한다면 타입은 땔래야 땔 수 없는 존재다. 타입은 가끔씩 귀찮게 굴 때도 있지만 개발자에게 막강한 무기가 될 수 있다. 타입은 함수와 데이터가 준수해야 하는 엄격한 계약이며 타입 시스템은 이를 어길 수 없게 만든다.
개발자는 타입 시스템 잘 활용하여 더 안정적인 프로그램을 만들거나 코드 중복을 제거하는 것이 가능하다. 반대로 개발자가 타입을 풍부하게 사용하지 않는다면 타입 시스템을 통해 얻을 수 있는 이점을 제대로 누릴 수 없다. 이 글에서 소개하는 타입 주도 개발
은 타입 시스템에 대해 공부하기 좋은 방법론이며 이를 통해 로직에 대한 새로운 관점을 익힐 수 있다.
🚨 참고로 타입 주도 개발은 대중적이지 않기에 뚜렷하게 어떻게 해야한다고 정해져 있지 않다. 따지자면 타입 주도 개발은 타입이라는 계약을 통해 로직을 설계하고 책임과 역할을 분명하게 정의한다는 점에서 계약에 의한 설계와 비슷하다.
다만, 타입 시스템이 정교하지 않은 언어를 주력으로 사용한다면 의미가 없는 허상이라 생각할 수 있다. 그렇지만 최근 몇 년 동안 함수형 기반 언어의 개념이 널리 퍼졌고 타입을 잘 다루기 위한 논의도 충분히 깊어졌기에 시도해볼 수 있는 방법론이 됐다고 생각한다. 따라서 이 글에서는 필자 나름대로 타입을 중심으로 사고하는 방법을 소개할 것이다.