[TypeScript] 2편. 기본 타입 정리

[TypeScript] 2편. 기본 타입 정리

이번 글에서는 TypeScript에서 가장 기본이 되는 타입들을 정리해보겠습니다. TypeScript를 처음 배울 때 가장 먼저 익혀야 하는 부분은 변수에 어떤 종류의 값이 들어갈 수 있는지 표현하는 방법입니다.

JavaScript에서는 변수에 문자열, 숫자, 불리언 등 다양한 값을 자유롭게 넣을 수 있습니다. 하지만 TypeScript에서는 변수에 들어갈 값의 형태를 미리 정해두어, 잘못된 값이 들어가는 실수를 줄일 수 있습니다.


1. string 타입

string 타입은 문자열을 의미합니다. 이름, 이메일, 제목, 설명처럼 글자로 표현되는 값에 사용합니다.

let userName: string = "GWDEVEL";
let email: string = "dev@gwdevel.com";

string으로 선언한 변수에는 문자열만 넣을 수 있습니다. 숫자나 불리언 값을 넣으려고 하면 TypeScript가 오류를 알려줍니다.


2. number 타입

number 타입은 숫자를 의미합니다. 정수와 소수를 모두 포함합니다.

let age: number = 25;
let price: number = 12000;
let score: number = 98.5;

JavaScript와 마찬가지로 TypeScript에서도 정수와 실수를 구분하지 않고 모두 number 타입으로 다룹니다.


3. boolean 타입

boolean 타입은 참 또는 거짓 값을 의미합니다. 조건 상태를 표현할 때 자주 사용합니다.

let isLogin: boolean = true;
let isAdmin: boolean = false;

로그인 여부, 관리자 여부, 버튼 활성화 여부처럼 상태를 나타낼 때 boolean 타입을 사용하면 코드의 의미가 더 명확해집니다.


4. null과 undefined

nullundefined는 값이 없다는 것을 표현할 때 사용합니다. 두 값은 비슷해 보이지만 의미가 조금 다릅니다.

null : 개발자가 의도적으로 값이 없다고 표현한 상태
undefined : 값이 아직 할당되지 않은 상태

let selectedUser: null = null;
let userEmail: undefined = undefined;

실제 프로젝트에서는 null과 다른 타입을 함께 사용하는 경우가 많습니다. 예를 들어 로그인한 사용자가 없을 수도 있다면 다음처럼 표현할 수 있습니다.

let userName: string | null = null;

userName = "GWDEVEL";

위 코드는 userName에 문자열이 들어올 수도 있고, 값이 없을 때는 null이 들어올 수도 있다는 뜻입니다.


5. any 타입

any 타입은 어떤 값이든 허용하는 타입입니다. 문자열, 숫자, 불리언, 객체 등 모든 값을 넣을 수 있습니다.

let value: any = "hello";

value = 123;
value = true;
value = { name: "GWDEVEL" };

하지만 any를 많이 사용하면 TypeScript를 사용하는 의미가 줄어듭니다. 타입 검사를 거의 하지 않기 때문에 JavaScript처럼 실수를 놓칠 수 있습니다.

주의
any는 편리하지만 남용하면 타입 안정성이 떨어집니다. 처음에는 쉬워 보여도 프로젝트가 커질수록 오류를 찾기 어려워질 수 있습니다.


6. unknown 타입

unknown 타입도 어떤 값이든 받을 수 있습니다. 하지만 any와 다르게 값을 바로 사용할 수는 없습니다. 사용하기 전에 타입을 확인해야 합니다.

let value: unknown = "hello";

if (typeof value === "string") {
  console.log(value.toUpperCase());
}

위 코드에서는 typeof를 사용해서 value가 문자열인지 확인한 후에 toUpperCase()를 사용했습니다.

즉, unknown은 어떤 값이 들어올지 모를 때 사용하지만, 실제로 값을 다룰 때는 타입 검사를 강제합니다. 그래서 any보다 더 안전한 타입입니다.


7. void 타입

void 타입은 함수가 아무 값도 반환하지 않을 때 사용합니다. 주로 콘솔 출력, 알림 표시, 상태 변경처럼 결과값을 반환하지 않는 함수에 사용합니다.

function sayHello(): void {
  console.log("Hello TypeScript");
}

위 함수는 실행은 되지만, 결과값을 반환하지 않습니다. 이런 경우 반환 타입을 void로 표현할 수 있습니다.


8. never 타입

never 타입은 절대 값이 반환되지 않는 경우를 의미합니다. 예를 들어 항상 에러를 발생시키는 함수나, 끝나지 않는 반복문이 있는 함수에서 사용할 수 있습니다.

function throwError(message: string): never {
  throw new Error(message);
}

never는 처음에는 자주 사용하지 않지만, 타입을 더 깊게 다루다 보면 중요한 역할을 합니다. 특히 조건 분기에서 모든 경우를 처리했는지 확인할 때 활용됩니다.


9. 기본 타입 정리표

타입 의미 예시
string 문자열 "hello"
number 숫자 10, 3.14
boolean 참 또는 거짓 true, false
null 의도적으로 값이 없음 null
undefined 값이 아직 할당되지 않음 undefined
any 모든 타입 허용 제한 없음
unknown 알 수 없는 타입 타입 확인 후 사용
void 반환값 없음 함수 반환 타입
never 절대 반환되지 않음 에러 발생 함수

10. 마무리

이번 글에서는 TypeScript의 기본 타입인 string, number, boolean, null, undefined, any, unknown, void, never를 정리했습니다.

처음에는 타입 이름이 많아 보여도 실제로 자주 사용하는 타입은 string, number, boolean, null, unknown 정도입니다. 특히 anyunknown의 차이는 꼭 기억해두는 것이 좋습니다.

핵심은 단순히 타입 이름을 외우는 것이 아니라, 이 변수에는 어떤 값이 들어와야 하는지 코드에 명확하게 표시하는 것입니다.

다음 글에서는 여러 값을 묶어서 다루는 방법인 배열, 객체, 튜플 타입을 정리해보겠습니다.

GWDEVELBlog
TypeScript 개념노트 시리즈 2편