[typescript] 클래스 상속과 인터페이스 구현을 통해 어떤 기능을 확장할 수 있는가?
TypeScript는 클래스 상속과 인터페이스 구현을 통해 기능을 확장할 수 있는 강력한 기능을 제공합니다. 이러한 기능을 활용하여 코드의 재사용성을 높일 수 있고, 프로그램의 유지보수성을 개선할 수 있습니다.
클래스 상속
클래스 상속을 사용하여 한 클래스의 기능을 다른 클래스에서 재사용할 수 있습니다. 이를 통해 코드 중복을 피하고, 상위 클래스의 기능을 하위 클래스에서 확장할 수 있습니다.
class Animal {
private name: string;
constructor(name: string) {
this.name = name;
}
public move(distance: number = 0) {
console.log(`${this.name} moved ${distance}m.`);
}
}
class Dog extends Animal {
constructor(name: string) {
super(name);
}
public bark() {
console.log("Woof! Woof!");
}
}
const dog = new Dog("Buddy");
dog.move(10); // 출력: Buddy moved 10m.
dog.bark(); // 출력: Woof! Woof!
위의 예제에서 Dog
클래스는 Animal
클래스를 상속받아 move
메서드를 확장하고 bark
메서드를 추가했습니다.
인터페이스 구현
인터페이스를 사용하여 클래스가 특정한 구조를 따르도록 강제할 수 있습니다. 이를 통해 코드의 일관성을 유지하고, 다형성을 구현할 수 있습니다.
interface Shape {
calculateArea(): number;
}
class Square implements Shape {
constructor(private sideLength: number) {}
public calculateArea() {
return this.sideLength * this.sideLength;
}
}
class Circle implements Shape {
constructor(private radius: number) {}
public calculateArea() {
return Math.PI * this.radius ** 2;
}
}
const square = new Square(5);
console.log(square.calculateArea()); // 출력: 25
const circle = new Circle(3);
console.log(circle.calculateArea()); // 출력: 28.274333882308138
위의 예제에서 Shape
인터페이스를 구현하는 Square
및 Circle
클래스가 각각 calculateArea
메서드를 구현하고 있습니다.
이러한 TypeScript의 클래스 상속과 인터페이스 구현을 통해 코드를 구조화하고 확장할 수 있으며, 객체지향 프로그래밍의 다양한 원칙을 지키면서 유연한 코드를 작성할 수 있습니다.
참고문헌: