[TIL] superset
Oct 31, 2024 | Dec 23, 2024
| Ryoon.With.Wisdomtrees
기존 언어에 새로운 기능과 문법을 추가해서 보완하거나 향상하는 것을 말한다. 슈퍼셋언어는 기존언어와 호환되며 일반적으로 컴파일러 등으로 기존 언어 코드로 변환되어 실행된다.
ex) Typescript는 Javascript의 슈퍼셋언어다.
자바스크립트 슈퍼셋으로서의 타입스크립트
타입스크립트는 기존 자바스크립트 코드에 정적인 타이핑을 추가한 것으로 자바스크립트의 상위 집합이다. 타입스크립트 문법은 모든 자바스크립트 문법을 포함하고 있다. 선택적으로 타이핑을 도입할 수 있는 특징 때문에 타입스크립트는 자바스크립트가 가지고 있는 여러 문제를 그대로 가지고 있지만 이 점 덕분에 타입스크립트를 도입하는 데 진입장벽이 낮아졌다.
모든 자바스크립트 코드는 타입스크립트라고 볼 수 있지만 반대로 모든 타입스크립트 코드가 자바스크립트 코드인 것은 아니다. 다시 말하지만 타입스크립트는 타입을 명시하는 문법을 가지고 있기 때문이다.
예를 들어 다음 코드는 타입스크립트에서 유효하다.
그러나 자바스크립트 런타임에서는 “SyntaxError: Unexpected token”오류가 발생한다.
:string은 타입스크립트에서 쓰이는 타입 구문이다. 타입 구문을 사용하는 순간부터 자바스크립트는 타입스크립트의 영역으로 들어가게된다.
또한 타입스크립트 컴파일러는 타입스크립트뿐만 아니라 일반 자바스크립트 프로그램에서도 유용하게 사용할 수 있다.
값 vs 타입
값value은 프로그램이 처리하기 위해 메모리에 저장하는 모든 데이터이다. 다르게 말하면 프로그램에서 조작하고 다룰 수 있는 어떤 표현이며 다양한 형태의 데이터를 포함한다. 수학적 개념에서 값으로 여기는 1, 2, 3과 같은 데이터는 물론이고 1 + 2 같은 식이 반환하는 결괏값 3도 값에 해당한다. 프로그래밍 관점에서는 문자열, 숫자, 변수, 매개변수 등이 값에 해당한다.
객체 역시 값이다. 그리고 자바스크립트에서는 함수도 값이다. 모든 것이 객체인 언어답게 자바스크립트 함수는 런타임에 객체로 변화되기 때문이다.
값은 어떠한 식을 연산evaluate한 것으로 변수에 할당할 수 있다.
값 공간과 타입 공간의 이름은 서로 충돌하지 않기 때문에 타입과 변수를 같은 이름으로 정의할 수 있는데 타입스크립트가 자바스크립트의 슈퍼셋인 것과 관련이 있다. 타입스크립트 문접인 type으로 선언한 내용은 자바스크립트 런타임에서 제거되기 때문에 값 공간과 타입 공간은 서로 충돌하지 않는다.
타입스크립트 코드에서 타입과 값을 구분하는 것은 어렵지 않다. 타입은 주로 타입 선언(:)또는 단언 문(as)으로 작성하고 값은 할당 연산자인 = 으로 작성한다.
출처: 우아한 타입스크립트 with 리액트 - 한빛미디어 , 2장 타입
뒤로