[TypeScript] 타입별칭 & 이넘

Main·2023년 9월 7일
0

TypeScript

목록 보기
3/8
post-thumbnail

타입 별칭(type alias)이란?

타입 별칭(type alias)은 특정 타입이나 인터페이스 등을 참조할 수 있는 타입 변수를 의미합니다.
즉, 타입에 의미를 부여해서 별도의 이름으로 부르는 것입니다.
타입 별칭은 반복되는 타입 코드를 줄여 줄 수 있습니다.

타입 별칭 예시 코드

// 타입 별칭 정의
type name = string;
let jon: name = "jon"

// 타입 별칭 정의
// string | number 타입을 반복 사용을 줄일 수 있음
type MyMessage = string | number;
function logText(text: MyMessage)  {
 console.log(text); 
}
let messageStr: MyMessasge = 'hello';
logText(messageStr);
let messageNum: MyMessage = 10;
logText(messageNum);

타입별칭과 인터페이스의 차이점

1 ) 인터페이스는 주로 객체의 타입을 정의하는데 사용되는 반면, 타입 별칭은 일반타입에 이름을 짓는데 사용하거나 유니언 타입( | ) 등에 사용합니다.

2 ) 유니언 타입( | ), 인터섹션 타입( & ) 등은 인터페이스에서 사용할 수 없습니다.

3 ) 타입 별칭은 뒤에는 유틸리티 타입, 맵드 타입에 사용할 수 있습니다.

4 ) 인터페이스는 상속을 통해 타입 확장을 하지만 타입 별칭은 인터섹션 타입( & )을 통해 타입 확장을 할 수 있습니다. 추가로 인터페이스에서는 같은 이름으로 인터페이스를 정의하면 해당 인터페이스 속성을 합치는 선언 병합(declaration merging)이라는 성질이 있습니다.

타입 별칭과 인터페이스 사용 구분

먼저, 인터페이스를 주로 사용해보고 타입 별칭이 필요할 때 타입 별칭을 쓰는 것이 권장됩니다.

타입 별칭의 사용

타입 별칭으로만 정의 가능한 타입은 주요 데이터 타입, 인터섹션 타입, 유니언 타입입니다. 인터페이스는 객체 타입을 정의할 때 사용되는 타입이므로 아래와 같은 타입은 인터페이스로 정의할 수 없습니다.

type name = string;
type text = string | number;
type Admin = Person & Developer;

타입 별칭은 아래와 같이 유틸리티 타입(utility type)과 맵드 타(mapped)타입과도 연동하여 사용할 수 있습니다.

//  유틸리티 타입 pick
type Profile = {name: string, age: number};
type name = Pick<Profile, 'name'>

 // 맵드 타입
type Picker<T, K extends keyof T> = {
  [P in K]: T[P];
} 

인터페이스의 사용

인터페이스는 주로 벡엔드와의 인터페이스를 정의하는 곳에서는 인터페이스를 사용합니다.

💡 벡엔드 인터페이스란?
웹 서비스를 프론트 엔드와 백엔드로 역할을 나누어서 개발할 때 백엔드에서 프론트엔드로 어떻게 데이터를 넘길지 정의하는 작업


이넘(enum)이란?

이넘(enum)은 특정 값의 집합을 의미하는 데이터 타입이며,상수 집합이라고도 표현합니다.
이넘의 종류에는 숫자형 이넘, 문자형 이넘이 있습니다.

숫자형 이넘(Number Enum)

  • 이넘 속성은 기본적으로 숫자 값을 가지며, 첫 번째 속성무터 0, 1, 2 ... 값이 기본값으로 할당 됩니다.
  • 이넘 속성은 속성과 값이 거꾸로 연결되어 할당되는 리버스 매핑 성질을 갖습니다.
  • 이넘의 숫자 속성 값을 바꾸고 싶으면 속성 값에 원하는 숫자값을 할당하면 됩니다.
  • 숫자 값 할당한 속성 이후 선언된 속성들은 자동으로 1씩 증가하는 숫자 값 속성을 가지게 됩니다.
enum Direction {
  Up, // 0
  Down, // 1
  Left, // 2
  Right // 3
}

enum Direction {
  Up = 10, // 10
  Down, // 11
  Left, // 12
  Right // 13
}

문자형 이넘(String Enum)

  • 문자형 이넘이란 이넘의 속성 값에 문자열을 연결한 이넘을 의미합니다.
  • 숫자형 이넘과 다르게 모든 속성 값을 다 문자열로 지정해주어야하며, 선언된 순서대로 숫자 값이 증가하는 규칙도 없습니다.
enum Direction {
  Up = 'Up',
  Down = 'Down',
  Left = 'Left',
  Right = 'Right'
}

혼합 이넘(Heterogeneous Enum)

  • 숫자형 이넘과 문자형 이넘 말고 다양한 형태로 선언한 이넘을 의미합니다.
enum Answer {
  Yse = 'Y',
  No = 0
}

enum Authorizaion {
  User, // 0
  Admin, // 1
  // 연산자 활용 가능
  SuperAdmin = User + Admin // 1,
  Developer = "developer".length //9
}

const 이넘(Const Enum)

  • 이넘을 선언할 때 앞에 const를 붙인 이넘을 의미합니다.
  • 이넘에 const를 붙이는 이유는 컴파일의 결과물의 코드양을 줄이기 위해서 입니다. 아래에서 컴파일 코드양 에서 const를 붙인 컴파일 코드양이 줄어든 것을 볼 수 있습니다.

const를 적용하지 않은 enum 컴파일 코드

const를 적용한 enum 컴파일 코드


정리

타입 별칭(type alias)은 타입에 의미 있는 이름을 부여하거나 반복되는 타입 코드를 줄이기 위해 사용됩니다.
인터페이스는 벡엔드와의 인터페이스를 정의하는 곳에서는 인터페이스를 사용하고, 타입별칭은 타입 정의가 가능한 곳에서만 사용하며, 인터페이스로 정의할 수 없는 곳에는 타입 정의를 사용해야합니다.

이넘(enum)은 특정 값의 집합을 의미하는 데이터 타입입니다.
이넘의 종류에는 숫자형 이넘문자형 이넘이 있으며, 기본적으로 숫자형 이넘의 경우 숫자형 속성 값이 자동으로 1씩 증가하는 형태로 지정됩니다. 문자형 이넘에서는 숫자형 속성 값이 1씩 증가하는 규칙이 없으며, 모든 속성값을 지정해주어야합니다.
숫자형 이넘과 문자형 이넘 이외에도 이넘을 다양한 형태로 선언할 수 있습니다.

profile
함께 개선하는 개발자

0개의 댓글