TS 1.3 · 1부. 타입 기초

배열과 튜플

같은 것이 여럿 담긴 것과, 자리마다 다른 것이 담긴 것입니다.

예상 학습 시간 14분 실행 단추가 있는 예제는 고쳐서 실행해 볼 수 있습니다 난이도 입문
개념 설명

무엇이 담기는 배열인지 적습니다

배열에는 무엇이 담기는지를 적습니다. 타입 뒤에 [] 를 붙이면 됩니다.

number[]   // 숫자만 담는 배열
string[]   // 글자만 담는 배열

이렇게 적어 두면 배열에서 꺼낸 값의 타입도 함께 정해집니다. 꺼낼 때마다 무엇인지 확인할 필요가 없어집니다.

최소 예제 · 편집 가능

배열 만들고 다루기

main.ts
const scores: number[] = [90, 85, 77];
const names: string[] = ["홍길동", "김철수"];

console.log(scores.length, names.length);
console.log(scores.map(v => v + 1).join(","));
출력
3 2 91,86,78

mapv 에 타입을 적지 않았는데 v + 1 이 됩니다. number[] 라고 적어 두었으니 꺼낸 값이 숫자라는 것을 알기 때문입니다.

최소 예제 · 편집 가능

다른 것을 넣으면 막힙니다

main.ts
const scores: number[] = [90, 85, 77];

scores.push("백점");
출력
3:13 TS2345 'string' 형식의 인수는 'number' 형식의 매개 변수에 할당될 수 없습니다.

const 로 선언했지만 push 는 됩니다 — const 가 막는 것은 다른 배열로 바꾸는 것이지 안의 내용이 아닙니다(3.1에서 본 것과 같습니다). 막은 것은 타입입니다.

상세 사용법

자리마다 다른 것을 담으려면 — 튜플

길이가 정해져 있고 자리마다 담기는 것이 다른 배열을 튜플이라고 합니다. 대괄호 안에 자리마다 타입을 적습니다.

main.ts
const point: [number, number] = [3, 5];
const user: [string, number] = ["홍길동", 27];

console.log(point[0] + point[1]);
console.log(`${user[0]} (${user[1]})`);
출력
8 홍길동 (27)

user[0] 은 글자, user[1] 은 숫자입니다. 자리마다 타입이 다릅니다.

main.ts
const user: [string, number] = ["홍길동", 27];

user[0] = 27;
출력
3:1 TS2322 'number' 형식은 'string' 형식에 할당할 수 없습니다.

튜플이 자주 보이는 자리가 여러 값을 한 번에 돌려주는 함수입니다. React 의 useState 가 그렇게 생겼습니다.

흔한 실수

처음에 자주 걸리는 것

빈 배열은 타입을 적어야 합니다

const list = []; 는 담긴 것이 없어 무엇이 담기는지 알 수 없습니다. const list: number[] = []; 처럼 적어 둡니다.

튜플은 길이도 정해져 있습니다

[string, number] 에 값을 셋 넣으면 오류입니다. 개수가 늘 수 있는 것은 배열로 적습니다.

Array<number> 도 같은 뜻입니다

number[]Array<number> 는 같습니다. 어느 쪽을 사용해도 되고, 한 프로젝트 안에서 하나로 맞춥니다.

실습 문제

직접 해보기

1. 과일 목록 난이도 하

글자만 담는 배열을 만들고, 개수와 내용을 출력하세요.

const fruits: string[] = ["사과", "포도", "딸기"];

console.log(fruits.length);
console.log(fruits.join(" "));
2. 좌표 튜플 난이도 중

이름과 나이를 담는 튜플을 만들고, 자리를 바꿔 넣으면 어떤 오류가 나는지 확인하세요.

const user: [string, number] = [27, "홍길동"]; 처럼 바꿔 넣으면 자리마다 하나씩, 오류가 두 번 나옵니다.
요약

이 단원의 정리

  • 배열은 number[] 처럼 담기는 것을 적습니다.
  • 적어 두면 꺼낸 값의 타입도 함께 정해집니다.
  • 빈 배열은 추론이 되지 않으므로 반드시 적습니다.
  • 자리마다 다른 것이 담기고 길이가 정해진 것은 튜플입니다.
  • const 는 배열 자체를 바꾸는 것만 막습니다.