interface와 abstract class의 차이
- 추상 클래스의 경우 단일 상속만 가능, 인터페이스는 다중 상속 가능
abstract class Animal {
...구현부...
}
class Dog extends Animal {
...
}
interface Move {
move(): void;
}
interface Speak {
speak(text: string): void;
}
interface Actions extends Move, Speak {
sayMyName(): void;
}
class Human implements Actions {
move(): void {
console.log("move");
}
speak(text: string): void {
console.log(text);
}
sayMyName(): void {
console.log("sayMyname!");
}
}
- 추상클래스는 abstract modifier(제어자)가 표기된 변수나 메소드만 구현하면 되지만, interface는 선언된 모든 변수나 메소드를 구현해야한다.
interface Animal {
makeSound(): void;
move(): void;
}
class Dog implements Animal {
makeSound(): void {
console.log("Woof!");
}
move(): void {
console.log("Moving...");
}
}
const myDog: Animal = new Dog();
myDog.makeSound();
myDog.move();
abstract class Animal {
abstract makeSound(): void;
move(): void {
console.log("Moving...");
}
}
class Dog extends Animal {
makeSound(): void {
console.log("Woof!");
}
}
const myDog = new Dog();
myDog.makeSound();
myDog.move();