My Boundary As Much As I Experienced

unknown 타입은 왜 쓰나? 본문

FrontEnd/TypeScript

unknown 타입은 왜 쓰나?

Bumang 2024. 5. 4. 19:07

unknown 타입이란?

타입스크립트에서 unknown 타입은 any 타입보다 좀 더 안전한 대안이다.

어떤 타입의 값이든 받을 수 있지만, 실제 어떤 값인지 명확하게 확인한 다음에야 사용할 수 있다.

 

unknown 타입을 사용하는 상황

  1. API응답 / 동적 콘텐츠 처리: 외부에서 입력받은 데이터나 다른 라이브러리로부터 오는 컨텐츠를 처리할 때, 해당 데이터의 타입이 불명확하거나 잘 모르겠을 때 unknown을 사용할 수 있다. 이렇게 하면 코드 내에서 추후 해당 값에 대한 타입 검사를 강제하고, 더 안전하게 데이터를 다룰 수 있다.
  2. 타입 가드 사용 강제: unknown 타입의 변수는 직접적인 연산이나 메소드 호출이 제한된다. 타입 가드(type guards)를 사용하여 이 변수의 실제 타입을 좁혀 나가며 필요한 연산을 수행할 수 있다.

 

예제 코드: unknown 타입 사용

function safelyHandle(data: unknown): void {
  if (typeof data === "string") {
    console.log(data.toUpperCase()); // 데이터가 문자열인 경우에만 실행
  } else if (typeof data === "number") {
    console.log(data.toFixed(2)); // 데이터가 숫자인 경우에만 실행
  } else {
    console.log("Type is not supported"); // 지원되지 않는 타입
  }
}

// 예시 호출
safelyHandle("hello");  // 출력: "HELLO"
safelyHandle(10);       // 출력: "10.00"
safelyHandle(true);     // 출력: "Type is not supported"

이 예제에서 safelyHandle 함수는 unknown 타입의 data 매개변수를 받는다.

함수 내부에서는 typeof 연산자를 사용하여 데이터의 타입을 확인하고, 해당 타입에 맞는 적절한 처리를 수행한다.

이러한 방식으로 unknown 타입을 사용하면 런타임에 타입 오류가 나는걸 (적어도 any보단) 잘 막을 수 있다.

 

결론

any를 써도 비슷하게 구현할 수 있지않냐고 물을 수 있다.

그렇다. any로 매개변수를 받아도 타입검사 다 한 다음에 적절한 처리를 할 수 있다.

그러나 unknown은 타입검사 안 하면 메소드 호출이나 참조 자체가 안 되게 막혀져 있으니 더 안심이 된다. 그것 뿐이다.

 

그리고 의미적으로도 any라고 하면 그냥 뭐든 다 될 것 같다는 의미가 있지만,

unknown은 아직 모르긴 하지만 추후 확인해야된다는 의미를 더 시멘틱하게 전달할 수 있다.