[TypeScript] Any 타입 Vs Unknown 타입

Simon·2024년 10월 6일
0
post-thumbnail

TypeScript는 강력한 타입 시스템을 제공하여 코드의 타입 안정성을 보장한다. 그중에서도 anyunknown 타입은 '타입을 모르는' 상태를 표현할 때 사용된다. 하지만 두 타입은 중요한 차이점을 가지고 있으며, 이를 올바르게 이해하고 사용하는 것이 중요하다. 이번 글에서는 anyunknown의 차이점을 살펴보겠다.

any 타입

  • any 타입은 TypeScript에서 '모든 타입'을 의미

  • 어떤 타입이든 될 수 있으며, 해당 값에 대해 아무런 제약 없이 자유롭게 사용 가능

  • any를 사용하면 컴파일러가 타입 검사를 하지 않기 때문에 타입 안정성을 잃음

let value: any;
value = 42;
value = "hello";
value = true;

// 위에 value는 전부 any 타입
// 타입 검사 없이 사용 가능
console.log(value.toUpperCase());  // 런타임 에러가 발생할 수 있음

// Property 'toUpperCase' does not exist on type 'boolean' 에러 발생

위 코드에서 보듯이, any는 매우 자유롭게 사용할 수 있지만, 그만큼 실수를 감지하지 못하고 런타임에서 에러를 일으킬 수 있다. any는 매우 편리하지만, 타입 안정성을 희생하는 결과를 초래할 수 있다.

unknown 타입

  • unknown 타입은 any와 유사하게 '모든 타입이 될 수 있다'는 의미

  • 중요한 차이점은, unknown 타입으로 선언된 값은 타입이 확정되지 않으면 사용이 제한된다는 점

  • 이를 통해 타입 안전성을 보장

let value: unknown;
value = 42;
value = "hello";

// 바로 사용 불가
// console.log(value.toUpperCase());  // 에러

'value' is of type 'unknown'.(18046) 에러 메시지
 

// 타입 검사를 통해 안전하게 사용 가능
if (typeof value === "string") {
    console.log(value.toUpperCase());  // 정상 동작
}

unknown은 항상 타입 검사를 통해 값의 타입을 확정해야만 사용할 수 있기 때문에, any보다 안전한 방식으로 값을 다룰 수 있다. 이는 unknown 타입의 주요 장점으로, 런타임 에러를 줄이는 데 도움이 된다.

특징anyunknown
타입 안전성낮음높음
사용 가능 여부즉시 사용 가능타입 검사 후 사용 가능
컴파일러 타입 검사없음타입 검사 필요
사용 목적타입 안정성보다는 자유로운 사용이 필요할 때안전한 타입 검사가 필요한 경우

어떤 타입을 선택해야 할까?

  • any는 매우 유연하지만, 타입 안정성을 희생

  • 정말로 타입을 모르는 경우에만 사용하고, 가능하면 unknown 타입을 사용

  • unknown 타입은 타입 검사를 강제하므로, 타입 안전성을 유지하면서 유연한 코드를 작성 가능

결론적으로, 타입 안정성이 중요한 코드에서는 unknown을 사용하는 것이 더 좋은 선택이 될 수 있다. any는 꼭 필요한 상황에서만 사용하는 것이 좋다.

profile
포기란 없습니다.

0개의 댓글

관련 채용 정보