자바 스크립트(java script)/자바 스크립트 기초

다형성(Polymorphism)

lamarcK 2025. 3. 25. 19:03

다형성(Polymorphism)은 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, '여러 형태를 가질 수 있는 능력'을 의미한다. 즉, 하나의 인터페이스나 메서드가 다양한 형태의 객체를 처리할 수 있는 능력을 말한다.

 

핵심 개념

  • 하나의 인터페이스, 다양한 구현:
    • 다형성을 통해 동일한 이름의 메서드가 객체의 타입에 따라 다르게 동작할 수 있다.
    • 예를 들어, '소리 내기'라는 메서드가 동물 객체에서는 '멍멍', 고양이 객체에서는 '야옹'으로 다르게 구현될 수 있다.
  • 유연성과 확장성:
    • 다형성은 코드의 유연성을 높여주고 새로운 타입의 객체가 추가되더라도 기존 코드를 수정하지 않고 확장할 수 있게 해준다.
    • 이는 코드의 재사용성을 높이고 유지 보수를 용이하게 한다.

다형성의 종류

  • 오버로딩(Overloading):
    • 같은 이름의 메서드를 여러 개 정의하고, 매개변수의 타입이나 개수를 다르게 하여 호출 시점에 적절한 메서드를 선택하도록 하는 방식이다.
  • 오버라이딩(Overriding):
    • 상위 클래스의 메서드를 하위 클래스에서 재정의하여 하위 클래스의 특성에 맞게 동작하도록 하는 방식이다.
  • 다형성의 장점
    • 코드의 유연성과 확장성을 높인다.
    • 코드의 재사용성을 높여 개발 생산성을 향상시킨다.
    • 객체 간의 결합도를 낮춰 유지 보수를 용이하게 한다.
    다형성을 이해하고 활용하면 더욱 유연하고 확장 가능한 객체 지향 프로그래밍을 할 수 있다.

 

1. 프로토타입 기반 다형성 (오버라이딩 유사 효과)

// 상위 객체 (동물)
function Animal(name) {
  this.name = name;
}

Animal.prototype.makeSound = function() {
  console.log('알 수 없는 소리');
};

// 하위 객체 (개)
function Dog(name) {
  Animal.call(this, name); // 상위 객체 생성자 호출
}

// Dog.prototype을 Animal.prototype으로 연결 (상속)
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

// 메서드 오버라이딩
Dog.prototype.makeSound = function() {
  console.log('멍멍!');
};

// 하위 객체 (고양이)
function Cat(name) {
  Animal.call(this, name); // 상위 객체 생성자 호출
}

// Cat.prototype을 Animal.prototype으로 연결 (상속)
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;

// 메서드 오버라이딩
Cat.prototype.makeSound = function() {
  console.log('야옹!');
};

// 객체 생성 및 메서드 호출
const dog = new Dog('해피');
const cat = new Cat('나비');

dog.makeSound(); // 출력: 멍멍!
cat.makeSound(); // 출력: 야옹!

이 예제에서는 Animal이라는 상위 객체를 만들고, Dog와 Cat이라는 하위 객체를 만들어 makeSound 메서드를 재정의했다. 동일한 메서드 호출이지만 객체의 타입에 따라 다른 소리를 낸다.