고급 TypeScript - 유틸리티 타입: Record
유틸리티 타입: Record
Record
는 TypeScript에서 제공하는 유틸리티 타입 중 하나로, 특정 키와 값의 유형을 정의할 수 있게 해줍니다. 이 타입은 객체의 형태를 정의하고, 특히 동적으로 생성되는 프로퍼티에 대해 매우 유용합니다.
1. 기본 개념
Record<K, T>
는 두 가지 제네릭 매개변수를 받습니다:
- K: 객체의 키가 될 수 있는 문자열 또는 숫자 리터럴 타입입니다.
- T: 해당 키에 대한 값의 타입입니다.
즉, Record
를 사용하면 주어진 키 집합과 그에 따른 값의 타입을 쉽게 정의할 수 있습니다.
2. 사용 예시
예를 들어, 학생들의 점수를 저장하는 객체를 만들고 싶다고 가정해봅시다. 각 학생의 이름(문자열)을 키로 하고, 점수(숫자)를 값으로 하는 구조체가 필요합니다.
type StudentScores = Record<string, number>;
const scores: StudentScores = {
"Alice": 85,
"Bob": 92,
"Charlie": 78
};
console.log(scores["Alice"]); // 출력: 85
위 코드에서는 StudentScores
라는 새로운 타입을 정의했습니다. 이때 모든 학생 이름은 문자열이고 점수는 숫자로 제한됩니다.
3. 더 복잡한 예시
조금 더 복잡한 예제를 보겠습니다. 만약 각 학생이 여러 과목에서 받은 점수를 저장해야 한다면 어떻게 할까요? 이 경우에는 Record
를 중첩하여 사용할 수 있습니다.
type SubjectScores = Record<string, number>;
type StudentRecords = Record<string, SubjectScores>;
const studentRecords: StudentRecords = {
"Alice": {
Math: 90,
English: 80,
Science: 88
},
"Bob": {
Math: 75,
English: 95,
Science: 82
}
};
console.log(studentRecords["Alice"]["Math"]); // 출력: 90
여기서는 각 학생마다 과목별 점수를 기록하기 위해 또 다른 Record
를 사용했습니다. 이렇게 하면 데이터 구조가 명확하게 분리되고 관리하기 쉬워집니다.
4. 장점
- 유연성 : 다양한 형태의 데이터를 쉽게 다룰 수 있습니다.
- 타입 안전성 : 잘못된 프로퍼티 접근이나 잘못된 데이터 유형을 방지할 수 있어 오류 발생 가능성을 줄여줍니다.
- 코드 가독성 향상 : 의도를 명확히 표현함으로써 코드를 읽고 이해하기 쉽게 만들어 줍니다.
결론
TypeScript에서 Record
유틸리티 타입은 동적인 데이터를 다루거나 여러 개의 프로퍼티가 필요한 상황에서 매우 유용합니다. 이를 통해 개발자는 보다 안전하고 효율적인 코드를 작성할 수 있으며 데이터 구조 또한 더욱 명확해집니다.