프로그래밍/Typescript

타입스크립트에서의 클래스 상속: 객체 지향 프로그래밍의 핵심

shimdh 2025. 3. 27. 09:58
728x90

타입스크립트는 자바스크립트의 상위 집합으로, 정적 타입을 지원하여 개발자들이 더 안전하고 효율적으로 코드를 작성할 수 있도록 돕습니다. 그 중에서도 클래스 상속은 객체 지향 프로그래밍의 핵심 개념으로, 코드의 재사용성과 유지보수성을 높이는 데 큰 기여를 합니다. 이번 포스트에서는 타입스크립트에서 클래스 상속을 이해하고 활용하는 방법에 대해 깊이 있게 살펴보겠습니다.

1. 클래스 정의

타입스크립트에서 클래스를 정의할 때는 class 키워드를 사용합니다. 기본적인 클래스는 속성과 메서드를 가질 수 있으며, 이는 특정한 데이터와 행동을 나타냅니다. 예를 들어, 동물의 특성을 나타내는 Animal 클래스를 정의할 수 있습니다.

class Animal {
    name: string;

    constructor(name: string) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name}가 소리를 냅니다.`);
    }
}

위의 예제에서는 Animal이라는 기본 클래스를 정의하였습니다. 이 클래스는 name이라는 속성과 speak()라는 메서드를 가지고 있습니다. 이를 통해 각 동물 객체는 자신의 이름을 가지고 있으며, 그 이름을 통해 소리를 내는 행동을 수행할 수 있습니다.

2. 상속하기

상속을 구현하기 위해서는 extends 키워드를 사용하여 부모 클래스를 지정합니다. 자식 클래스는 부모 클래스의 모든 속성과 메서드에 접근할 수 있으며, 추가적으로 자신만의 속성이나 메서드를 정의할 수도 있습니다. 예를 들어, Dog라는 자식 클래스를 만들어 Animal 클래스로부터 상속받을 수 있습니다.

class Dog extends Animal {
    bark() {
        console.log(`${this.name}가 멍멍 짖습니다.`);
    }
}

const myDog = new Dog("바둑이");
myDog.speak(); // 바둑이가 소리를 냅니다.
myDog.bark();  // 바둑이가 멍멍 짖습니다.

위 코드에서 Dog라는 자식 클래스를 만들어 Animal 클래스로부터 상속받았습니다. 이제 Dog 인스턴스인 myDog는 부모 클래스의 기능인 speak()를 사용할 수 있으며, 추가된 기능인 bark()도 사용할 수 있습니다. 이를 통해 Dog 클래스는 Animal 클래스의 특성을 그대로 유지하면서도, 자신만의 독특한 행동을 추가할 수 있습니다.

3. 생성자 오버라이딩

자식 클래스에서 부모 클래스의 생성자를 호출해야 할 경우에는 반드시 super()를 사용해야 합니다. 이렇게 하면 부모 클래스의 초기화 작업을 수행하고 자식 클래스에 필요한 추가 초기화를 진행할 수 있습니다. 예를 들어, 고양이를 나타내는 Cat 클래스를 만들 때도 부모인 Animal의 이름 속성을 설정하기 위해 super()를 호출합니다.

class Cat extends Animal {
    constructor(name: string) {
        super(name); // 부모 생성자 호출
    }

    meow() {
        console.log(`${this.name}가 야옹 하고 웁니다.`);
    }
}

const myCat = new Cat("고양이");
myCat.speak(); // 고양이가 소리를 냅니다.
myCat.meow();  // 고양이가 야옹 하고 웁니다.

여기서는 고양이를 나타내는 Cat 클래스를 만들었으며, 이때도 역시 부모인 Animal의 이름 속성을 설정하기 위해 super()를 호출했습니다. 이를 통해 Cat 클래스는 Animal 클래스의 모든 특성을 상속받으면서도, 고양이만의 독특한 행동인 meow()를 추가할 수 있습니다.

4. 다형성 (Polymorphism)

다형성이란 동일한 인터페이스나 메서드 이름으로 여러 형태를 표현하는 것을 의미합니다. 이는 특히 다양한 서브클래스들이 같은 방식으로 동작하도록 할 때 유용합니다. 예를 들어, makeSound라는 함수를 정의하여 서로 다른 동물 객체를 처리할 수 있습니다.

function makeSound(animal: Animal) {
    animal.speak();
}

makeSound(myDog); // 바둑이가 소리를 냅니다.
makeSound(myCat); // 고양이가 소리를 냅니다.

위 예제에서는 두 가지 서로 다른 동물 객체 (myDog, myCat)를 동일한 함수(makeSound)로 처리하고 있습니다. 각 객체들은 자신의 방식으로 동작하지만 같은 방법으로 호출됩니다. 이를 통해 코드의 유연성을 높이고, 다양한 객체를 일관된 방식으로 다룰 수 있는 장점을 제공합니다.

결론

클래스 상속은 타입스크립트에서 코드를 보다 간결하게 작성하고 재사용성을 높이는 데 매우 중요한 역할을 합니다. 위에서 설명한 내용을 통해 여러분은 어떻게 기존 클래스로부터 새로운 클래스를 확장하고 다양하게 활용할 수 있는지 이해했길 바랍니다. 이러한 이해는 객체 지향 프로그래밍의 기본 원리를 더욱 깊이 있게 grasp하는 데 큰 도움이 될 것입니다.

728x90