하얀 코딩

[TypeScript - 5] Object types (객체 타입) - enum, tuple 본문

TypeScript

[TypeScript - 5] Object types (객체 타입) - enum, tuple

whitecoding 2023. 6. 6. 18:51

enum

타입스크립트의 enum은 특정 값들의 집합을 표현하는 데 사용되는 특별한 타입입니다. 

enum은 상수 값을 읽기 쉬운 이름으로 대체하여 코드를 더욱 명확하고 읽기 쉽게 만드는 데 도움이 됩니다.

enum Color {
    Red, // Red === 0
    Green, // Green === 1
    Blue // Blue === 2
}

let c: Color = Color.Green;

 

enum에서 값을 지정하지 않으면, 첫 번째 값은 0으로 시작하고, 그 다음부터는 자동으로 1씩 증가합니다. 

기본적으로 enum의 첫 번째 멤버는 0부터 시작하여 숫자 값을 가지지만, 이는 변경할 수 있습니다. 

 

enum의 멤버에 명시적으로 값을 할당할 수도 있습니다.

enum Color {
    Red = 4, // Red === 4
    Green, // Green === 5
    Blue // Blue === 6
}

enum Color {
    Red = 4, // Red === 4
    Green = 7, // Green === 7
    Blue // Blue === 8
}

또한 enum은 문자열 값도 가질 수 있습니다.

enum Color1 {
    Red = 'RED',
    Green = 'GREEN',
    Blue = 'BLUE'
}

enum Color2 {
    Red = 'RED',
    Green = 'GREEN',
    Blue = 'BLUE',
    White, // Error!
}

enum Color3 {
    Red = 'RED',
    Green = 'GREEN',
    Blue = 2,
    White, // OK! White === 3
}

문자열 enum에서는 각 멤버의 값을 반드시 지정해야 합니다.

문자열과 숫자를 섞어서 쓸 경우에는 Color3과 같은 경우를 따라야 합니다.

Color2와 Color3 enum을 꼭 참고하세요.

타입스크립트의 enum에서 숫자와 문자열을 혼용하는 것은 가능하지만, 일반적으로 권장되지 않습니다.

 

이렇게 enum은 숫자나 문자열 값의 집합에 읽기 쉬운 이름을 제공하여 코드의 가독성을 높이는 데 유용합니다.

 

다음은 enum의 사용법 입니다.

enum Direction {
    Up,
    Down,
    Left,
    Right
}

let dir: Direction = Direction.Up;

if (dir === Direction.Up) { // 값 비교하기
    console.log('You are going up!');
}

//enum의 값으로부터 이름을 얻는 것이 가능
console.log(Direction[Direction.Up]); // "Up"
console.log(Direction[1]); // "Down"
console.log(Direction.Left); // 2

tuple

타입스크립트에서 튜플(Tuple)은 미리 정의된 수의 요소와 그 요소의 타입을 가진 배열 타입입니다. 

각 요소는 다른 타입을 가질 수 있습니다. 

튜플은 구조화된 데이터를 표현하거나, 여러 값들을 묶어서 하나의 단위로 처리할 때 유용합니다.

let x: [string, number];

 

위 예제에서 x는 하나의 문자열 요소와 하나의 숫자 요소를 가진 튜플입니다.

튜플에 값을 할당하는 방법은 다음과 같습니다:

x = ["hello", 10]; // OK
x = [10, "hello"]; // Error

튜플의 각 요소에 접근하는 방법은 배열과 같습니다.

console.log(x[0]); // "hello"
console.log(x[1]); // 10

튜플의 인덱스를 벗어나는 요소에 접근하려고 하면 오류가 발생합니다.

console.log(x[2]); // Error