타입스크립트는 자바스크립트의 상위 집합으로, 정적 타입을 지원하여 개발자들이 더 안전하고 효율적으로 코드를 작성할 수 있도록 돕습니다. 그 중에서도 클래스 상속은 객체 지향 프로그래밍의 핵심 개념으로, 코드의 재사용성과 유지보수성을 높이는 데 큰 기여를 합니다. 이번 포스트에서는 타입스크립트에서 클래스 상속을 이해하고 활용하는 방법에 대해 깊이 있게 살펴보겠습니다.
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하는 데 큰 도움이 될 것입니다.
'프로그래밍 > Typescript' 카테고리의 다른 글
TypeScript에서 읽기 전용 프로퍼티의 중요성 (0) | 2025.03.27 |
---|---|
타입스크립트의 제네릭 제약 조건: 안전하고 유연한 코드 작성하기 (0) | 2025.03.27 |
TypeScript의 교차 타입: 복잡한 데이터 구조를 간편하게 관리하는 방법 (0) | 2025.03.27 |
TypeScript의 클래스 접근 제어자: 코드의 안전성과 가독성을 높이는 방법 (0) | 2025.03.27 |
TypeScript에서 배열의 중요성과 활용법 (0) | 2025.03.26 |