Function/Method Overloading
하나의 함수가 서로 다른 여러 개의 call signature를 가졌을 때 발생한다.
1. 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.
2. 메소드의 이름을 절약할 수 있다.
직접 작성하기보다 외부 패키지/라이브러리에서 빈번하게 발견될 수 있다
패키지나 라이브러리는 아래와 같이 두 가지 경우의 overloading으로 디자인돼있을 것이다
Case1. 매개변수 타입이 다른 경우
ex. in Next.js
// object
Router.push({
path: "/home",
state: 1
})
// string
Router.push("/home")
type Config = {
path: string,
state: number
}
type Push = {
(path: string): void
(config: Config): void
}
const push:Push = (config) => {
if (typeof config === 'string') {
console.log(config)
}
else {
console.log(config.path, config.state)
}
}
Case2. 매개변수 개수가 다른 경우
이와 같은 함수는 거의 없지만, 외부 라이브러리에서 활용될 수 있다
type Add = {
(a: number, b: number): number
(a: number, b: number, c: number): number
}
const add:Add = (a, b, c?:number) => {
if(c) return a+b+c
return a+b
}
add(1, 2)
add(1, 2, 3)
type Add = (a: number, b: number, c?: number) => number
이렇게 작성해도 무방하다. 큰 차이 없음 (Nico says)
Overridng (not in JS)
대학교에서 C# 배울 당시, overloading과 overriding 차이를 분명히 하라던 교수님의 일침이 생각나서 다시 찾아봤다.
객체지향 언어에서,
부모 클래스로부터 메소드 이름과 signature(매개변수, 리턴값)가 같은, 상속받은 메소드를
자식 클래스에서 재정의하는 것
즉 상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 것.
@Override : 내용만을 새로 정의함으로써, 선언부는 부모의 것과 완전 일치해야한다.
OFFICIAL
Overloaded Functions
Function Overloads
Warning - Overloads and Callbacks & Function Overloads
'Front-end > 타입스크립트로 블록체인 만들기' 카테고리의 다른 글
[TS] HW - Polymorphism, Generic Type (1) | 2023.12.21 |
---|---|
[TS] Polymorphism 다형성 (0) | 2023.12.20 |
[TS] Why not JavaScript (0) | 2023.12.18 |
[TS] Call Signatures (0) | 2023.12.15 |
[TS] Types of TS (0) | 2023.10.10 |