타입스크립트에서 무분별하게 요소가 추가되는 배열이 아닌, 지정된 배열만 허용해주는 튜플에 대해서 알아보자.
일반적인 TypeScript 배열
const arr: string[] = ["LA", "New-York", "Sanfrancisco"];
String으로 나열된 배열에서 만일 숫자를 넣게 되면,
const arr: string[] | number[] = ["LA", "New-York", "Sanfrancisco", 20200210];
해당 배열에는 숫자 혹은 문자열이 들어 간다는 것을 미리 타입을 식별하게 된다.
그러나 배열 안에 어느 인덱스든 문자열, 숫자형이 다 허용되면 타입스크립트의 철저한 타입을 처리하는 방법론에 어긋날 수도 있다.
지정된 배열 요소를 선언하는 튜플
const arr: [string, string, string, number] = ["LA", "New-York", "Sanfrancisco", 20200210];
arr 이라는 배열에 미리 들어갈 타입들을 사전에 다 선언하는 것을 튜플 이라고 부른다.
튜플 사용 시 주의해야 할 점
const arr: [string, string, string, number] = ["LA", "New-York", "Sanfrancisco", 20200210];
arr.push(true)
console.log(arr)
// ["LA", "New-York", "Sanfrancisco", 20200210, true]
4가지 배열 요소만 지정했으나 push 메서드를 사용하여 다시 콘솔로그를 찍어보면 push 메서드에 담긴 요소가 추가 된다.
그 이유는 엄연히 자바스크립트 상에서 튜플로 지정된 arr은 배열이기 때문에 pop, push, unshift 등등 배열 메서드들이 작동될 수 밖에 없다.
사실상 튜플이 지정된 배열에 push, pop 같은 메서드를 사용했을 경우 다시 __string | number__ 일반적인 배열 타입으로 변경 되는 셈이다. |
튜플의 사용 예
서버 API에서 받아오는 배열인데 Immutable(불변성) 규칙이 필요한 경우 이거나, UI에서 원칙적 변형이 일어날 수 없는 배열들을 다루는 경우 튜플을 사용한다.