[TypeScript] 2. 타입스크립트 선언 및 종류

2024. 11. 12. 22:09·Dev/Typescript

타입스크립트 선언 및 종류

 

저는 타입스크립트를 공부할 때마다 "이 타입을 어떻게 지정해야 하지?" 하는 순간들이 많았습니다. 이러한 고민했던 부분들을 타입별로 정리하여 공유합니다.

기본 타입 구성

먼저, 타입스크립트의 기본 타입은 총 12가지로 구성되어 있습니다. 이 포스트에서는 기본 타입부터 차례대로 정리해 보겠습니다. 그동안 인강에서 열심히 배운 타입들을 중심으로 정리해 볼게요. 그리고 고급 타입과 유용한 타입 개념들은 다음 포스트에서 다룰 계획입니다.

 

💡 기본 타입 외에도 타입스크립트에는 여러 고급 타입과 유틸리티 타입들이 있습니다. 이 타입들을 적절히 활용하면 더 유연하고 강력한 타입 시스템을 구축할 수 있으니 참고해 주세요!

 


🚀 타입 종류

더보기
  • String: 문자열을 나타내는 타입
  • Number: 숫자 타입 (정수, 부동소수점 포함)
  • Boolean: true 또는 false 값을 가지는 타입
  • Object: 객체를 나타내는 타입
  • Array: 여러 값을 순서대로 저장하는 배열 타입
  • Tuple: 고정된 길이와 순서의 배열
  • Enum: 열거형 타입, 고정된 값들의 집합
  • Any: 모든 타입을 허용하는 타입
  • Void: 반환 값이 없는 함수 타입
  • Unknown: 값의 타입이 확실하지 않거나 알 수 없을 때 사용하는 타입
  • Null( 값이 없음 ) / Undefined(정의 없음)
  • Never: 값이 절대 발생하지 않는 타입 (예: 오류 던지기)

🚀 타입 - String

타입스크립트에서 String 타입은 문자열을 나타내는 데이터 타입이다. 쉽게 말해, 글자나 단어, 문장과 같은 텍스트 데이터를 저장할 때 사용.

let name: string = "Alice";
let message: string = "Hello, world!";

🚀 타입 - Number

타입스크립트에서 Number 타입은 모든 숫자(정수, 소수 포함)를 표현. 주로 나이, 금액 등 숫자 데이터를 저장할 때 사용 아래와 같이 다양한 리터럴 표현을 통해 타입스크립트에서 여러 진수의 숫자 리터럴을 사용할 수 있다.

let age: number = 30;
let price: number = 99.99;

let decimal: number = 42;  // 10진수

// 0x를 앞에 붙여 사용
let hex: number = 0x2a;  // 16진수 (42)

// 0b를 앞에 붙여 사용
let binary: number = 0b101010;  // 2진수 (42)

// 0o를 앞에 붙여 사용
let octal: number = 0o52;  // 8진수 (42)

🚀 타입 - Boolean

타입스크립트에서 Boolean타입은 참(true) 또는 거짓(false)을 나타내는 가장 기본적인 논리 타입. 주로 조건을 표현하거나, 어떤 상태를 참/거짓으로 나타낼 때 사용된다.

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

🚀 타입 - Object

자바스크립트에서 Object는 객체 뿐만 아니라 배열, 함수 까지 포함하게 된다.

타입스크립트에서도 마찬가지라고 기본적으로 typeof 연산가자 "object"로 반한하는 모든 타입을 뜻한다.

예시를 보며 확인해 볼까요!

let person: object = { name: "Alice", age: 30 };   // 객체
let numbers: object = [1, 2, 3];                   // 배열
let greet: object = function() { return "Hello"; } // 함수

console.log(typeof person);  // "object"
console.log(typeof numbers); // "object"
console.log(typeof greet);   // "function"

 

위 예시에서 person은 객체, numbers는 배열, greet은 함수이다. typeof 연산자로 각 타입을 확인해 보면, 객체와 배열은 "object"로 반환되고, 함수는 "function"으로 반환된다.


🚀 타입 - Array

배열 타입은 두 가지 방법으로 작성할 수 있다. 첫 번째 방법은 요소 타입 뒤에 []를 추가하는 것이고, 두 번째 방법은 Array<요소타입> 형식을 사용하는 것

// 첫 번째 방법: 요소 타입 뒤에 []를 추가
let numbers: number[] = [1, 2, 3];
let names: string[] = ["Alice", "Bob", "Charlie"];
let selects: (number | string)[] = [102, 'apple'];

// 두 번째 방법: Array<요소타입> 형식 사용
let numbers2: Array<number> = [1, 2, 3];
let names2: Array<string> = ["Alice", "Bob", "Charlie"];

🚀 타입 - Tuple

타입스크립트의 Tuple(튜플) 타입은 고정된 개수와 순서를 가지며, 각 요소가 서로 다른 타입을 가질 수 있는 배열입니다. 주로 여러 가지 관련 데이터를 묶어서 표현할 때 사용된다.

let user: [string, number] = ["Alice", 30];

 

이 처럼 항상 정해진 갯수의 요소를 가져와야 하는 배열을 지정해서 응용도 할 수 있습니다.

let x: [number, string]; // 튜플 타입으로 선언

x = [10, "hello"];  // 성공: 첫 번째 요소는 숫자, 두 번째 요소는 문자열
x = [10, "hello", 99];  // 오류: 요소의 개수가 맞지 않음
x = ["hello", 10];  // 오류: 순서가 잘못됨 (첫 번째 요소는 숫자여야 함)
let info: [string, number, boolean] = ['John Doe', 42, false];
console.log(info[0]); // 'John Doe'
console.log(info[1]); // 42
console.log(info[2]); // false

🚀 타입 - Enum

Enum(열거형) 타입은 명명된 상수 집합을 정의할 때 사용. 이를 통해 숫자나 문자열에 의미 있는 이름을 부여하고 코드의 가독성을 높일 수 있다. Enum은 특정 값에 의미를 부여하여, 코드 내에서 값을 쉽게 관리하고 추적할 수 있게 도와준다.

enum Direction {
  Up = 1,
  Down,
  Left,
  Right
}

let move: Direction = Direction.Up;
console.log(move); // 1

 

enum Status {
  Active = "ACTIVE",
  Inactive = "INACTIVE",
  Pending = "PENDING"
}

let userStatus: Status = Status.Active;
console.log(userStatus); // "ACTIVE"

🚀 타입 - Any

any 타입은 타입스크립트에서 가장 유연한 타입으로, 어떤 타입의 값도 할당할 수 있게 해준다.  이 타입을 사용하면 타입 검사를 피할 수 있기 때문에, 타입스크립트의 엄격한 타입 시스템을 잠시 해제하고, 자바스크립트처럼 자유롭게 값을 다룰 수 있게 해준다.

 

특징

  • 어떤 타입도 할당할 수 있다
  • 타입 검사가 이루어지지 않기 때문에 타입 안정성을 일부 포기!
  • any를 사용하면 타입스크립트의 장점인 정적 타입 검사의 이점을 잃게 됨.

그럼 언제사용할까?

  • 타입을 모르거나, 값의 타입이 다를 수 있을 때 유용
  • 타입을 점진적으로 적용하거나, 타입스크립트로 마이그레이션 중 일시적으로 사용하는 경우가 많다
let value: any = 10;   // 숫자
value = "Hello";        // 문자열
value = true;           // 불리언
value = [1, 2, 3];      // 배열
value = { key: "value" }; // 객체

🚀 타입 - Void

void 타입은 값이 없는 상태를 나타내며, 주로 반환값이 없는 함수에 사용된다. 이 타입은 "아무 값도 반환하지 않음" 을 의미하며, 값을 반환하지 않는 함수의 반환 타입으로 지정할 때 유용.

 

특징

  • 함수의 반환 타입이 void 인경우, 그 함수는 반환값이 없어야 한다.
  • 일반 변수에 거의 사용되지 않고, 반환이 없는 함수에서만 주로 사용
function logMessage(message: string): void {
  console.log(message);
  // 반환값이 없으므로 void 타입
}

🚀 타입 - Unknown

unknown 타입은 "알 수 없는 값" 을 나타내는 타입으로, 값의 타입이 미리 확정되지 않았거나, 동적으로 바뀔 수 있을 때 사용된다. any 타입과 비슷하지만, 타입 검사를 반드시 해야 사용할 수 있는 특징이 있다. 이 때문에 보다 안전한 타입으로 간주된다.

 

특징

  • 어떤 값이든 할당 가능: 숫자, 문자열, 객체 등 모든 타입의 값을 받을 수 있다.
  • 타입 검사 후 사용: 사용하기 전에 타입 검사를 거쳐야만 안전하게 접근 할 수 있다. 이를 통해 잘못된 타입 사용으로 인한 오류 방지
let input: unknown;
input = "hello";  // 문자열 할당 가능
input = 42;       // 숫자 할당 가능

// 타입 검사를 해야 안전하게 사용 가능
if (typeof input === "string") {
  console.log(input.toUpperCase());  // 타입이 문자열임이 확인되었으므로 안전
}

🚀 타입 - Null  / Undefined

자바스크립트에서도 undefined가 하나의 자료형이자 값이었던 것 처럼, 타입스크립트에서도 null과 undefined 타입이 있다.  null과 undefined는 값이 없음을 나타내는 타입이지만, 각각 다른 의미를 가짐!! 이 둘은 자바스크립트와 타입스크립트에서 빈 값 또는 비어 있는 상태를 표현할 때 사용.

 

null 

  • 의미: 값 없음을 명시적으로 지정 할때 사용
  • 용도: 변수가 비어 있다는 것을 나타 내고자 할때 사용
let user: string | null = null; // user에 값이 없음을 명시적으로 표현

 

undefined

  • 의미: 변수에 값이 할당되지 않은 상태를 나타낸다. 변수가 초기화 되지 않았을 때 undefined 값을 가진다.
  • 용도: 변수가 정의되지 않은 상태이거나, 함수가 명시적인 반환 값 없이 종료될 때 사용
let age: number;
console.log(age); // undefined, 초기화되지 않음

 

위 두개 차이점은 의도된 비어 있음 vs 정의 되지 않음 에 있다.!


🚀 타입 - Never

never 타입은 절대 발생하지 않는 값을 나타내는 타입. 이 타입은 값을 반환하지 않고 끝까지 실행될 수 없는 함수에서 주로 사용한다. 예를 들어 에러를 던지거나 무한 루프에 빠져 종료되지 않는 함수 같은 경우에 never 타입을 사용.

 

never 타입을 지정하면 절대 실행이 끝나지 않는다는 걸 명확하게 표현할 수 있어서, 코드의 안정성과 타입 안전성을 높이는 데 도움이 된다.

// 오류를 던지는 함수
function throwError(message: string): never {
  throw new Error(message);  // 실행이 끝나지 않음
}

// 무한 루프 함수
function infiniteLoop(): never {
  while (true) {
    // 계속 실행, 절대 끝나지 않음
  }
}

// 모든 케이스 처리에 활용
function checkType(value: string | number): string {
  if (typeof value === "string") {
    return "문자열";
  } else if (typeof value === "number") {
    return "숫자";
  } else {
    const neverValue: never = value; // 모든 케이스를 처리했으므로 이 코드는 절대 실행되지 않음
    return neverValue; // 오류 방지용 타입 안전성을 위한 코드
  }
}

마무으리

기본 타입 정리를 드디어 끝냈습니다! 타입스크립트의 핵심이 되는 타입들을 하나씩 살펴보니 뭔가 구조가 눈에 들어오는 것 같네요. 다음 포스트에서는 추가적인 타입들에 대해 좀 더 깊이 파고들어 볼 예정입니다. 더 복잡한 타입들로 가보자!

 

오늘도 감사합니다

'Dev > Typescript' 카테고리의 다른 글

[TypeScript] 4. 타입스크립트 Generics(제네릭) 이해하기  (0) 2024.12.16
[TypeScript] 3. 타입스크립트 Class(클래스)  (0) 2024.12.16
[TypeScript] 1. 타입스크립트란?  (0) 2024.11.03
'Dev/Typescript' 카테고리의 다른 글
  • [TypeScript] 4. 타입스크립트 Generics(제네릭) 이해하기
  • [TypeScript] 3. 타입스크립트 Class(클래스)
  • [TypeScript] 1. 타입스크립트란?
Code Ninja
Code Ninja
초보 개발자의 성장 기록을 담아, 어렵지 않게 풀어쓰는 기술 블로그를 운영하고 있습니다.
  • Code Ninja
    Beautiful Code
    Code Ninja
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • Project (11)
        • Home Server (5)
        • Tistory (6)
        • 블로그 자동포스팅 (0)
      • Dev (12)
        • Typescript (4)
        • Docker (6)
        • DB (0)
        • React (0)
        • Linux (2)
        • Github (0)
      • 자기계발 & 라이프 해킹 (3)
  • hELLO· Designed By정상우.v4.10.3
Code Ninja
[TypeScript] 2. 타입스크립트 선언 및 종류
상단으로

티스토리툴바