최근에 나는 TypeScript를 사용하여 애플리케이션을 개발하면서 추상 클래스의 중요성과 유용성에 대해 알게 되었습니다. 추상 클래스는 특정 유형의 개체를 나타내는 데 유용하며, 해당 유형의 공통 동작을 구현하는 데 도움이 됩니다. 이번 포스트에서는 TypeScript를 사용하여 추상 클래스를 정의하고 인터페이스와 함께 활용하는 방법에 대해 살펴보겠습니다.
추상 클래스란?
추상 클래스는 인스턴스화될 수 없는 클래스로, 다른 클래스에서 확장하여 사용하는 것을 목적으로 합니다. 추상 클래스를 사용하면 다음과 같은 이점을 얻을 수 있습니다.
- 공통 동작을 구현하여 코드의 재사용성을 높일 수 있습니다.
- 특정한 유형의 객체를 표현하는 데 필요한 메서드 및 속성을 정의할 수 있습니다.
추상 클래스 정의하기
TypeScript에서 추상 클래스를 정의하려면 abstract
키워드를 사용하여 클래스를 선언하고, 추상 메서드 및 일반 메서드를 포함할 수 있습니다.
abstract class Shape {
abstract draw(): void;
area(): void {
console.log("Calculating area");
}
}
위의 예제에서 Shape
클래스는 추상 메서드인 draw
와 일반 메서드인 area
를 포함하고 있습니다.
추상 클래스 상속하기
추상 클래스를 확장하여 새로운 클래스를 정의할 수 있습니다. 이때 하위 클래스에서 추상 메서드를 구현해야 합니다.
class Circle extends Shape {
draw(): void {
console.log("Drawing circle");
}
}
class Square extends Shape {
draw(): void {
console.log("Drawing square");
}
}
위의 예제에서 Circle
및 Square
클래스는 Shape
추상 클래스를 상속하고 있으며, draw
메서드를 구현하고 있습니다.
추상 클래스와 인터페이스의 활용
추상 클래스와 인터페이스를 함께 사용하여 특정 유형의 객체에 대한 규격을 정의할 수 있습니다. 이때 추상 클래스는 공통 동작을 구현하고, 인터페이스는 해당 동작을 보장합니다.
interface Printable {
print(): void;
}
abstract class Printer implements Printable {
print(): void {
console.log("Printing...");
}
abstract refill(): void;
}
위의 예제에서 Printer
추상 클래스는 Printable
인터페이스를 구현하며, refill
메서드를 추상으로 정의하고 있습니다.
마무리
추상 클래스는 TypeScript에서 객체 지향 프로그래밍을 할 때 매우 유용한 도구입니다. 특히 특정 유형의 객체를 표현하고 해당 객체의 동작을 구현하는 데 활용할 수 있습니다. 이를 통해 코드의 재사용성과 유지보수가 향상되며, 효율적인 개발이 가능해집니다.
이번 포스트에서는 추상 클래스의 개념, 정의, 상속, 그리고 인터페이스와의 활용에 대해 알아보았습니다. 추상 클래스와 인터페이스는 TypeScript를 사용하여 더욱 강력하고 유연한 애플리케이션을 개발하는 데 도움이 됩니다.
더 많은 정보를 원하시면 TypeScript 공식 문서를 참고하시기 바랍니다.