munifico.github.io

munifico's anything page

Follow me on GitHub

다형성

좀 어려워 보이는 다형성polymorphism이란 단어는 객체지향 언어에서 여러 슈퍼클래스의 멤버인 인스턴스를 가리키는 말입니다. 대부분의 객체지향 언어에서 다형성은 특별한 경우에 속합니다. 자바스크립트는 느슨한 타입을 사용하고 어디서든 객체를 쓸 수 있으므로(정확한 결과가 보장되진 않지만), 어떤 면에서는 자바스크립트의 객체는 모두 다형성을 갖고 있다고 할 수 있습니다.

자바스크립트 코드를 작성하다 보면 ‘이런 메서드가 있고 저런 메서드가 있으니 아마 그 클래스의 인스턴스일 것이다’처럼 짐작할 때가 많습니다. Car 예제에 적용해 본다면, deployAirbags 메서드가 있는 객체는 Car의 인스턴스라고 생각할 수 있습니다. 물론 아닐 수도 있지만, 그 같은 짐작이 근거 없는 추측은 절대 아닙니다.

자바스크립트에는 객체가 클래스의 인스턴스인지 확인하는 instanceof 연산자가 있습니다. 이 연산자를 속일 수도 있지만, prototype과 __proto__ 프로퍼티에 손대지 않았다면 정확한 결과를 기대할 수 있습니다.

c instanceof Car;           //true
c instanceof Vehicle;       //true
m instanceof Car;           //false
m instanceof Motorcycle;    //true
m instanceof Vehicle;       //true

NOTE 자바스크립트의 모든 객체는 루트 클래스인 Object의 인스턴스입니다. 즉, 객체 o에서 o instanceof Object는 항상 true입니다. 모든 객체가 Object의 인스턴스인 것은 toString 같은 중요한 메서드를 상속하기 위해서이며, 염두에 둘 만큼 중요한 영향은 없습니다.


이전 : 상속
다음 : 객체 프로퍼티 나열 다시 보기
목차