[typescript] 추상 클래스를 사용하여 애플리케이션의 편의 기능 구현하기

최근에 나는 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");
    }
}

위의 예제에서 CircleSquare 클래스는 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 공식 문서를 참고하시기 바랍니다.