모임 일시 : 2024-06-08, 16:30-19:30
참여 : 6명, 오*택, 주*산, 고*성, 장*희, 이*양, 이*훈
Q. 제네릭은 무엇이고, 필요한 이유는 무엇인가요? 그 종류도 함께 얘기해주세요.
(제네릭 타입 - 함수 - 클래스)
# 제네릭
타입 매개변수를 통해 다형성을 만든다. 다시 말해, 타입을 일반화시키는 것을 의미한다. 제네릭이 없었다면, 같은 함수에 대해 각 타입별로 각기 다른 함수를 구현해야 한다. 제네릭을 통해 이 수고를 줄일 수 있다. 그러나 제네릭이 만능은 아니다. 타입에 따라 계산하는 연산이 정해져 있기 때문에 한계가 존재한다. 이 문제를 모든 타입에 any를 선언함으로써 해결할 수 있지만, 이는 근본적인 해결 방안은 아니다. 왜냐하면, 결과 타입을 추론할 수 없는 문제가 발생하기 때문이다.
function mult<T>(v1: T, v2: T, v3: T):T {
return v1 * v2 * v3;
}
예를 들어, 위와 같은 함수가 있을 때는 제네릭에 대한 타입 매개변수 제한이 필요하다. 위 함수는 숫자타입에서만 유효한 코드이기 때문이다. 이처럼 타입 매개변수 T가 하나 이상 사용된 함수를 '제네릭 함수'라고 한다.
# 제네릭 타입
타입 매개변수를 추가할 수 있는 곳은 함수뿐만이 아니다. 타입에 타입 매개변수를 추가할 수 있는데, 이를 '제네릭 타입(generic type)'이라고 한다. 제네릭 타입은 단순하게 꺽쇠 안에 특정 타입을 명시하는 것을 의미하며 대표적으로 맵(Map)과 배열(Array)과 같은 자료구조의 타입이 제네릭 타입으로 표현된다.
let l: Array<number> = [1, 2];
let m: Map<number, string> = new Map([[1, "one"], [2, "two"]]);
마치 각 요소에 들어갈 요소의 타입을 정해놓은 튜플과 같은 느낌을 준다.
# 타입 인자 추론
제네릭 함수의 매개변수에 매번 타입을 명시하는 것은 귀찮은 일이 아닐 수 없다. 이를 위해, 제네릭을 지원하는 대부분의 언어는 '타입 인자 추론'을 제공한다. 타입 추론의 일종으로, 제네릭 함수나 제네릭 메서드를 호출할 때 개발자가 타입 인자를 생략할 수 있도록 하는 기능이다.
# 제네릭 함수와 제네릭 메서드의 차이는 무엇인가?
제네릭 함수는 함수에 한 개 이상의 타입 매개변수(ex. <T>)를 한 개 이상 갖는 함수를 일컫는다. 다만, 제네릭 메서드는 클래스 안에서 정의된 함수를 일컫는다.
댓글