[TypeScript] 타입스크립트 장단점

2022. 6. 26. 03:49·Language/TypeScript
728x90

타입 스크립트(TypeScript)

언어는 크게 정적 타입과 동적 타입 언어로 구분할 수 있다.

타입 스크립트는 자바스크립트에 타입을 부여한 정적 타입 언어다.

만약 타입 스크립트를 브라우저에서 실행하려면 파일을 변환하는 트랜스 파일 과정을 거쳐서 사용한다.

공식적으로는 트랜스 파일이 아닌 컴파일된다고 표현한다.

컴파일의 경우 한 언어로 작성된 소스 코드를 다른 언어로 변환하는 것을 뜻하는 반면, 트랜스 파일의 경우 한 언어로 작성된 소스 코드를 비슷한 수준의 다른 언어로 변환한다는 차이가 있다.

예를 들어 Java를 컴파일하면 bytecode 코드가 출력되지만, C++를 트랜스 파일 하면 C가 출력되며 Typescript를 트랜스 파일 하면 Javascript가 출력된다. 하지만 공식적으로 컴파일된다고 표현하기 때문에 컴파일이란 용어를 사용한다. 

 

이런 정적 타입 언어는 런타임 이전에 타입이 올바른지에 대한 검사를 시행하며, 동적 타입 언어는 런타임에 프로그램의 타입이 올바른지에 대한 검사를 실행한다.

만약 래퍼런스 오류를 유발하는 코드가 존재한다면 정적 언어는 컴파일하는 과정에서 오류를 출력하는 반면 동적  언어는 해당 구문이 실행되는 시점에서 오류를 출력한다. 

 

그렇다면, 정적 타입 언어가 동적 타입 언어보다 더 좋은 것이 아닌가 생각해볼 수 있다. 그럼 타입 스크립트를 기준으로 어떤 부분에서 장단점이 있는지에 대해 살펴보겠다.


타입 스크립트의 장점

첫 번째 장점으로는 타입 스크립트를 활용하면 컴파일을 통해 사전 에러를 발견할 수 있다. 만약 타입 스크립트를 설치하면 tsc라는 명령어로 타입 스크립트 파일을 컴파일할 수 있다. 타입 스크립트가 컴파일된 결과물은 자바스크립트로 출력된다. 이때 컴파일 단계에서 문법 에러를 잡을 수 있으므로, 사소한 실수들을 런타임 전에 모두 체크할 수 있다. 또한, tsconfig.js 파일에 명시된 ECMA 버전으로 자동으로 변환할 수도 있다. 

 

두 번째 장점으로는 타입 스크립트는 타입을 강제화한다는 점에서 장점이 생긴다. 자바스크립트는 변수에 값을 넣을 때 타입을 엄격하게 체크하지 않는 '세미 타입' 언어다. 비슷한 언어로는 파이썬이 있는데, 이 언어들은 변수에 값을 대입할 때 입력된 값의 타입을 보고 타입 추론을 활용해서 자동으로 형 변환을 한다. 이러한 특징은 개발자 입장에서 변수를 선언할 때 타입을 신경 쓰지 않아도 되므로 코딩은 편리하겠지만, 개발자들 간의 소통 문제로 버그를 발생시킬 여지가 있다. 하지만 타입 스크립트는 모든 객체에 타입을 강제화하여 타입으로 발생하는 문제를 원천 차단한다.

 

세 번째 장점으로는 IDE에서 강력한 기능을 제공한다는 점이다. 만약 VSC를 활용한다면, 타입 스크립트에 관련된 다양한 기능과 플러그인을 활용할 수 있다. 

 

네 번째 장점으로는 타입 스크립트를 활용하면 ES Next를 완벽하게 활용할 수 있다. 자바스크립트는 ECMA 4 버전에서 내부 정치로 인해 표준화되지 못하면서 오랜 시간 동안 발전하지 못했다. 하지만 다행히도 2009년 현재 사용하는 자바스크립트의 기본이라 할 수 있는 ECMA 5 버전과 NodeJS가 등장하면서 가장 상승세가 높은 인기 언어로 발전했다. 특히, 2015년에 발표된 ECMA 2015 (이하 ES Next)에서 수많은 신기능이 대거 추가되면서 자바스크립트가 영역을 넓힐 수 있는 디딤돌이 되었다. 그러나, 너무 많은 것이 바뀐 나머지 수많은 모듈과 브라우저가 새로운 기능을 지원하지 않아 제대로 사용할 수 없었으며, 호환성을 해결하기 위해 Babel을 사용하여 이전 버전의 자바스크립트로 변환하는 등의 불편한 방법들이 추가로 필요하게 되었다. 이때 타입 스크립트는 ES Next 문법을 사용해도 tsconfig.js에 지정된 자바스크립트 버전으로 자동으로 변환해주기 때문에, 개발자는 최신 자바스크립트의 편리한 기능들을 호환성 걱정 없이 사용할 수 있다. (일부 모듈에서는 여전히 Babel이 필요하다.)

 

다섯 번째 장점으로는 타입 스크립트를 활용하면 객체 지향 언어 스타일로 코드를 작성할 수 있다. 자바스크립트가 처음 나왔을 때는 객체 지향의 기본이 되는 클래스가 없었다. 하지만 마치 객체 지향 언어처럼 객체를 생성하고 사용할 수 있었다. 다행히도 ES Next부터 Class가 도입되어 온전한 객체 지향 언어의 형태를 띠게 되었는데, 이때 타입 스크립트에서는 타입의 포맷을 지정하는 인터페이스, 가상 클래스 등의 객체 지향 언어에서 사용하는 문법들을 추가로 지원하면서 객체 지향 개발을 할 수 있도록 구성이 되어있다.

 

지금까지의 내용을 살펴보면, 타입 스크립트는 자바스크립트보다 너무도 매력적인 언어다. 하지만 타입 스크립트를 활용할 때 단점도 존재할 것이다.


타입 스크립트의 단점

첫 번째 단점으로는 타입 스크립트는 개발의 규모가 커지면 커질수록 타입 설정이 귀찮고 시간이 오래 걸릴 수 있다는 문제가 생길 수 있다. 타입 스크립트는 타입 강제화를 위해 코드에 타입을 지정해야 한다. 타입 추론을 활용해서 자동으로 인식하게 만들 수 있지만, 배열, 객체, 함수의 경우 사용자가 타입을 선언해서 미리 제한해야 한다. 이 과정에서 자바스크립트로 개발할 때 보다 시간이 더욱 소요될 수 있다. 

 

두 번째 단점으로는 코드의 가독성이 떨어질 수 있다. 타입 스크립트는 모든 객체에 대해 타입을 지정해야 한다고 했다. 만약 타입을 지정하지 않는다면, 타입을 추론해야 하는데, 타입을 추론하기 힘든 경우, 컴파일러에게 알려주는 형 변환을 하거나, 제네릭을 사용하여 어떤 타입이 들어오더라도 동작할 수 있도록 선언해야 한다. 문제는, 이렇게 코드를 작성하다 보면 코드가 엄청 길어질 수 있는 문제가 있다.

 

세 번째 단점으로는, 타입 스크립트를 활용해도 근본적인 자바스크립트 오류는 해결할 수 없다. 타입 스크립트는 자바스크립트의 슈퍼셋 언어이지만, 원본은 자바스크립트이기 때문에 자바스크립트에서 발견하기 힘든 난해한 버그가 여전히 타입 스크립트에서 나타날 수 있다.

'Language > TypeScript' 카테고리의 다른 글

[TypeScript] 타입스크립트 기본 문법  (0) 2022.06.26
[TypeScript] 자바스크립트 타입스크립트로 전환  (0) 2022.06.26
[TypeScript] 프론트엔드 프레임워크/라이브러리와 타입스크립트  (0) 2022.06.26
[TypeScript] 타입스크립트의 특징  (0) 2022.06.26
[TypeScript] 타입스크립트 컴파일러  (0) 2022.06.26
'Language/TypeScript' 카테고리의 다른 글
  • [TypeScript] 자바스크립트 타입스크립트로 전환
  • [TypeScript] 프론트엔드 프레임워크/라이브러리와 타입스크립트
  • [TypeScript] 타입스크립트의 특징
  • [TypeScript] 타입스크립트 컴파일러
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    HTML
    array
    제어문
    event
    MySQL
    next.js
    object
    TypeScript
    자바스크립트
    Python
    Java
    객체
    CSS
    react
    변수
    JavaScript
    web
    리액트
    파이썬
    타입스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[TypeScript] 타입스크립트 장단점
상단으로

티스토리툴바