ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시작하며
    프로그래밍 언어 속 타입 2022. 5. 3. 14:52

     

    이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다.

     


     

    요즘 가장 인기 있는 프로그래밍 언어 둘을 꼽으라면 단연 파이썬Python과 자바스크립트JavaScript다. 체감상으로도 그렇고 스택 오버플로와 깃허브의 통계를 봐도 그렇다. 두 언어는 현역 개발자들이 많이 사용할 뿐 아니라, 여러 교육 기관의 프로그래밍 입문용 언어로도 가장 많이 선택된다. 아마 이 책의 독자들도 대부분 프로그래밍을 처음 배울 때 파이썬이나 자바스크립트로 시작했을 것이다.

    무슨 언어로 프로그래밍을 시작했든 그 언어만 계속 사용하는 경우는 드물다. 대개 다른 언어를 사용할 일이 생긴다. 시스템 프로그래밍 분야에는 여전히 전통의 강자인 C와 C++가 사용되며, 최근에는 러스트Rust도 가세했다. 한편 안드로이드 앱을 개발한다면 자바Java나 코틀린Kotlin을 사용하기 마련이다. 또, 학계를 비롯한 일부 분야에서는 스칼라Scala, 오캐멀OCaml, 하스켈Haskell 같은 함수형 언어가 널리 사용된다. 그러다 보니 새로운 언어를 익히고 사용하는 능력 역시 개발자의 중요한 소양 중 하나다.

    타입 검사type checking는 파이썬이나 자바스크립트로 프로그래밍을 시작한 사람이 다른 언어를 사용할 때 새롭게 접하게 되는 개념 중 하나다. 위에서 언급한 C, C++, 러스트, 자바, 코틀린, 스칼라, 오캐멀, 하스켈 모두가 타입 검사를 제공하는 언어다. 타입 검사를 한 마디로 표현하자면 “내가 작성한 프로그램을 실행해도 문제가 없는지 컴퓨터가 자동으로 검사해 주는 기능”이다. 만약 검사를 통과하지 못하면 프로그램을 아예 실행할 수 없다. 원래부터 타입 검사를 제공하는 언어를 사용하던 사람에게는 익숙한 일이지만, 파이썬과 자바스크립트만 사용해 봤다면 프로그램을 실행하는 것조차 컴퓨터의 허락을 맡아야 한다는 게 꽤나 불편할 수 있다.

    하지만 슬쩍 봤을 때 불편해 보인다고 무작정 멀리하기에는 타입 검사가 제공하는 이점이 너무나도 매력적이다. 그렇지 않았다면 그 많은 언어가 굳이 타입 검사라는 기능을 제공하지도 않았을 테다. 심지어는 타입 검사를 제공하지 않던 언어에마저 타입 검사를 추가하는 게 최근의 추세다. 마이크로소프트는 자바스크립트에 타입 검사를 추가해 타입스크립트TypeScript를 만들었다. 또한, 파이썬 역시 타입 검사를 보조하는 기능들을 언어에 지속적으로 추가하고 있다. 그러니 앞으로는 무슨 일을 하든 타입 검사를 제공하는 언어를 사용할 가능성이 높다. 타입 검사를 잘 활용하는 능력이 개발자의 필수 소양 중 하나가 되어 버린 것이다.

    문제는 타입 검사를 잘 활용하는 게 결코 쉬운 일이 아니라는 점이다. 물론 프로그램을 실행하기 전에 매번 자동으로 타입 검사가 진행되니 아무것도 몰라도 타입 검사를 그냥 “사용”할 수는 있다. 하지만 타입 검사를 제대로 “활용”하는 것은 전혀 다른 문제다. 타입 검사를 이해하지 않은 채 그냥 사용하기만 한다면 타입 검사의 장점을 살리기 어렵다. 오히려 타입 검사의 불편한 점에 시달리기 일쑤다. 이런 사태를 피하려면 우선 타입 검사의 장점과 단점을 정확히 알아야 한다. 그렇지 않으면 타입 검사를 사용하면서도 내가 지금 무슨 혜택을 얻고 있으며 무엇 때문에 불편한지 알 수가 없으니 상황을 개선할 방도가 없다. 타입 검사의 장단점을 파악했다면 남은 일은 어떻게 해야 타입 검사의 장점은 키우고 단점은 줄일 수 있는지 배우는 것이다. 그러면 비로소 타입 검사를 제대로 활용할 수 있게 된다.

    다시 말해, 타입 검사를 이왕 사용할 거라면 제대로 이해하고 써야 한다. 타입 검사를 제대로 이해했다는 것은 곧 “타입 검사의 장단점은 무엇인가?”와 “타입 검사의 장점은 키우고 단점은 줄이려면 어떻게 해야 하는가?” 이 두 질문에 잘 대답할 수 있다는 말이다. 그리고, 이 두 질문에 대한 답은 이 책 속에 있다.

    이 책은 일차적으로 파이썬이나 자바스크립트처럼 타입 검사가 없는 언어를 주로 사용해 온 사람들을 위한 책이다. 그런 독자들에게 이 책은 타입 검사를 알아 가는 과정에 있어 좋은 길잡이가 될 것이다. 단, 프로그래밍 경험 자체가 거의 없는 사람에게는 이 책을 권하지 않는다. 최소한 클래스를 정의해서 객체를 만들고 사용하는 정도까지는 아는 상태에서 책을 읽을 것을 추천한다.

    또한, 이 책은 타입 검사를 제공하는 언어를 사용하고 있지만 언어가 제공하는 타입 관련 기능을 능숙하게 사용하지 못하고 있다고 느끼는 사람들을 위한 책이기도 하다. 이런 독자들은 이미 “타입 검사의 장단점은 무엇인가?”에는 어느 정도 스스로 답을 할 수 있을 것이다. 하지만 “타입 검사의 장점은 키우고 단점은 줄이려면 어떻게 해야 하는가?”에 대한 답을 아직 충분히 알지 못하고 있기에 여전히 타입 검사로 인한 불편을 겪을 수 있다. 그렇다면 이 책이 타입을 능숙하게 다룰 수 있는 경지에 도달할 때까지 이끄는 안내자가 될 것이다.

    한 가지 주의할 점은, 이 책은 특정한 한 언어의 전문가가 되도록 돕는 책이 아니라는 것이다. 이 책의 목표는 여러 언어가 공통적으로 제공하는 타입 관련 기능들을 다룸으로써 독자들이 어느 언어를 사용하든 타입을 능숙히 다루도록 돕는 것이다. 즉, 대다수의 프로그래밍 언어 책과는 다르고, 오히려 자료 구조 책이나 알고리즘 책에 더 비슷하다. 프로그래밍 언어 책들은 대개 한 언어를 정한 뒤 그 언어에 한정된 내용을 구체적으로 다룬다. C 책은 C만 다루고, 자바 책은 자바만 다루는 식이다. C 책을 읽었다고 자바를 배우는 데 큰 도움이 되지는 않는다. 반면, 자료 구조 책이나 알고리즘 책을 한번 읽으면 그 내용을 어느 언어에나 적용할 수 있다. 정렬 알고리즘을 공부했다면 지금까지 내가 공부한 모든 언어로, 또 앞으로 공부할 모든 언어로 정렬 함수를 구현할 수 있게 된다. 이 책도 마찬가지다. 앞으로 무슨 언어를 사용하게 되든 상관없다. 그 언어가 타입 검사를 제공한다면 이 책에서 다룬 내용이 도움 될 것이다.

    이 책은 다음과 같이 다섯 개의 장으로 구성되어 있다.

    1. 타입 검사
    2. 서브타입에 의한 다형성subtype polymorphism
    3. 매개변수에 의한 다형성parametric polymorphism
    4. 두 다형성의 만남
    5. 오버로딩에 의한 다형성ad hoc polymorphism

    1장에서는 “타입 검사의 장단점은 무엇인가?”에 대한 답을 살펴본다. 그에 더해 타입 검사의 기본 원리를 이해함으로써 타입 검사가 내 프로그램을 퇴짜 놓는 사태에 대응하는 기초적인 전략도 알아본다. 2장부터 5장까지는 타입 검사를 통과하는 프로그램을 작성하는 데 도움을 주는 프로그래밍 언어의 각종 기능을 다룸으로써 “타입 검사의 장점은 키우고 단점은 줄이려면 어떻게 해야 하는가?”에 대답한다. 각 장의 내용은 그 앞에 있는 장들의 내용을 아는 것을 전제로 한다. 따라서 본인이 관심 있는 내용을 다루는 부분으로 건너뛰면서 읽기보다는 앞부터 순서대로 읽을 것을 추천한다.

    책에서 전문 용어를 적을 때는 대부분 관용적인 방식을 따랐다. 가령, 오버라이딩overriding과 오버로딩overloading은 음차된 형태가 이미 널리 사용되고 있기에 우리말로 옮기는 대신 음차된 형태를 그대로 사용했다. 또한, 관용적인 음차 방법이 외래어 표기법을 지키지 않더라도 관용 표기를 유지했다. 예를 들어 파이선, 시그너처, 지네릭스 대신 파이썬, 시그니처signature, 제네릭스generics라 적었다. 이는 책에서 다룬 개념을 실제 개발에 활용하기 위해 추가적인 자료를 검색하여 찾고 읽을 때, 용어가 달라 방해되는 일이 없게 하기 위한 것이다. 다만, 우리말로 설명한 자료가 얼마 없는 개념은 가급적 음차를 피하고 우리말로 풀어 썼다. 위치에 민감한 타입 검사flow-sensitive type checking와 타입 매개변수 제한bounded quantification이 그 예시다. 이런 용어는 어차피 검색해도 우리말 자료가 잘 없으니, 검색의 용이성보다는 용어를 쉽게 풀어 써 책을 읽기 쉽게 만드는 데 초점을 둔 것이다. 각 용어가 처음 등장할 때는 원래의 영어 용어도 병기했으니 영어에 큰 거부감이 없다면 영어 용어를 검색에 사용해 더 많은 자료를 찾아보는 것도 도움이 될 것이다.

     

     

     

Designed by Tistory.