반응형

제네릭 이란?

제네릭은 단 하나의 타입으로 사용하는 코드가 아니라 여러 타입과 함께 작동하도록 설계된 코드입니다.

타입 매개 변수를 적용하여 함수, 인터페이스 및 클래스의 제네릭 버전을 만들 수 있습니다.

그리고 제네릭으로 만들어진 함수나 클래스를 이용할 때는 사용하고 싶은 타입을 타입 매개변수에 지정하여 사용하게 됩니다. 따라서 정해진 타입이 아니라 여러 타입으로 작업을 할 수 있습니다.

 

타입 매개변수 란?

타입 매개변수를 사용해서 제네릭을 만든다고 했는데 타입 매개변수는 무엇일까요? 타입 매개변수는 특정 인스턴스 또는 함수 호출이 사용할 타입을 지정할 수 있게 해주는 특별한 타입의 매개변수입니다. 타입 매개변수를 사용해서 제네릭 클래스를 매번 다른 타입으로 여러 번 인스턴스화 할 수 있습니다. 타입 매개변수에 전달된 타입은 인스턴스가 사용할 타입을 결정하게 됩니다. 간단히 제네릭으로 작성한 함수를 살펴보겠습니다.

위에서 printName이라는 함수를 제네릭 함수로 만들었습니다. 제네릭으로 만들어진 함수 호출을 할 때는 함수 매개변수를 둘러싼 괄호 바로 앞에 꺾쇠괄호 <> 안에 전달합니다. 제네릭으로 코드를 작성할 때 코딩 컨벤션에 따라 일반적으로 타입 매개변수는 대문자 T로 표시합니다. 하지만 이것은 요구 사항은 아닙니다.

첫 번째 printName 함수를 호출할 때 타입 매개변수로 string을 전달해 주고 있습니다. 그러면 함수는 T로 지정된 곳이 string으로 대체되어 작동됩니다.

이제 printName은 위 코드와 같이 string 타입으로 작동하게 됩니다. 반면 두 번째 호출은 number로 넘겨주고 있습니다. 그때는 number 타입으로 작동됩니다.

따라서 제네릭으로 코드를 작성할 때는 에러 없이 모든 타입을 받아들여서 작동하게 코드를 작성하는 것이 핵심이 됩니다.

기본 개념은 끝났으니 우리가 흔히 사용하는 Array를 예로 제네릭과 익숙해져 보겠습니다. 제네릭 클래스와 제네릭 함수에 대해서는 이어지는 포스트 글에서 자세히 다루도록 하겠습니다.

 

Array<T> 으로 제네릭 이해하기

타입은 인스턴스가 생성되거나 함수가 호출될 때 필요합니다. 타입 스크립트에는 우리가 자주 사용하는 Array는 제네릭으로 만들어져 포함되어 있습니다. 일반적으로 배열은 우리에게 익숙하기 때문에 Array<T>를 통해 제네릭의 감을 익혀보도록 하겠습니다.

첫 번째 줄에서 applePie라는 Bread의 배열 타입으로 변수를 선언하였습니다. T 유형의 Array를 사용하여 동일한 일을 할 수 있습니다.

두 번째 줄에서 <> 안에 타입 매개변수로 Bread를 지정하여 Bread 배열 타입의 새 변수를 선언했습니다. 여기서 주목해야 할 점은 <Bread>처럼 타입을 지정하는 것입니다. 타입 매개변수가 타입의 일부를 나타내기 때문에 중요합니다. 이렇게 타입을 지정하므로 meatPie변수가 Bread만을 포함할 수 있는 배열이 될 것이라고 선언합니다. Array<T> 클래스에는 다른 많은 클래스와 마찬가지로 생성자가 포함되어 있습니다.

마지막 줄에서는 5개 요소를 가지는 Bread의 새 배열을 만들고 변수에 할당하고 있습니다.  타입 스크립트는 타입 추론을 사용하여 변수의 유형을 결정합니다. 여기서 주목해야 할 점은 <Book>(5)와 같이 타입 매개변수가 함수의 매개변수와 별도로 나열된다는 점입니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기