Closed eeeyooon closed 9 months ago
any
타입의 배열에는 모든 타입의 요소가 들어갈 수 있습니다. 타입 검사를 하지 않고 모든 타입이 허용되는 타입으로 취급되기 때문에 요소들의 타입이 전부 같지 않을 수 있습니다.
제네릭은 배열 생성 시점에 원하는 타입으로 특정할 수 있어 배열 요소가 전부 동일한 타입이라고 보장할 수 있으며 타입 검사가 이루어지기 때문에 타입 오류를 사전에 방지할 수 있습니다.
any는 모든 타입을 허용하는 데에 반면, generic은 모든 타입을 허용한다는 의미가 아닌 사용 시점에 원하는 타입으로 선언을 진행합니다.
// any 타입의 배열 : 배열 요소들의 타입이 서로 다를 수 있음
const arrayAny: any[] = [1, "two", true];
// generic 타입의 배열 : 배열 요소들이 특정된 타입으로 선언되어 동일함
const arrayGeneric: Array<number> = [1, "two", true];
// 🚨 Type 'string' is not assignable to type 'number'.
// 🚨 Type 'boolean' is not assignable to type 'number'.
any 타입은 모든 타입을 받기 때문에 any 타입으로 배열 요소들의 타입을 지정할 경우 모든 타입의 값들이 배열 요소로 들어갈 수 있습니다. 반면 제네릭은 배열생성시점에 타입 변수에 원하는 타입을 특정함으로써 배열의 구성요소들의 동일성을 보장할 수 있습니다.
any
타입의 배열은 배열의 각 요소가 어떤 타입이든 될 수 있습니다. 어떤 타입의 데이터도 저장될 수 있지만, 타입 검사를 하지않고 모든 타입이 허용되는 타입으로 취급되기 때문에 타입 안정성이 떨어지고 런타임에 타입 관련 오류가 발생할 가능성이 높아집니다.
let arrayAny: any[] = [1, "string", true, { key: "value" }];
제네릭 타입의 배열은 배열 생성 시점에 원하는 타입을 지정하며, 선언 시 지정된 타입의 요소만 포함할 수 있습니다. 그렇기 때문에 배열의 모든 요소가 동일한 타입임을 보장합니다. 이는 타입 안정성을 높이고, 오류 가능성을 줄입니다.
let arrayGeneric: Array<number> = [1, 2, 3, 4];
arrayGeneric = [1, "string", true];
// error: Type 'string' is not assignable to type 'number'
// Type 'boolean' is not assignable to type 'number'
📝 107p
❓
any
타입과 제네릭 타입을 사용하여 배열을 생성했을 때의 차이점을 설명해주세요.107쪽에서
라고 서술하고 있는데, 둘의 차이점이 무엇이 있는 지 설명해주세요.