728x90

Polymorphism(다형성)은 같은 데이터 타입의 함수에서 다른 기능이 발현되는 현상을 뜻한다.

polymorphism의 경우는 다음 2가지가 있다.

  1. static
  2. dynamic

먼저 static polymorphism의 경우는 method overloading에 있다.
하나의 클래스에서 같은 변수명의 함수를 return 타입 또는 input parameter 타입만 다르게하여 다른 기능을 만드는 것이다.
예시 코드는 다음과 같다.

cfunction add(a: string, b: string): string {
  console.log(a + b);
  return a + b;
}

function add(a: number, b: number): number {
  console.log(a + b);
  return a + b;
}

add("Hello ", "Steve"); // returns "Hello Steve"
add(10, 20); // returns 30

Function overloading with different number of parameters and types with same name is not supported.


dynamic polymorphism의 경우는 method overriding에 있다.
상속 관계에 있는 두개의 클래스에서 같은 변수명 같은 return 타입 같은 input parameter의 경우에도 다른 기능을 나타낼 수 있다.
같은 interface를 상속받는 다른 클래스의instance를 각각 대입받은 두 변수의 경우
이런 상황이 나타나게 된다.

interface Calculate {
  add(a: number, b: number): void;
}

class CalculateImpl1 {
  add(a: number, b: number): void {
    console.log(a + b);
  }
}

class CalculateImpl2 {
  add(a: number, b: number): void {
    console.log(a + b + "!!!!!");
  }
}

const myCalculate: Calculate = new CalculateImpl1();
myCalculate.add(1, 2);

const yourCalculate: Calculate = new CalculateImpl2();
yourCalculate.add(1, 2);

+ Recent posts