ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TS - 너.. T야? : 타입스크립트 제네릭 타입<T>
    개발/JS, TS 2024. 10. 26. 11:10

     

    typescript

     

    타입스크립트로 된 라이브러리를 사용하다 보면 가끔씩 <T>라는 타입이 보일때가 있는데요,
    처음엔 T라는 타입이 대체 어떤 타입일까? 라고 궁금증을 가졌던 기억이 있습니다

     

    그럼 오늘은 그 T 바로 제네릭 타입에 대해서 알아보겠습니다.

     

    제네릭?

    제네릭은 특정 타입을 명시하지 않고, 다양한 타입을 사용할 수 있도록 하는 타입스크립트의 기능으로, 코드 재사용성과 타입 안전성을 높일 수 있습니다. 

     

    사용해보기

    제네릭은 함수, 클래스, 인터페이스에서 사용가능 합니다.

    function identity<T>(arg: T): T {
        return arg;
    }

    위의 함수는 arg의 타입과 return값의 타입을 T로 지정하여 T를 받아 T타입을 반환하게 되는 함수가 됩니다.

    오히려 더 복잡해 보이는건 기분탓이겠죠..?
    좀더 자세히 보겠습니다.

     

    const result1 = identity<string>("Hello, TypeScript!");
    console.log(result1); // "Hello, TypeScript!"
    
    const result2 = identity<number>(42);
    console.log(result2); // 42

     

    위에 보면 identity라는 함수를 사용한 result1과 2가 있는데요
    각 변수의 identity를 자세히 보면 <T>가 아닌 <string>과 <number>가 들어가있습니다.

    이게 바로 제네릭입니다!!
    제네릭은 사용시에 타입을 지정할수 있는 기능이라고 보면 됩니다.

     

    제네릭 제약조건

    작업을 하다보면 특정 타입만 허용해야 되는 상황이 올 수 있습니다.
    예를 들자면 length가 있는 타입만 사용하고 허용해야해! 라는 조건을 걸고 싶을수도 있는데요,
    타입을 유니온 타입으로 지정해서 제한시킬수도 있겠지만 
    제네릭을 활용하면 좀더 간단하게 제한시킬수 있습니다. 

    function logLength<T extends { length: number }>(arg: T): void {
        console.log(arg.length);
    }
    
    logLength("Hello"); // 5
    logLength([1, 2, 3]); // 3
    // logLength(42); // 오류: 'number' 타입은 'length' 프로퍼티가 없습니다.

     

    유니온 타입으로 정의했다면 length 속성을 가진 모든 타입을 지정했어야 하지만

    우리는 length라는 속성을 제네릭에서 제한해두고 좀더 쉽게 사용할수 있습니다.

     

    제네릭은 사용하면 우리는 좀더 간단하게 코드의 재사용성을 확보하고 다양한 타입에 대한 로직적용이 가능하다는 점에서

    효율적이고 안정적인 코드 작성을 할수 있을거라고 봅니다!

     

    오늘도 화이팅!

Designed by Tistory.