TIR: Typescript | 클래스와 인터페이스 (6) 클래스 - 다형성과 제네릭

Lumpen·2023년 1월 31일
0

Typescript

목록 보기
10/17

다형성

함수와 타입 처럼 클래스와 인터페이스도 기본값과 상한/하한 설정을 포함한
다양한 제네릭 타입 매개변수 기능을 지원한다
제네릭 타입의 범위는 클래스나 인터페이스 전체가 될 수도 있고, 특정 메서드가 될 수도 있다

class MyMap<K, V> { 
  // class 와 함께 제네릭 선언 - 클래스 전체에서 타입 사용 가능 (MyMap의 모든 인스턴스 메서드와 인스턴스 프로퍼티에서 K, V 사용 가능)
	constructor(initalKey: K, initalValue: V) { 
      	// constructor 에는 제네릭 선언 불가 (class 레벨에서 사용해야 함)
    	//..
    }
  	get(key: K): V {
      	// 클래스로 한정된 제네릭 타입은 클래스 내부 어디서든 사용할 수 있다
    	// ..
    }
 	set(key: K, value: V) {
    	// ..
    }
  	merge<k1, v1>(map: MyMap<K1, V1>): MyMap<K |K1, V | V1> {		
      	// 인스턴스 메서드는 클래스 수준 제네릭을 사용할 수 있으며 자신만의 제네릭도 추가로 선언할 수 있다
	    // ..	
    }
  	static of<K, V>(k: K, v: V): MyMap<K, V> {
      	// 정적 메서드는 변수에 값 수준에서 접근할 수 없듯이 
      	// (정적 메서드는 클래스 수준으로 올라간다) 
      	// 따라서 of 는 자신만의 K와 V를 새로 선언한 것이다
    	// ..
    }
}


// 인터페이스에도 제네릭을 선언할 수 있다
interface MyMap<K, V> {
	get(key: K): V
  	set(key: K, value: V): void
}

함수와 마찬가지로 제네릭에 구체 타입을 명시하거나 타입스크립트가 타입으로 추론하도록 할 수 있다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글