본문 바로가기
Language/Type Script

[Type Script] 제네릭 함수 생성, 고차 함수

by 나는김혜린 2022. 2. 2.

제네릭 함수 생성

위 코드의 함수는 다양한 타입 파라미터를 사용할 수 있지만 어느 파라미터 타입으로 호출됐는지 모른다.

따라서 상수 a와 b는 any타입을 가진다.

 

만약 함수 호출 시 사용된 파라미터 타입을 알고 싶다면 수정해야 한다.

수정한 코드는 제네릭 타입 <T>를 파라미터와 반환 값의 타입으로 선언했다.

상수 a는 string 타입, b는 Person 타입을 가진다.

책에선 화살표 함수에 제네릭 타입을 사용했는데 코드를 쳐보니 에러가 13개나 뜨는 바람에 다음에 공부할 예정...ㅎ

 

무튼 제네릭 타입을 사용한 클래스와 함수를 만들어보자.

키-값의 쌍을 가진 클래스를 선언하고, 키와 값은 모든 타입이 가능하므로 제네릭 타입으로 선언한다.

K, V 등 특정 문자로 제네릭 타입 파라미터를 사용할 때 ts 내장 타입처럼 변수를 선언할 수 있다.

K,V 타입인 Pair 클래스를 선언하고 컴파일하면 K,V가 삭제되고 선언된 타입으로 대체된다.

 

이제 Pair 클래스가 생성자와 key, value 프로퍼티를 가지도록 하고, 제네릭 쌍을 비교하는 제네릭 함수를 작성해보자.

<number, string> 타입인 첫 번째 Pair을 상수 p1에 생성하고, 타입 참조를 사용해 <number, string> 두 번째 Pair를 p2에 생성한다.

12줄에서 p1, p2를 비교하는데 value값이 다르기 때문에 false가 출력된다.

 

그 다음 <string, string> 타입인 첫 번째 Pair을 p3에 생성하고, 타입 참조를 사용해 <string, string> 두 번째 Pair을 p4에 생성한다.

17줄에서 두 Pair의 key, value값이 같으므로 true가 출력된다.

 

9줄에서 타입을 <number, string>으로 선언함으로써 어떤 타입인지 직관적으로 알 수 있게 되고, 타입 실수를 하면 컴파일러가 즉시 오류를 내보낸다.

 

그 다음으론 문자열 열거 타입 멤버를 반환된 사용자 역할에 맵핑하는 제네릭 함수를 만들어보자.

사용자 역할로 어드민 or 매니저를 반환하는 인증 매커니즘이 있다고 가정한다.

문자열 enum 타입을 사용하고 사용자의 역할을 열거 타입의 멤버에 맵핑한다.

커스텀 타입 User를 선언하고 문자열 열거 타입인 UserRole을 선언한다.

loadUser 제네릭 함수로 JSON 메서드를 사용해 사용자 데이터를 가져온다.

또 반환되는 제네릭 타입 T는 상세 타입 User로 변환된다.

가져온 데이터는 상수 user에 할당하고 switch문을 사용하여 user의 role이 어드민이라면 'Show control panel'이 콘솔에 출력되고, 매니저라면 'Hide control panel'이 콘솔에 출력된다.

user엔 role이 admin이기 때문에 'Show control panel'이 출력된다.

 

고차함수 내 반환 타입 강제

고차함수란?

: 함수를 파라미터로 받거나 다른 함수를 반환하는 함수

 

이제 타입 파라미터를 사용하며 고차함수 반환 타입을 적용하는 방법을 알아보자.

고차함수는 이런 식으로 만들 수 있고, 간결하게 만들기 위해 화살표 뒤에 return문을 제거했다.

 

1줄에서 고차함수를 선언한다.

innerFunc는 someValue = 10인 클로저 함수이고 let result로 반환된 함수를 호출한다.

따라서 10 * 5인 50을 출력한다.

댓글