2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

타입스크립트에서 Record 타입은 무엇인가요?

_____
Q1: 타입스크립트에서 Record 타입이란 무엇인가요?
A1: `Record` 타입은 타입스크립트 내장 제네릭 유틸리티 타입 중 하나로, 특정 키 집합을 가진 객체 타입을 정의할 때 사용합니다. `Record` 형태로, `K`는 키 타입 (일반적으로 문자열 리터럴 타입 또는 유니언 타입), `T`는 각 키에 대응하는 값의 타입을 의미합니다.

---

Q2: `Record` 타입을 사용하는 기본 문법은 어떻게 되나요?
A2:
```typescript
Record
```
- `Keys`: 객체의 키가 될 타입 (보통 문자열 리터럴 또는 `string`/`number`/`symbol` 타입의 유니언)
- `Type`: 각 키의 값으로 지정할 타입

예:
```typescript
type Person = Record<'name' | 'age', string | number>;
```

---

Q3: `Record` 타입과 일반 객체 타입 선언과의 차이는 무엇인가요?
A3:
- 일반 객체 타입은 수동으로 각 키와 값을 명시
- `Record`는 키 집합과 값 타입을 간결하게 정의할 수 있어 코드 재사용성과 가독성 향상
예:
```typescript
type User = {
id: number;
name: string;
};
// Record로 작성하면
type UserRecord = Record<'id' | 'name', number | string>;
```

---

Q4: `Record`를 사용하면 어떤 장점이 있나요?
A4:
- 특정 키 집합에 대한 타입 안전 보장
- 코드가 간결해지고 재사용 가능
- 동적으로 키 타입 조합 생성 가능 (예: 유니언 타입 사용)
- 인터페이스 대신 간편하게 타입 생성 가능

---

Q5: 예제를 통해 `Record` 타입을 설명해주세요.
A5:
```typescript
type Roles = 'admin' | 'user' | 'guest';
type Permissions = Record;

const userPermissions: Permissions = {
admin: false,
user: true,
guest: true,
};
```
이 예제는 `Roles` 키를 가진 객체를 정의하며, 각 키는 `boolean` 값을 갖습니다.

---

Q6: `Record` 와 같이 사용해도 되나요?
A6: 네, `Record`는 모든 문자열 키에 대해 `any` 타입 값을 가지는 객체를 뜻합니다. 하지만, 타입 안전성을 위해 구체적인 키 또는 값 타입을 지정하는 것이 좋습니다.

---

Q7: `Record` 타입으로 배열 타입을 정의할 수 있나요?
A7: `Record` 타입은 객체의 속성 타입을 정의할 때 사용하므로 배열은 직접 정의하지 않습니다. 배열 타입에는 `Array` 또는 `T[]`를 사용합니다.

---

Q8: `Record` 타입으로 숫자 키를 쓰려면 어떻게 하나요?
A8: 숫자 키를 사용하려면 키 타입에 `number`를 쓰면 됩니다.
예:
```typescript
type NumberKeyRecord = Record;
const obj: NumberKeyRecord = {
1: "one",
2: "two",
};
```

---

Q9: `Record`는 언제 사용하면 좋나요?
A9:
- 객체 키가 명확하고 제한된 집합일 때
- 각 키가 동일한 타입을 가지는 객체를 표현할 때
- 유니언 타입으로 동적 키 집합을 만들고 싶을 때

---

Q10: `Record`와 맵 타입, 인덱스 시그니처의 차이점은 무엇인가요?
A10:
- 인덱스 시그니처 (`{ [key: string]: T }`)는 모든 문자열 키를 허용하고 동일한 값 타입을 가지지만, 키 집합이 제한되지 않음
- `Record`는 키 집합을 명확히 제한할 수 있어 타입 안정성이 높음
- 맵 타입(`Map`)은 런타임 맵 객체이고, `Record`는 컴파일 타임 타입 구성임

---

이상으로 타입스크립트에서 `Record` 타입의 정의, 사용법, 장점 등에 대한 FAQ였습니다.
TypeScript에서 `Record` 타입은 특정 키와 값의 쌍을 정의하는 유틸리티 타입입니다.

이 타입은 객체의 구조를 정의할 때 유용하게 사용되며, 특히 동적으로 생성된 객체의 타입을 명확하게 지정할 수 있도록 도와줍니다.

기본 구조 `Record` 타입은 두 개의 제네릭 타입 매개변수를 받습니다: 1. K : 객체의 키 타입을 정의합니다.

이 타입은 문자열 리터럴, 숫자 리터럴, 또는 심볼 타입일 수 있습니다.



2. T : 객체의 값 타입을 정의합니다.

이 타입은 어떤 타입이든 될 수 있습니다.

`Record`의 구조는 다음과 같습니다: ```typescript type Record = { [P in K]: T; }; ``` 이 구조는 `K`에 정의된 모든 키에 대해 `T` 타입의 값을 가지는 객체를 생성합니다.

사용 예시 1. 기본 사용법 : ```typescript type User = { id: number; name: string; }; type UserRecord = Record; const users: UserRecord = { user1: { id: 1, name: "Alice" }, user2: { id: 2, name: "Bob" }, }; ``` 위의 예시에서 `UserRecord`는 문자열 키를 가지며, 각 키에 대해 `User` 타입의 값을 가지는 객체를 정의합니다.



2. 리터럴 타입 사용 : ```typescript type Role = 'admin' | 'user' | 'guest'; type Permissions = Record; const permissions: Permissions = { admin: true, user: false, guest: false, }; ``` 여기서 `Permissions` 타입은 `Role` 타입의 각 리터럴에 대해 `boolean` 값을 가지는 객체를 정의합니다.



3. 동적 키 사용 : `Record` 타입은 동적으로 생성된 키를 사용할 때도 유용합니다.

```typescript const keys = ['name', 'age', 'email'] as const; type UserKeys = typeof keys[number]; // 'name' | 'age' | 'email' type UserInfo = Record; const userInfo: UserInfo = { name: "Charlie", age: "30", email: "[email protected]", }; ``` 위의 예시에서 `UserKeys`는 `keys` 배열의 각 요소를 타입으로 가지며, `UserInfo`는 이 키들에 대해 `string` 값을 가지는 객체를 정의합니다.

장점 - 타입 안전성 : `Record`를 사용하면 객체의 키와 값의 타입을 명확하게 정의할 수 있어, 타입 안전성을 높일 수 있습니다.

- 유연성 : 다양한 형태의 객체를 쉽게 정의할 수 있으며, 동적 키를 사용할 때도 유용합니다.

- 가독성 : 코드의 가독성을 높여주며, 객체의 구조를 명확하게 표현할 수 있습니다.

결론 TypeScript의 `Record` 타입은 객체의 키와 값의 타입을 정의하는 데 매우 유용한 도구입니다.

이를 통해 코드의 타입 안전성을 높이고, 가독성을 개선하며, 다양한 형태의 객체를 쉽게 다룰 수 있습니다.

`Record`를 적절히 활용하면 TypeScript의 강력한 타입 시스템을 최대한 활용할 수 있습니다.

작성자: 이수민 [비회원] | 작성일자: 1년 전 2024-09-10 05:32:14
조회수: 151 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.