다형성은 한 가지 형식 또는 개념이 다양한 형태로 나타나는 것을 말한다. 객체 지향 프로그래밍에서는 다형성이 객체가 다른 형태를 가질 수 있는 성질을 의미하며, 이것은 코드의 재사용성과 유연성을 높인다.
TypeScript에서도 이러한 다형성을 지원한다. 정적 메서드(static methods)와 인스턴스 메서드(instance methods)에서 각각 어떤 다형성을 보여주는지 알아보자.
정적 메서드에서의 다형성
정적 메서드는 클래스의 인스턴스와 무관하게 클래스 자체에 속한 메서드를 말한다. 다음은 TypeScript에서 정적 메서드를 정의하는 예시이다.
class MathOperation {
static add(x: number, y: number): number {
return x + y;
}
}
console.log(MathOperation.add(5, 3)); // 출력: 8
MathOperation 클래스에는 add라는 정적 메서드가 정의되어 있다. 이 메서드는 클래스의 인스턴스에 의존하지 않고 사용될 수 있으며, 여러 상황에서 유용하게 활용될 수 있다.
인스턴스 메서드에서의 다형성
반면에 인스턴스 메서드는 클래스의 인스턴스에 속한 메서드를 의미한다. TypeScript에서 인스턴스 메서드를 다루는 예시는 아래와 같다.
class Animal {
speak(): void {
console.log('Animal speaks');
}
}
class Dog extends Animal {
speak(): void {
console.log('Dog barks');
}
}
class Cat extends Animal {
speak(): void {
console.log('Cat meows');
}
}
const dog = new Dog();
dog.speak(); // 출력: Dog barks
const cat = new Cat();
cat.speak(); // 출력: Cat meows
Animal 클래스의 speak 메서드를 상속받은 Dog 클래스와 Cat 클래스는 각자의 다른 메서드를 구현하고 있다. 이것이 다형성의 한 예시로, 동일한 메서드 호출에 대해 서로 다른 구현이 실행되는 것을 보여준다.
다형성을 적절하게 활용하면 유지보수가 쉬운 코드를 작성할 수 있고, 확장성과 유연성을 갖출 수 있다.
결론
정적 메서드와 인스턴스 메서드는 TypeScript에서 다형성을 구현하는데 중요한 도구이다. 적절히 활용하면 코드의 유연성과 재사용성을 높일 수 있으며, 객체 지향 프로그래밍의 핵심 원리를 체득할 수 있다.
이러한 다형성의 개념은 TypeScript뿐만 아니라 모든 객체 지향 프로그래밍 언어에서 중요한 개념으로, 이를 활용하여 더욱 유용하고 효율적인 코드를 작성해 보자.