any와 unknown 타입에 대해 알아보자 - Typescript

any와 unknown 타입에 대해 알아보자 - Typescript

any와 unknown 은 언제 어떻게 사용하면 좋을까?

·

2 min read

✅ any와 unknown 타입은 무엇인가요?

  • any 타입: TypeScript에서 any 타입은 모든 종류의 값을 할당할 수 있음을 나타내며, 이는 TypeScript 컴파일러에 의한 타입 체크를 회피할 수 있게 해줍니다. 이는 기본적으로 타입 시스템을 무시하고 JavaScript와 같이 동적으로 코드를 작성하고 싶을 때 사용됩니다.

  • unknown 타입: TypeScript 3.0에서 도입된 unknown 타입은 any 타입과 유사하게 모든 종류의 값을 할당할 수 있지만, unknown 타입의 값을 사용하기 전에 해당 값의 타입을 좀 더 구체적으로 검사해야 합니다. 이는 더 안전한 타입 사용을 유도합니다.

✅ any와 unknown은 뭐가 다른가요?

  • 타입 안정성: any 타입은 타입 체크를 회피하여 타입 안정성을 감소시키는 반면, unknown 타입은 값을 사용하기 전에 타입 검사를 수행함으로써 더 안전한 타입 사용을 가능하게 합니다.

  • 제어권: any 타입을 사용하면 개발자가 TypeScript의 타입 시스템 제어를 완전히 포기하는 것과 같지만, unknown 타입은 개발자에게 타입을 확인하고 처리하는 책임을 줍니다.

  • any의 장점: 다만 any는 안전하지 않고, 제어권에 대해 좀 더 포기한 만큼 자유로운 코드 작성이 가능합니다.

🖥 any가 위험한 케이스

function dangerous(param: any) {
    console.log(param.toUpperCase());
}

// 런타임 오류 발생 가능: 'toUpperCase'는 숫자에서 사용할 수 없음.
dangerous(10);

🖥 unknown 이 안전한 케이스

function safe(param: unknown) {
    if (typeof param === 'string') {
        console.log(param.toUpperCase()); // 안전하게 사용
    } else {
        console.log('Not a string');
    }
}

safe('hello'); // "HELLO"
safe(10); // "Not a string"

🔎 any보다 안전한 unknown 타입 탄생 비화

위에서 잠시 언급 했듯 unknown 타입은 Typescript 3.0 때 생겼습니다. 이는 필요에 의한 것이었는데요. unknown타입이 있기 전 any는 Typescript에서 가장 많이 사용되는 타입이었습니다. 하지만 단점이 명확했죠. 타입 중에 "이 값은 어떤 값일 수 있으므로 사용하기 전에 어떤 유형의 검사를 수행해야 합니다" 라는 신호를 보내줄 수 있는 타입이 필요 했습니다.(RC 발표 참고) 그리고 바로 그 역할을 수행해 줄 수 있는 unknown 타입이 생기게 됐습니다.

✨간단하게 정리해보겠습니다.

any 타입은 TypeScript의 타입 체크를 회피하여 모든 값을 받을 수 있지만, unknown 타입은 타입 안전성을 보장하기 위해 값을 사용하기 전에 타입을 검사해야 합니다. any 타입의 사용은 타입 체크를 우회 함으로써 런타임 오류의 위험을 증가 시킬 수 있으며, unknown 타입은 타입 검사를 통해 보다 안전한 코드 작성을 가능하게 합니다.

각자가 처한 상황에 맞게 팀에서 논의해서 빠른 기능 구현에 도움이 되는 any 타입을 사용할지, 유지 보수가 용이하고 안전한 unknown 타입을 사용할지 정하면 좋겠습니다.