3) 타입스크립트의 타입들1
객체타입, 배열타입, 튜플타입에 대해서 알아볼 페이지
1. 배열/객체 자료형 변수
배열이나 객체처럼 하나의 변수에 여러 개의 값을 담는 경우에도 각 값의 타입을 명확히 지정할 수 있습니다.
[1,2,3]과 같은 숫자 자료형 배열 값을 담아 줄 변수는 let numArr: number[] 와 같이 작성합니다.
{name:'mkm'}과 같은 객체 자료형 값을 담아 줄 변수는 let obj:{name:string}와 같이 작성합니다.
2. 튜플
배열의 요소와, 각 요소의 타입을 미리 고정해둔 타입
타입스크립트에서는 배열과 비슷한 튜플(tuple)이라는 타입이 존재합니다.
튜플은 배열과 유사하지만, 배열의 길이와 각 요소의 타입을 정확히 지정할 수 있다는 점에서 차이가 있습니다. 일반 배열이 내부에 들어갈 수 있는 데이터의 타입을 표현한다면 튜플은 보다 상세하게 그 각 값들에 대한 타입을 기술해 주는 거죠.
ex) let tuple:[string,string,string]
3. readonly
수정 불가 옵션
튜플은 배열이 가지고 있는 값의 수와 타입을 정의할 수 있습니다. 즉, 튜플은 배열이라는 타입을 더 명확하게 표현할 수 있는 수단이라고 할 수 있습니다. 이렇게 정의된 튜플에 값을 초기화 하거나 잘못된 인덱스로 접근할 때 컴파일 에러를 출력해줍니다.
하지만 기본적으로 튜플은 가변 배열과 같습니다. 자바스크립트에는 튜플이라는 타입은 존재하지 않고, 컴파일 완료된 JS파일에서 튜플은 배열로서 취급되기 때문입니다.
여기서 문제점이 하나 있습니다.
타입스크립트는 정적 타입 검사 도구이기 때문에, 실행 환경(runtime)에서 발생하는 오류까지는 검사하지 못합니다.

위 코드는 튜플의 값을 잘못된 방향으로 수정하고 있음에도 컴파일 에러를 발생 시켜 주지 않습니다. 메서드의 실행은 runtime에서 이루어지기 때문입니다.
즉, 타입스크립트는 코드 실행 전 단계에서만 타입을 검사할 수 있습니다.
이를 해결할 수 있는 키워드가 readonly입니다.
TypeScript에서는 튜플이 변경되지 않도록 할 때, readonly 키워드를 붙여 수정 불가능한 튜플로 만드는 것을 권장합니다.
Last updated