[타입스크립트] 제네릭

Moon·2023년 7월 28일
0
post-thumbnail

제네릭이란

제네릭은 프로그래밍에서 중요한 개념이다. 이는 단일 타입이 아닌, 다양한 타입에서 작동하는 컴포넌트를 작성할 수 있는 기능을 제공한다. 즉, 사용자가 사용처에서 타입을 정해서 전달해줄 수 있는 도구다.

제네릭 타입 변수

제네릭 타입 변수는 코드 내부에서 재사용 가능한 컴포넌트를 생성하는 데 사용된다. 예를 들어, 함수에서 같은 타입의 입력과 출력을 처리할 수 있는 기능을 제공한다. 이것은 여러 타입에 대해 작동하면서도 모든 타입의 정보를 유지할수 있다.

function identity<T>(arg: T): T {
    return arg;
}
let a=identity<string>('hello')
console.log(a)// 출력:'hello'

제네릭 클래스, 제네릭 인터페이스

class List<T>{
data:T[];  
constructor(data:T[]){
this.data=data;
}
add(item:T){
    this.data=[...this.data,item];
}
}

const list =new List<number>([]);
list.add(1)
console.log(list.data) //[1]

제네릭 클래스와 인터페이스는 특정한 타입에 의존하지 않는다. 대신 타입 매개변수를 통해 타입을 추상화하고 동적으로 타입을 설정할 수 있다.

class GenericNumber<T> {
    zeroValue: T;
    add: (x: T, y: T) => T;
}

let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };

위의 코드에서 GenericNumber 클래스는 타입에 구애받지 않으며, 사용자는 필요한 타입으로 인스턴스를 생성할 수 있다.

제네릭 인터페이스도 제네릭 클래스와 유사한 방식으로 작동한다.

제네릭 인터페이스는 함수, 클래스와 마찬가지로 제네릭을 사용할 수 있다. 인터페이스에서 제네릭을 사용하는 것은 데이터 타입을 보다 유연하게 만들어준다. 이를 통해 타입 안정성을 유지하면서 코드의 재사용성을 높일 수 있다.

다음은 제네릭 인터페이스를 사용하는 간단한 예제이다:

interface GenericInterface<T> {
    (arg: T): T;
}

let myIdentity: GenericInterface<number> = (arg: number): number => {
    return arg;
};

console.log(myIdentity(100));  // Output: 100

위 예제에서 GenericInterface는 제네릭 인터페이스로, 타입 매개변수 T를 사용한다. myIdentity는 이 인터페이스를 구현하는 함수이며, T를 number로 특수화한다.

제네릭 인터페이스는 매우 강력한 도구다. 사용자가 필요한 어떤 타입이든 사용할 수 있으므로, 타입에 대한 유연성이 매우 높아진다. 그렇기 때문에 다양한 상황에 대응할 수 있게 되고, 재사용 가능한 코드를 작성하는데 큰 도움이 된다. 이러한 이유로 제네릭 인터페이스는 타입스크립트에서 중요한 역할을 한다.

제네릭 제약 조건

제네릭 제약 조건은 특정한 속성이나 메서드가 존재하는 타입만을 대상으로 제네릭을 적용하고자 할 때 사용된다. 제네릭에 사용되는 타입이 반드시 특정한 속성이나 메서드를 갖고 있음을 보장하게 만든다.

interface Lengthwise {
    length: number;
}

function identity<T extends Lengthwise>(arg: T): T {
    console.log(arg.length);
    return arg;
}
identity('string')// [LOG]: 6
identity([1,2])//[LOG]: 2
identity({length:100})//[LOG]: 100

위의 코드에서 T 타입은 반드시 Lengthwise 인터페이스를 구현해야 하며, 따라서 length 속성을 반드시 가지고 있어야 한다는 것을 알 수 있다.

제네릭은 타입스크립트의 중요한 부분으로, 코드의 유연성과 재사용성을 크게 향상시킨다. 타입스크립트를 사용하는 개발자라면 제네릭을 활용하는 방법을 반드시 숙지해야 할 것이다.

profile
FE moon

0개의 댓글