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 키워드를 사용해서 명시적으로 변환
끝.
반응형
'TypeScript' 카테고리의 다른 글
TypeScript : S.O.L.I.D (0) | 2023.12.13 |
---|---|
TypeScript : 추상클래스 & 인터페이스 (0) | 2023.12.13 |
TypeScript : 클래스 (public, private, protected) (0) | 2023.12.13 |
TypeScript : 카페 프로그램 구현 (0) | 2023.12.13 |
TypeScript : enum과 object literal 비교 & 유틸리티 타입 (0) | 2023.12.13 |