타입은 이름표입니다
마트에서 상품을 정리한다고 상상해보세요. 과일 코너에는 과일만, 음료 코너에는 음료만, 과자 코너에는 과자만 놓습니다. 이름표가 붙어있으니 누가 봐도 어디에 뭘 놓아야 할지 알 수 있습니다.
TypeScript의 타입도 마찬가지입니다. 변수에 "이 변수에는 문자열만 넣을 수 있어"라는 이름표를 붙이는 것입니다.
세 가지 기본 타입
TypeScript에서 가장 자주 사용하는 기본 타입은 세 가지입니다.
string — 문자열
const name: string = "김민수";const greeting: string = "안녕하세요";const template: string = `${name}님, ${greeting}`;
문자열을 담는 변수에 : string이라는 이름표를 붙입니다. 작은따옴표, 큰따옴표, 백틱 모두 사용할 수 있습니다.
number — 숫자
const age: number = 25;const pi: number = 3.14;const hex: number = 0xff;const negative: number = -10;
정수, 실수, 16진수 등 모든 숫자를 담을 수 있습니다. JavaScript처럼 정수와 실수를 구분하지 않고 모두 number 타입입니다.
boolean — 참/거짓
const isStudent: boolean = true;const hasPermission: boolean = false;
true 또는 false 두 가지 값만 가질 수 있습니다.
타입 표기 문법
TypeScript에서 타입을 지정하는 문법은 간단합니다.
let 변수이름: 타입 = 값;
콜론(:) 뒤에 타입 이름을 씁니다. 몇 가지 예를 더 살펴보겠습니다.
let username: string = "이영희";let score: number = 95;let isPassed: boolean = true;
잘못된 타입의 값을 넣으면
타입이 맞지 않는 값을 넣으면 TypeScript가 에러를 표시합니다.
let age: number = 25;age = "스물다섯"; // 에러! Type 'string' is not assignable to type 'number'.
age는 숫자라고 선언했으니, 문자열을 넣을 수 없습니다. 이것이 TypeScript가 제공하는 타입 안전성입니다.
let name: string = "김민수";name = 42; // 에러! Type 'number' is not assignable to type 'string'.let isActive: boolean = true;isActive = "yes"; // 에러! Type 'string' is not assignable to type 'boolean'.
let과 const의 타입 차이
let과 const로 선언한 변수의 타입에는 미묘한 차이가 있습니다.
let message: string = "안녕하세요"; // message의 타입: stringconst greeting = "반갑습니다"; // greeting의 타입: "반갑습니다" (리터럴 타입)
let으로 선언한 변수는 값이 바뀔 수 있으므로 넓은 타입(string)을 가집니다. const로 선언한 변수는 값이 바뀌지 않으므로 좁은 타입(해당 값 자체)을 가집니다. 참고로 const greeting: string처럼 타입을 명시하면 리터럴 타입이 아닌 string이 됩니다. 이 차이는 나중에 "리터럴 타입"을 배울 때 더 자세히 다룹니다.
기본 타입 정리
| 타입 | 설명 | 예시 |
|---|---|---|
string |
문자열 | "hello", 'world', `template` |
number |
숫자 | 42, 3.14, -10, 0xff |
boolean |
참/거짓 | true, false |
이 세 가지가 TypeScript에서 가장 기본이 되는 타입입니다. 다음 챕터에서는 이 타입을 직접 쓰지 않아도 TypeScript가 알아서 타입을 파악하는 "타입 추론"에 대해 알아보겠습니다.