프로그래밍/Typescript

TypeScript의 유틸리티 타입: Record의 모든 것

shimdh 2025. 4. 9. 08:44
728x90

TypeScript는 강력한 타입 시스템을 제공하여 개발자들이 보다 안전하고 효율적인 코드를 작성할 수 있도록 돕습니다. 그 중에서도 Record 유틸리티 타입은 동적인 데이터 구조를 정의하는 데 매우 유용한 도구입니다. 이번 블로그 포스트에서는 Record의 기본 개념, 사용 예시, 장점 등을 자세히 살펴보겠습니다.

1. 기본 개념

Record<K, T>는 두 가지 제네릭 매개변수를 받습니다:

  • K: 객체의 키가 될 수 있는 문자열 또는 숫자 리터럴 타입입니다. 이 키는 객체의 프로퍼티를 식별하는 데 사용되며, 각 키는 고유해야 합니다.
  • T: 해당 키에 대한 값의 타입입니다. 이 값은 키에 대응하는 데이터의 유형을 정의하며, 다양한 데이터 타입을 사용할 수 있습니다.

즉, Record를 사용하면 주어진 키 집합과 그에 따른 값의 타입을 쉽게 정의할 수 있습니다. 이를 통해 개발자는 데이터 구조를 보다 체계적으로 관리할 수 있습니다.

2. 사용 예시

2.1 간단한 예시

학생들의 점수를 저장하는 객체를 만들고 싶다고 가정해봅시다. 각 학생의 이름(문자열)을 키로 하고, 점수(숫자)를 값으로 하는 구조체가 필요합니다. 이 경우 Record를 사용하여 간단하게 타입을 정의할 수 있습니다.

type StudentScores = Record<string, number>;

const scores: StudentScores = {
    "Alice": 85,
    "Bob": 92,
    "Charlie": 78
};

console.log(scores["Alice"]); // 출력: 85

위 코드에서는 StudentScores라는 새로운 타입을 정의했습니다. 이때 모든 학생 이름은 문자열이고 점수는 숫자로 제한됩니다. 이렇게 정의된 타입을 사용하면, 학생의 점수를 쉽게 추가하거나 수정할 수 있습니다.

2.2 더 복잡한 예시

조금 더 복잡한 예제를 보겠습니다. 만약 각 학생이 여러 과목에서 받은 점수를 저장해야 한다면 어떻게 할까요? 이 경우에는 Record를 중첩하여 사용할 수 있습니다. 중첩된 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를 사용했습니다. 이렇게 하면 데이터 구조가 명확하게 분리되고 관리하기 쉬워집니다. 각 과목의 점수를 쉽게 추가하거나 수정할 수 있어, 학생의 성적을 보다 효과적으로 관리할 수 있습니다.

3. 장점

3.1 유연성

  • 다양한 형태의 데이터를 쉽게 다룰 수 있습니다. Record를 사용하면 키와 값의 타입을 자유롭게 조정할 수 있어, 다양한 요구사항에 맞춰 데이터 구조를 설계할 수 있습니다.

3.2 타입 안전성

  • 잘못된 프로퍼티 접근이나 잘못된 데이터 유형을 방지할 수 있어 오류 발생 가능성을 줄여줍니다. TypeScript의 타입 시스템 덕분에 컴파일 시점에서 오류를 발견할 수 있어, 런타임 오류를 예방할 수 있습니다.

3.3 코드 가독성 향상

  • 의도를 명확히 표현함으로써 코드를 읽고 이해하기 쉽게 만들어 줍니다. Record를 사용하면 데이터 구조가 명확해져, 다른 개발자들이 코드를 이해하는 데 도움이 됩니다.

4. 결론

TypeScript에서 Record 유틸리티 타입은 동적인 데이터를 다루거나 여러 개의 프로퍼티가 필요한 상황에서 매우 유용합니다. 이를 통해 개발자는 보다 안전하고 효율적인 코드를 작성할 수 있으며 데이터 구조 또한 더욱 명확해집니다. Record를 활용하면 복잡한 데이터 구조를 간단하게 정의하고 관리할 수 있어, 개발 과정에서의 생산성을 높일 수 있습니다.

728x90