TypeScript : 상속 | 서브타입과 슈퍼타입 | upcasting과 downcasting

728x90
반응형

 

1. 상속 

-  기존 클랙스의 속성과 메서드를 물려받아 새로운 클래스의 정의 가능

-  extends 키워드 사용

class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  makeSound() {
    console.log('동물 소리~');
  }
}

class Dog extends Animal {
  age: number;

  constructor(name: string) {
    super(name);
    this.age = 5;
  }

  makeSound() {
    console.log('멍멍!'); // 부모의 makeSound 동작과 달라요!
  }

  eat() { // Dog 클래스만의 새로운 함수 정의
    console.log('강아지가 사료를 먹습니다.');
  }
}

class Cat extends Animal { // Animal과 다를게 하나도 없어요!
}

const dog = new Dog('누렁이');
dog.makeSound(); // 출력: 멍멍!

const cat = new Cat('야옹이');
cat.makeSound(); // 출력: 동물 소리~

- Dog 클래스는 부모의 makeSound 함수의 동작 새롭게 정의 = 오버라이딩

 

 

2. 서브타입과 슈퍼타입

* 서브 타입 : 두 개의 타입 A와 B가 있고, B가 A의 서브타입이면 A가 필요한 곳에는 어디든 B를 사용가능

* 슈퍼 타입 : 두 개의 타입 A와 B가 있고, B가 A의 슈퍼타입이면 B가 필요한 곳에는 어디든 A를 사용가능 

- Animal은 Dog와 Cat의 슈퍼타입 / Dog와 Cat은 Animal의 서브타입

 

3. upcasting과 downcasting

* upcasting

: 서브타입 > 슈퍼타입으로 변환

: 이 경우는 타입 변환 암시적으로 변환 (typescript가 자동으로 해줌)

: 필요이유=> dog, cat,lion 다 받아야지 (o) / union으로 새로운 타입만들어야지 (x)

 

* downcasting

: 슈퍼타입 > 서브타입으로 변환

: as 키워드를 사용해서 명시적으로 변환

 

 

끝.

반응형