JS 인터뷰 2분/다형성(OOP)
10603 단어 careertypescriptjavascriptbeginners
다형성이란 무엇입니까?
빠른 답변:
다른 유형의 개체를 사용하여 동일한 인터페이스를 제공하거나 다른 유형을 나타내는 하나의 엔터티를 사용하는 기능입니다.
더 긴 답변:
에서 논의한 것처럼 공유 기능을 상위 클래스로 이동한 다음 하위 클래스에서 확장할 수 있습니다.
하지만 실제로 이 공유 기능을 사용하여 작업하는 방법은 무엇입니까?
우리는 항상 부모 클래스의 인스턴스로 작업하고 있다고 기대할 수 있지만 자식 클래스의 인스턴스일 수 있습니다. 직관적일 수 있지만 subtyping polymorphism 이라고 합니다.
class Human {
sayHi() {
alert('Hi! ')
}
}
class Child extends Human {
sayHi() {
alert('Hi 👶')
}
}
class Parent extends Human {
sayHi() {
alert('Hi 🙋♀️')
}
}
class GrandParent extends Human {
sayHi() {
alert('Hi 👵')
}
}
// In Typescript:
// function introduce(human: Human) {
function introduce(human) {
human.sayHi()
}
let childObj = new Child()
introduce(childObj);
let parentObj = new Parent()
introduce(parentObj)
let grandParentObj = new GrandParent()
introduce(grandParentObj)
parametric polymorphism 이라는 좀 더 복잡한 다형성 예제도 있습니다. Typescript의 제네릭입니다.
class <T>List {
data: T[];
push(elem: T) {}
pop(elem: T) {}
}
자바스크립트는 이므로 파라메트릭 다형성 같은 건 없다고 생각하는데, 제가 틀렸다면 정정 부탁드립니다.
마지막으로 만질 것은 ad hoc polymorphism 입니다. 함수 이름은 하나지만 인수 유형이 다른 경우입니다. JavaScript는 동적으로 입력되는 언어이므로 이러한 검사는 런타임 중에 수행됩니다.
function add(a, b) {
if (Array.isArray(a) && Array.isArray(b)) {
return a.concat(b)
}
if (typeof a === 'number' && typeof b === 'number') {
return a + b
}
if (typeof a === 'string' && typeof b === 'string') {
return a + b
}
throw new Error('Unknown types')
}
add(1,2) // 3
add('abc', 'def') // 'abcdef'
add([1,2], [3,4]) // [1, 2, 3, 4]
실제 애플리케이션:
기본적으로 다형성을 사용하면 작성자만이 사용 방법을 알고 있는 유틸리티 및 도우미의 세계에 대한 판도라의 상자를 열 수 있습니다.
^^^ 모든 타입의 모든 경우를 한곳에서 확인하는 수백 줄의 코드를 이해했을 때의 그 느낌 🤯
또 다른 경고는 더 이상 교체할 수 없는 방식으로 부모 클래스를 확장하는 것입니다.
class Bird {
fly() {}
}
class Pigeon extends Bird { }
class Penguin extends Bird {
fly() { throw new Error("I can't fly!") }
}
function makeThemFly(birds) {
birds.forEach(bird => bird.fly())
}
makeThemFly([new Pigeon(), new Penguin()]) // This will blow 💥
자원:
wiki/Polymorphism
w3schools/Polymorphism (Java)
MDN
다른 게시물:
Btw, 나는 여기와에 더 재미있는 것을 게시 할 것입니다. 친구하자👋
Reference
이 문제에 관하여(JS 인터뷰 2분/다형성(OOP)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kozlovzxc/js-interview-in-2-minutes-polymorphism-oop-3pla텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)