Typescript의 Generic (1. 개념과 장점)

eeensu·2023년 8월 7일
0

typescript

목록 보기
15/22
post-thumbnail

Generic의 개념

제네릭(Generic)은 ts에서 함수, 클래스 또는 인터페이스를 작성할 때 타입을 추상화하는 데 사용되는 기능이다. 이를 통해 여러 종류의 타입에 대해 재사용 가능한 코드를 작성할 수 있다. generic은 함수나 클래스를 선언할 때 특정 타입을 지정하지 않고, 나중에 사용할 때 타입을 결정하는 방식으로 작동한다.

generic의 의의는 코드의 재사용성과 타입 안전성을 높이는 것이다. 함수나 클래스를 일반적으로 사용하면서도 여러 종류의 데이터 유형에 적용할 수 있도록 지원하는 기능이다.



기본 사용법

function printHello<T>(message: T): T{
    return message;
}

printHello('hi!');
printHello<number>(52);

사용법은 위와 같다. 함수의 이름과 괄호 사이에 <T> 를 작성한다. 그리고 뒤에오는 인자와 리턴의 타입도 함수의 의도에 맞게 지정해준다. 여기서의 <T>는 타입의 파라미터로, 함수가 입력받는 값과 반환하는 값을 동일한 타입으로 유지하게 해준다.

함수를 호출할 때, printHello('hi!'); 처럼 인자만 넣어주면 함수는 인자의 추론을 자동으로 해준다. 하지만 추론 규정에 따라선 해당 타입은 string이 아닌 'hi!' 리터럴 타입을 가진다. ts는 가장 좁은 범위를 우선으로 추론하기 때문이다.

두 번째 방법인 printHello<number>(52); 처럼 작성하면 인자로 들어오는 타입을 number로 강제로 지정해준다. 첫 번째 방법은 조금 더 유연하게 작성하는 방법이고, 두 번째 방법은 엄격하게 타입을 지정하는 방법이다.



any와의 차이점

얼핏보면, 타입의 재사용성을 높이는 것에 있어서 any와 비슷하게 보일 수 있지만, 차이점을 다음과 같이 비교해보자.

위와 같이 함수를 작성하면 타입 불일치 에러를 인지하지 못하고, 실행할 때 hello(123) undefined 를 출력할 것이다. 이러한 점이 any의 단점이다.

하지만 generic 형식을 활용하면 타입을 추론해주기에 이와같은 문제를 해결할 수 있다.

따라서 generic을 활용하여 위와 같이 작성하면, 실행전에 컴파일 단계에서 오류를 잡아내고 개발자에게 이를 표시해준다. generic 타입이 자동으로 타입을 인식해주는 역할을 하는 것이다.





장점

이를 바탕으로 Generic을 활용하여 ts를 개발하면 어떤 효과가 있는지 살펴보겠다.

  • 재사용성
    제네릭을 사용하면 함수, 클래스, 인터페이스 등을 여러 종류의 데이터 유형에 대해 재사용할 수 있다. 일반적인 로직을 하나의 구현으로 작성하면서 다양한 타입에 대응할 수 있다.

  • 타입 안전성
    제네릭은 컴파일 타임에 타입 검사를 수행하여 오류를 방지하고 안전한 코드를 유지할 수 있도록 도와준다. 올바르지 않은 타입 사용으로 인한 런타임 오류를 사전에 방지할 수 있다.

  • 일반화된 코드
    제네릭을 사용하면 비슷한 로직을 복사-붙여넣기하지 않고도 다양한 타입에 대해 유연한 코드를 작성할 수 있다. 이로써 코드 중복을 줄이고 유지보수성을 향상시킨다.

  • 데이터 구조의 타입 유연성
    제네릭은 배열, 리스트, 스택 등과 같은 데이터 구조에도 적용될 수 있다. 때문에 다양한 데이터 형식에도 유연하게 작동한다.

profile
안녕하세요! 26살 프론트엔드 개발자입니다! (2024/03 ~)

0개의 댓글