[typescript] 타입 가드를 사용한 캡슐화된 데이터 접근

본 포스트에서는 TypeScript에서 타입 가드를 사용하여 캡슐화된 데이터에 안전하게 접근하는 방법을 알아보겠습니다.

1. 타입 가드란 무엇인가요?

타입 가드는 TypeScript에서 특정 타입의 값에 대해 추론된 타입을 보장하기 위한 메커니즘입니다. 이를 통해 구조적으로 불일치하는 데이터에 대한 안전성을 보장할 수 있습니다.

2. 인스턴스 타입 확인

가장 간단한 타입 가드 형태는 instanceof 연산자를 이용하여 특정 클래스의 인스턴스인지 확인하는 것입니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

class Animal {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
}

function isAnimal(obj: any): obj is Animal {
  return obj instanceof Animal;
}

위 코드에서 isAnimal 함수는 objAnimal 클래스의 인스턴스인지 확인하며, 제네릭 타입인 obj is Animal을 반환합니다.

3. 사용자 정의 타입 가드 함수

typeof 또는 instanceof 연산자만으로 충분하지 않을 때, 커스텀한 동작을 정의하기 위해 사용자 정의 타입 가드 함수를 작성할 수도 있습니다. 아래의 예제를 살펴봅시다.

interface Fish {
  swim: () => void;
}

interface Bird {
  fly: () => void;
}

function isFish(pet: Fish | Bird): pet is Fish {
  return (pet as Fish).swim !== undefined;
}

위 코드에서 isFish 함수는 petFish 타입인지 확인하며, 해당 타입을 보장합니다.

4. 유니언 타입과 타입 가드

유니언 타입에서 typeofinstanceof 연산자를 이용하여 구체적인 타입으로의 협업을 도울 수 있습니다. 아래 예제를 통해 살펴봅시다.

function getLength(obj: string | string[]) {
  if (typeof obj === "string") {
    return obj.length; // string
  } else {
    return obj.length; // string[]
  }
}

위 코드에서 typeof 연산자를 이용하여 objstring인지 확인하고, 이에 따라 적절한 동작을 수행합니다.

5. 마치며

타입 가드를 사용하면 TypeScript에서 더욱 안전하고 엄격한 타입 체크를 수행할 수 있으며, 캡슐화된 데이터에 대한 접근을 보다 안전하게 보장할 수 있습니다.

더 많은 자세한 정보는 TypeScript 공식 문서를 참고하시기 바랍니다.