#3 Functions

#3.0 Call Signatures

ํ•จ์ˆ˜ ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ ๋œจ๋Š” ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ๋ฐ˜ํ™˜๋˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ์ •๋ณด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ํƒ€์ž…์„ ์ƒ๊ฐํ•˜๊ณ  ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š๊ณ  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

type Add = (a:number, b:number) => number

const add: Add = (a, b) => a + b

#3.1 Overloading

Function Overloading ์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ž์ฃผ ๋ณด์ด๋Š” ํ˜•ํƒœ๋กœ, ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Call Signature๋ฅผ ๊ฐ€์งˆ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

type Add = {
    (a: number, b: number) : number,
    (a: number, b: string) : number
}

const add : Add = (a, b) => a + b // err => b๊ฐ€ string์ผ ๊ฒฝ์šฐ + ๊ฐ€ ์•ˆ๋จ

const add : Add = (a, b) => {
    if(typeof a === "string") return a
    return a + b
}

์—ฌ๋Ÿฌ ๊ฐœ์˜ argument ์ธ ๊ฒฝ์šฐ, ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์•ˆ์“ธ ์ˆ˜ ๋„ ์žˆ๋‹ค.

#3.2 Polymorphism

๋‹คํ˜•์„ฑ - ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ๋ฐ›์•„๋“ค์ž„์œผ๋กœ์จ ์—ฌ๋Ÿฌ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ

Concrete Type - number, string, void ...

Genericarrow-up-right - ํƒ€์ž…์˜ placeholder

#3.3 Generics Recap

=> Generic ... any์™€ ๋น„์Šทํ•œ๋ฐ?!

=> no ! any ์‚ฌ์šฉ์€ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํฌ๊ธฐํ•  ๋ฟ ์•„๋‹ˆ๋ผ ์ถœ๋ ฅ๊ฐ’์˜ ํƒ€์ž…์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์—†์Œ

์š”์ฒญํ•œ ์ œ๋„ค๋ฆญ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์•Œ์•„์„œ ์ ์šฉํ•จ

#3.4 Conclusions

์ œ๋„ˆ๋ฆญ์€ ์ปค์Šคํ…€ ๋ฐ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ

์ œ๋„ˆ๋ฆญ์€ ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ

์ œ๋„ˆ๋ฆญ์€ ์„ ์–ธ ์‹œ์ ์ด ์•„๋‹Œ, ์ƒ์„ฑ ์‹œ์ ์— ํƒ€์ž…์„ ๋ช…์‹œํ•˜์—ฌ ํ•˜๋‚˜์˜ ํƒ€์ž…์ด ์•„๋‹Œ ๋‹ค์–‘ํ•œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

Last updated