TypeScript 1년 사용후기


TypeScript를 사용한지 1년이 조금 넘은 것 같은데, 이 시점에서 TS에 대한 리뷰를 적어보려 합니다. 결론부터 말하자면 처음 TS를 사용하기 시작한 이후로 TS를 선택할 수 있는 상황에서는 항상 TS를 사용해오고 있습니다.

인텔리센스

원래 정적 타입 프로그래밍 언어로 프로그래밍에 입문한 사람으로써 JS를 사용할 때 제일 불편했던 것이 바로 자동완성이었습니다. 특히 이전에 C#이라는 막강한 인텔리센스를 지원하는 언어를 사용하던 입장에서 메서드의 이름이나 매개변수를 일일히 문서를 통해 파악해야 하는 부분이 굉장히 불편하게 다가왔습니다. 반면 TS는 정적 타입을 제공함으로써 인텔리센스를 굉장히 강력하게 지원합니다. 특히 TS로 작성되지 않은 라이브러리 또한 DefinitelyTyped를 통해 대부분의 인텔리센스를 지원받을 수 있습니다. 일부는 TS는 단지 JS의 자동완성 도구라고 하는 사람도 있을 정도로 TS의 가장 큰 강점이라고 생각합니다.

에러 방지

TS는 정적 타입으로 발생할 수 있는 에러를 사전에 방지할 수 있습니다. JS를 처음 사용하다 보면 이 코드가 에러가 안난다고? 하는 상황을 몇 번쯤 겪게 될 만큼 좋게 말하면 유연하지만 반대로 말하면 이상한 문법을 갖고 있습니다. 이런 에러에 취약한 구조를 TS는 변수에 들어갈 수 있는 타입을 강제함으로써 보완해줍니다.

객체 지향 프로그래밍

TS는 객체 지향 프로그래밍을 기존 JS에 비해 더 잘 지원합니다. 대표적으로 클래스의 private 접근자 설정을 통해 프로퍼티를 숨길 수 있습니다. 다만 private 프로퍼티를 사용할 때는 한가지를 주의해야하는데 private은 JS로 컴파일 시 사라지기 때문에 컴파일 이후에 접근은 막을 수 없다는 점입니다. 최근 JS에 private property가 추가됐으므로 필요하다면 해당 문법을 사용하는 것도 고려해 볼 수 있습니다. 이 외에도 Interface 등 객체 지향 프로그래밍에서 자주 등장하는 개념을 잘 지원합니다.

한계

TS는 타입을 잘 설계하는 것이 가장 중요합니다. 그런 점에서 any타입을 사용하는 것은 TS의 대부분의 장점을 희석시키는 행위입니다. 따라서 any타입 사용은 지양하는것이 좋습니다. 대부분의 상황에서 이는 잘 지켜지지만 어쩔 수 없이 any를 사용해야만 하는 경우가 발생하기도 하는데 이런 경우 TS의 장점을 대부분 누릴 수 없게 됩니다. 이런 경우에는 any타입이 최대한 전체적인 타입 시스템에 영향을 덜 미치도록 any를 사용하는 것이 최선입니다.