고급 TypeScript - 유틸리티 타입: Readonly

유틸리티 타입: Readonly

Readonly`는 TypeScript에서 제공하는 유틸리티 타입 중 하나로, 객체의 모든 속성을 읽기 전용으로 만드는 데 사용됩니다. 이 타입은 주로 데이터 무결성을 보장하고, 객체가 의도치 않게 수정되는 것을 방지하기 위해 활용됩니다.

기본 개념

  • 읽기 전용: Readonly를 적용한 객체는 그 속성 값을 변경할 수 없습니다. 이는 코드의 안정성을 높이고, 예측 가능한 동작을 보장합니다.
  • 불변성 유지: 상태 관리나 함수형 프로그래밍 패턴을 사용할 때 불변성을 유지하는 것이 중요합니다. Readonly는 이러한 불변성을 쉽게 구현할 수 있게 해줍니다.

사용법

Readonly<T> 제네릭 타입을 사용하여 특정 객체에 적용할 수 있습니다. 여기서 T는 읽기 전용으로 만들고자 하는 객체의 타입입니다.

interface User {
    name: string;
    age: number;
}

// Readonly를 사용하여 User 인터페이스를 읽기 전용으로 만듭니다.
const user: Readonly<User> = {
    name: "Alice",
    age: 30,
};

// 다음 줄은 오류가 발생합니다.
// user.age = 31; // Error: Cannot assign to 'age' because it is a read-only property.

위 예제에서 볼 수 있듯이, user 객체의 속성인 nameage는 모두 읽기 전용입니다. 따라서 해당 속성들을 수정하려고 하면 컴파일 타임에 오류가 발생하게 됩니다.

Practical Example

다음은 실제 애플리케이션에서 어떻게 활용될 수 있는지를 보여주는 예시입니다:

function printUserInfo(user: Readonly<User>): void {
    console.log(`Name: ${user.name}, Age: ${user.age}`);
}

const user1 = { name: "Bob", age: 25 };
printUserInfo(user1);

// 아래 코드는 여전히 에러를 발생시킵니다.
// user1.age = 26; // Error!

이와 같은 방식으로 함수를 정의함으로써 외부에서 전달된 사용자 정보가 변경되지 않도록 보장할 수 있습니다.

요약

  • 안전성과 일관성 : Readonly<T>를 통해 데이터를 안전하게 보호하며, 코드 작성 시 실수로 인한 버그를 줄일 수 있습니다.
  • 유지보수 용이 : 프로젝트 규모가 커질수록 데이터 구조가 복잡해지는데, 이를 명확히 하고 관리하기 쉽게 만들어 줍니다.

결론

TypeScript의 유틸리티 타입인 Readonly는 데이터 무결성과 안정성을 높이는 데 중요한 역할을 합니다. 특히 대규모 애플리케이션이나 팀 프로젝트에서는 이와 같은 기능들이 더욱 중요해집니다. 이를 적절히 활용하면 코드 품질과 유지보수성이 크게 향상될 것입니다.

Subscribe to shimdh.log

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe