추상 클래스는 직접 인스턴스화할 수 없는 클래스이다. new
키워드로 인스턴스로 만들수 없고, 서브클래스로 분류된다는 뜻이다.
extends
키워드로 상속받는다.abstract class Animal {
abstract speak(): void;
constructor(protected name: string) {}
public getName(): string {
return `${this.name}`;
}
}
class Dog extends Animal {
speak() {
console.log("멍멍");
}
}
class Cat extends Animal {
speak() {
console.log("야옹");
}
}
const dog = new Dog("누렁이");
dog.speak(); // 멍멍
console.log(dog.getName()); // 누렁이
const cat = new Cat("나비");
cat.speak(); // 야옹
console.log(cat.getName()); // 나비
인터페이스는 객체의 구조를 정의하는 구문이다.
implements
키워드로 구현한다.interface Animal {
speak(): void;
}
class Dog implements Animal {
speak() {
console.log("멍멍");
}
}
interface Drawable {
draw(): void;
}
class Circle implements Drawable {
draw() {
console.log("원을 그린다.");
}
}
class Square implements Drawable {
draw() {
console.log("사각형을 그린다.");
}
}
const c = new Circle();
c.draw(); // 원을 그린다.
const s = new Square();
s.draw(); // 사각형을 그린다.
추상 클래스는 다른 클래스로부터 상속받을 수 있으며, 하위 클래스에게 추상메서드 구현을 강제할 수 있다.
반면에 인터페이스는 상속받을 수 없지만, 여러개의 인터페이스를 동시에 구현하여 기능을 조합할 수 있다.
implements A, B, C
와 같이 여러 인터페이스를 동시에 구현할 수 있다.