본문 바로가기

Software Engineering/Languages

타입스크립트 기본 개념

기존의 JavaScript에 비해 데이터 타입을 구체적으로 정의한다

타입스크립트는 자바스크립트가 데이터 타입을 명시적으로 정의하지 않기 때문에 이를 보완하기 위해서 만든 언어다. 타입스크립트의 작동방식은, 타입스크립트로 코드를 작성한 뒤, 이를 타입스크립트 컴파일러로 컴파일해서 자바스크립트를 만들고, 이렇게 만들어진 자바스크립트 파일을 실행하는 형식으로 이루어 진다. 추후에는 자바스크립트로 컴파일하지 않더라도, 타입스크립트 파일 그 자체를 실행할 수 있도록 개선한다고 한다.

 

타입스크립트는 데이터 타입을 정의하기 위해서 만들어진 언어인 만큼, 변수/함수의 측면에서 기존의 자바스크립트와 차이점을 보인다. 우선 변수의 측면에서, 자바스크립트로 객체를 만들 경우, 그 안에 여러 변수들을 정의하게 된다. 이 때 변수를 일일히 정의할 수도 있지만, 이를 인터페이스라는 것으로 만들어서, 각 변수 별로 정의한 데이터 타입을 가져다 사용할 수 있다.

 

이렇게 인터페이스를 정의해서 객체들의 변수 타입을 설정하고 나면, 다음과 같은 문제가 생긴다. 특정 데이터는 여러 타입의 변수를 가지고 있어야 하는데 이를 어떻게 해야 하는가. 이를 해결하기 위한 개념이 열거형(enum), 그리고 리터럴 타입이라는 것이다. '||'를 활용하여, 여러 데이터 타입을 정의할 수 있다.

 

열거형과 리터럴 타입이 인터페이스 즉, 객체 안의 변수에 대해서 여러 데이터 타입을 설정하는 것이라면, 유니언 타입은 객체가 아닌 홀로 존재하는 변수에 대해서 여러 데이터 타입을 정의하기 위해서 존재하는 기술이다.

 

이렇게 변수에 대해 여러 데이터 타입을 정의하다보면, 중복되는 데이터 타입의 조합이 존재한다. 예를 들어, String 타입과 Int 타입이 계속해서 같이 쓰일 때, 이를 묶어서 새로운 데이터 타입을 정의할 수 있다. 

 

자바스크립트와 달리 타입스크립트에서는 변수에 대한 상세한 데이터타입을 정의함에 따라, 함수에 있어서도 구체적인 타입 명시가 필요하다. 함수에 들어가는 인자와 반환값에 대한 타입을 정의해주어야 한다. 

 

인자에 대해서는 일반적으로 변수의 타입을 정하는 것처럼 정의할 수도 있지만, 때로는 함수의 모든 인자가 필수적인 것은 아니다. 이 때 등장하는 것이 선택적 데이터타입 정의다. 해당 인자가 함수에서 필수적이지 않을 때, '?'를 이용해서 이를 선택적으로 타입 명시할 수 있도록 설정할 수 있다. 이 때 추가적으로 함수에 인자를 필수적으로 주지 않더라도, 이 안에 기본적 출력될 수 있는 값을 설정할 수 있다. 이게 기본 매개변수 설정이다.

 

타입스크립트가 기존 자바스크립트의 데이터 타입의 측면에서의 문제점들을 보완하기 위한 기술인 만큼, 변수와 함수의 타입 명시에 있어서 약간의 차이점이 존재했다. 이렇게 두드러지는 변수, 함수의 타입 명시 이외에도, 타입 명시를 편리하게 해주는 기술로서, 타입추론, 타입가드 등이 존재한다.