Typescript에서 오버로딩과 오버라이딩

오버로딩과 재정의의 주요 차이점은 다음과 같습니다. 전자는 함수의 시그니처와 관련이 있는 반면, 오버라이딩은 메서드의 동작과 관련됩니다.

우세하다



재정의는 하위 클래스의 메서드 동작을 변경하기 위해 수행하는 작업입니다. 메서드를 재정의할 때 부모 클래스에서 상속된 메서드의 기본 동작을 변경할 것으로 예상됩니다. 그러나 메서드 시그니처는 위반하지 않기 위해 동일하게 유지되어야 합니다LSP.

초과 적재



과부하는 함수에 수행하는 작업입니다. 그들의 행동*을 바꾸는 것이 아니라 그들의 signature을 다양화하기 위해서입니다. 함수 오버로드는 함수와 동일한 이름을 유지하지만 자유롭게 다른 서명을 도입할 수 있습니다. JavaScript 배경에서 왔으며 두 개 이상의 유형 중 하나일 수 있는 매개 변수가 있는 것을 본 경우functions에 대한 예를 본 적이 있을 것입니다.

/**
* @param {string|string[]} The object to use
*/
function stringOrArray(strOrArr) {
  ...
}


JavaScript에는 오버로드를 명확하게 할 만큼 충분히 강력한 유형 시스템이 없기 때문에 이것이 함수 오버로드라고 말하기는 어렵습니다. 그러나 Jsdoc 주석을 통해 이 함수에 과부하가 있음을 알 수 있습니다.
TypeScript를 사용하면 이 오버로드를 주석에 사는 대신 함수 서명의 실제 부분으로 만들 수 있습니다.

전.

function stringOrArray(str: string)
function stringOrArray(arr: string[])
function stringOrArray(strOrArr: string | string[]) {
  ...
}


결론



오버로드된 함수의 구현은 동일하게 유지되지만 서명은 다를 수 있습니다. 재정의의 경우 구현은 다를 수 있지만 Liskov 대체 원칙을 위반하지 않으려면 서명이 동일해야 합니다.

좋은 웹페이지 즐겨찾기