다형성 함수와 타입처럼, 클래스와 인터페이스도 기본값과 상한/하한 설정을 포함한 다양한 제네릭 타입 매개변수 기능을 지원합니다. 제네릭 타입의 범위는 클래스나 인터페이스 전체가 되게 할 수도 있고 특정 메서드로 한정할 수도 있습니다. class FirstMap{ // ① constructor(initialKey: K, initialValue: V){ // ② // ... } get(key: K): V { // ③ // ... } set(key: K, value: V){ // ... } merge(map: FirstMap): FirstMap{ // ④ // ... } static of(k: K, v: V): FirstMap{ // ⑤ // ... } } class와 함께 제네릭을 선언했으므로 클래스 전체에..
클래스는 값과 타입을 모두 선언한다 TypeScript의 거의 모든 것은 값 아니면 타입입니다. // 값 let a = 1999 function b(){} // 타입 type a = number interface b { (): void } 값과 타입은 TypeScript에서 별도의 네임스페이스에 존재합니다. 용어를 어떻게 사용하는지를 보고 TypeScript가 알아서 이를 값 또는 타입으로 해석합니다. // 값 let a = 1999 function b(){} // 타입 type a = number interface b { (): void } if(a + 1 > 3){ // 문맥상 값 a로 추론 let x: a = 3 // 문맥상 타입 a로 추론 } 문맥을 파악해 해석하는 이 기능은 정말 유용합니다. 한..
클래스는 구조 기반 타입을 지원한다 TypeScript는 클래스를 비교할 때 다른 타입과 달리 이름이 아니라 구조를 기준으로 삼습니다. 클래스는 자신과 똑같은 프로퍼티와 메서드를 정의하는 기존의 일반 객체를 포함해 클래스의 형태를 공유하는 다른 모든 타입과 호환됩니다. 예를 들어 TypeScript에선 Zebra를 인수로 받는 함수에 Poodle을 전달한다고 해서 반드시 에러를 발생시키진 않기 때문입니다. class Zebra { trot(){ // 블라블라 } } class Poodle { trot() { // 여기도 블라블라 } } function ambleAround(animal: Zebra){ animal.trot() } let zebra = new Zebra let poodle = new Poo..
인터페이스 구현 VS 추상 클래스 상속 인터페이스 구현은 추상 클래스 상속과 아주 비슷합니다. 하지만 인터페이스가 더 범용으로 쓰이며 가벼운 반면, 추상 클래스는 특별한 목적과 풍부한 기능을 갖는다는 점이 다릅니다. 인터페이스 인터페이스는 형태를 정의하는 수단입니다. 값 수준에서 이는 객체, 배열, 함수, 클래스, 클래스 인스턴스를 정의할 수 있다는 뜻입니다. 인터페이스는 아무런 JavaScript 코드를 만들지 않으며 컴파일 타임에만 존재합니다. 추상 클래스 추상 클래스는 오직 클래스만 정의할 수 있습니다. 예상할 수 있겠지만 추상 클래스는 런타임의 JavaScript 클래스 코드를 만듭니다. 추상 클래스는 생성자와 기본 구현을 가질 수 있으며 프로퍼티와 메서드에 접근 한정자를 지정할 수 있습니다. 위..