Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 다형성(Polymorphism)을 구현하는 방법

다형성(Polymorphism)이란?

다형성(Polymorphism)은 객체 지향 프로그래밍(OOP)의 핵심 원칙 중 하나입니다. 다형성을 활용하면 객체들이 동일한 인터페이스를 공유하면서도, 필요에 따라 특정 동작을 재정의(오버라이드)하거나 그대로 상속받아 사용할 수 있도록 설계할 수 있습니다. 이러한 다형성은 상속(Inheritance)을 기반으로 구현됩니다.

JavaScript에서는 프로토타입 체인을 통해 다형성을 손쉽게 구현할 수 있습니다. 아래 예제에서는 부모 객체 'game'을 상속받은 세 개의 자식 객체가 서로 다른 방식으로 동작하는 모습을 보여줍니다.

  • 'cricket''tennis' 객체: 부모 객체의 select 메서드를 오버라이드하여 각자 새로운 문자열을 반환합니다.
  • 'football' 객체: 메서드를 재정의하지 않고 부모의 select 메서드를 그대로 공유(상속)하여 부모의 문자열을 출력합니다.

예제 코드

<html>
<body>
<script>
    var game = function () {}
    game.prototype.select = function()
    {
       return "i love games and sports"
    }
    var cricket = function() {}
    cricket.prototype = Object.create(game.prototype);
    // select 메서드를 오버라이드하여 새로운 문자열 반환
    cricket.prototype.select = function()
    {
       return "i love cricket"
    }
    var tennis = function() {}
    tennis.prototype = Object.create(game.prototype);
    // select 메서드를 오버라이드하여 새로운 문자열 반환
    tennis.prototype.select = function()
    {
       return "i love tennis"
    }
    var football = function() {}
    // 부모의 속성과 메서드를 그대로 공유(상속)
    football.prototype = Object.create(game.prototype);
    var games = [new game(), new cricket(), new tennis(), new football()];
    games.forEach(function(game){
       document.write(game.select());
       document.write("</br>");
    });
</script>
</body>
</html>

실행 결과

i love games and sports
i love cricket
i love tennis
i love games and sports

동작 방식 정리

위 코드의 핵심은 Object.create()를 사용해 자식 객체의 프로토타입이 부모 객체의 프로토타입을 참조하도록 만든 것입니다. 이렇게 하면 자식 객체는 부모의 메서드에 접근할 수 있으며, 같은 이름의 메서드를 직접 정의하면 해당 메서드가 우선적으로 호출됩니다.

결과적으로 game, cricket, tennis는 각각 자신만의 select 메서드를 실행하고, football은 오버라이드하지 않았기 때문에 프로토타입 체인을 따라 올라가 부모의 메서드를 실행하게 됩니다. 이것이 바로 하나의 메서드 호출이 객체마다 다르게 동작하는 다형성의 전형적인 예입니다.