[typescript] 가변성 문제와 공변성의 개념

TypeScript는 JavaScript에 정적 타입을 추가한 언어로, 가변성과 공변성을 다루는데 중요한 요소입니다. 이번 블로그에서는 이 두 가지 개념에 대해 알아보고, TypeScript에서의 활용 방법을 다루겠습니다.

가변성 (Variance)

가변성이란 객체가 변하는 정도를 나타내는 개념으로, 타입 시스템에서의 변화 관계를 설명합니다. TypeScript에서는 불변성(readonly)과 가변성(mutable)을 사용하여 가변성을 다룹니다.

예를 들어, readonly 키워드를 사용하면 해당 객체는 불변성을 가지며, 해당 객체를 변경하는 시도는 에러를 발생시킵니다. 이를 통해 객체의 가변성을 제어할 수 있습니다.

또한, TypeScript는 ReadonlyPartial과 같은 유틸리티 타입을 제공하여 가변성을 유연하게 조절할 수 있습니다.

공변성 (Covariance)

공변성은 부모 타입과 그 자식 타입의 관계를 설명하는데 사용되며, TypeScript에서는 배열의 공변성을 지원합니다.

예를 들어, Animal 타입의 배열을 Dog 타입의 배열로 할당할 수 있습니다. 이는 부모 타입과 그 자식 타입 사이의 관계를 반영한 것으로, TypeScript에서는 이러한 공변성을 허용합니다.

class Animal {}
class Dog extends Animal {}

let animals: Animal[] = [new Dog(), new Dog()];

결론

가변성과 공변성은 TypeScript에서 중요한 개념으로, 객체의 변화와 타입 간의 관계를 정확히 다루기 위해 이해해야 합니다. 이러한 개념을 잘 이해하고 활용함으로써 더욱 안정적이고 강력한 TypeScript 코드를 작성할 수 있습니다.

이상으로 TypeScript의 가변성과 공변성에 대해 알아보았습니다. 추가적인 관련 정보는 TypeScript 공식 문서를 참고하시기 바랍니다.