타입스크립트(TypeScript)에서 {}와 Object 타입은 종종 혼동을 일으키는 주제입니다. 이 두 타입은 모두 자바스크립트 객체를 설명하는 데 사용되지만, 그 사용법과 의미에는 중요한 차이가 있음
null과 undefined를 제외한 모든 타입이라고 보면됨 (포함하면 unknown)
const x: {} = "hello"; const y: Object = "hi"; //대문자 Object와 {} 는 모든타입 (null과 undefined 제외) //unknown = {} | null | undefined
{} 타입
타입스크립트에서 {}는 "빈 객체 타입"을 나타냅니다. 하지만 "빈"이라는 말이 혼란을 줄 수 있는데, 이는 속성이 전혀 없는 객체만을 의미하는 것이 아닙니다. 실제로 {} 타입은 모든 비원시(non-primitive) 타입에 할당할 수 있는 가장 범용적인 타입입니다. 이는 {} 타입이 "어떤 종류의 객체도 될 수 있음"을 의미합니다. 하지만, 특정 속성이나 메서드를 가진 객체를 명시적으로 기술하려면, 더 구체적인 타입이나 인터페이스를 사용해야 합니다.
예시:
let user: {} = { name: "John Doe", age: 30 };
이 코드는 문제없이 작동하지만, user 객체에 대해 특정 속성을 가정하고 작업할 때 타입스크립트가 타입 안정성을 제공하지 못합니다. 즉, {} 타입은 속성에 대한 정보가 없으므로, 어떤 속성에도 접근하려 할 때 컴파일러 수준에서 오류를 잡아내지 못합니다.
Object 타입
Object 타입은 ECMAScript 표준의 Object를 나타냅니다. 이는 원시 타입(문자열, 숫자, 불리언, 심볼, null, undefined)을 제외한 모든 타입을 포함합니다. Object 타입은 {}보다는 약간 더 구체적이지만, 여전히 매우 광범위합니다. Object 타입을 사용하면, 객체가 원시 타입이 아니라는 것만 알 수 있으며, 객체의 구체적인 구조에 대해서는 알 수 없습니다.
예시:
let person: Object = { name: "Jane Doe", age: 25 };
여기서 person은 Object 타입이므로, 원시 값이 아닌 모든 값을 할당할 수 있습니다. 그러나 이 타입을 사용할 때도, person 객체의 구체적인 속성에 안전하게 접근하기 위해서는 타입 단언이나 타입 가드를 사용해야 할 수 있습니다.
언제 무엇을 사용해야 할까요?
- 구체적인 타입이 필요하지 않고, 단순히 어떤 객체든 받아들일 때: {} 타입을 사용할 수 있습니다. 하지만 가능하다면, 항상 더 구체적인 타입이나 인터페이스를 선호해야 합니다.
- 원시 값이 아닌 값을 받아들여야 하지만, 그 형태가 중요하지 않을 때: Object 타입을 사용할 수 있습니다. 그러나 이 경우에도, 가능한 한 구체적인 타입을 사용하는 것이 좋습니다.
결론
타입스크립트에서 {}와 Object 타입은 모두 유용한 용도가 있지만, 가급적이면 더 구체적인 타입을 사용하는 것이 좋습니다. 이렇게 함으로써, 타입스크립트의 타입 시스템을 최대한 활용하여 코드의 안정성을 높이고, 개발 과정에서 발생할 수 있는 오류를 최소화할 수 있습니다.
'프로그래밍 > Typescript' 카테고리의 다른 글
타입 스크립트 인덱스드 시그니처(indexed signature) (0) | 2024.02.04 |
---|---|
인터페이스 연습 (0) | 2024.01.05 |