ํ์ ์คํฌ๋ฆฝํธ๋ก ํจ์์ ์ ์ฒด ํ์ ์ ํํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
object๋ก ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋ ๊ฒ์ฒ๋ผ function์ ๋ชจ๋ ํจ์์ ํ์ ์ ๋ปํ ๋ฟ์ด๋ฉฐ, ๊ทธ๊ฒ์ด ๊ฐ๋ฆฌํค๋ ํน์ ํจ์์ ํ์ ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ ์๋ฌด ๊ฒ๋ ์๋ ค์ฃผ์ง ์๋๋ค.
function sum(a: number, b: number): number {
return a + b;
}
๊ทธ๋ ๋ค๋ฉด ์ sum์ ํ์ ์ ํํํ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ชจ์ํด๋ณด์.
sum์ ๋ ๊ฐ์ number์ ์ธ์๋ก ๋ฐ์ ํ ๊ฐ์ number๋ฅผ ๋ฐํํ๋ ํจ์๋ค. ํ์ ์คํฌ๋ฆฝํธ์์๋ ์ด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์๋ค.
(a:number, b:number)=> number
์ ์ฝ๋๋ ํ์ ์คํฌ๋ฆฝํธ์ ํจ์ ํ์ ๋ฌธ๋ฒ์ผ๋ก, ํธ์ถ ์๊ทธ๋์ฒ(call signature) ๋๋ ํ์ ์๊ทธ๋์ฒ(type signature)๋ผ ๋ถ๋ฅธ๋ค. ํ์ดํ ํจ์์ ๋น์ทํ ์ด ๋ฌธ๋ฒ์ ์๋๋ ๊ฒ์ด๋ค. ํจ์์ ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌํ๊ฑฐ๋ ํจ์์์ ๋ค๋ฅธ ํจ์๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ ์ด ๋ฌธ๋ฒ์ผ๋ก ์ธ์๋ ๋ฐํ ํจ์์ ํ์ ์ ์ง์ ํ ์ ์๋ค.
(์ฌ๊ธฐ์ a,b๋ผ๋ ๋งค๊ฐ๋ณ์๋ช ์ ๋ฌธ์ํ ์ฉ๋์ผ ๋ฟ ํจ์์ ํ์ ๊ณผ ํ ๋น ๋์์๋ ์๋ฌด ์ํฅ๋ ์ฃผ์ง ์๋๋ค)
ํจ์ ํธ์ถ ์๊ทธ๋์ฒ๋ ํ์ ์์ค ์ฝ๋, ์ฆ ๊ฐ์ด ์๋ ํ์ ์ ๋ณด๋ง ํฌํจํ๋ค.์ด๋ ํจ์ ํธ์ถ ์๊ทธ๋์ฒ๋ก ๋งค๊ฐ๋ณ์ ํ์ , this ํ์ , ๋ฐํ ํ์ , ๋๋จธ์ง ํ์ , ์กฐ๊ฑด๋ถ ํ์ ์ ํํํ ์ ์์ง๋ง ๊ธฐ๋ณธ๊ฐ์ ํํํ ์ ์๋ค. (๊ธฐ๋ณธ๊ฐ์ ํ์ ์ด ์๋๋ผ ๊ฐ์ด๋ฏ๋ก), ํจ์ ํธ์ถ ์๊ทธ๋์ฒ๋ ๋ฐ๋๋ฅผ ํฌํจํ์ง ์์ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ํ์ ์ ์ถ๋ก ํ ์ ์์ผ๋ฏ๋ก ๋ฐํํ์ ์ ๋ช ์ํด์ผ ํ๋ค.
*์ฐธ๊ณ : ํ์ ์์ค์ฝ๋์ ๊ฐ์์ค ์ฝ๋?
- ํ์ ์์ค์ฝ๋ : ํ์ ๊ณผ ํ์ ์ฐ์ฐ์๋ฅผ ํฌํจํ๋ ์ฝ๋๋ฅผ ์๋ฏธํ
- ๊ฐ์์ค์ฝ๋ : ํ์ ์์ค์ฝ๋ ๋ฐ์ ๋ชจ๋ ๊ฒ์ ๊ฐ๋ฆฌํจ๋ค.
์ด๋ค ์ฝ๋๊ฐ ์ ํจํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ผ๋ฉด ๊ฐ์์ค์ด๊ณ , ์ ํจํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ์๋์ง๋ง ์ ํจํ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ผ๋ฉด ํ์ ์์ค์ผ๋ก ์ฝ๊ฒ ๊ตฌ๋ถํ ์ ์๋ค.
function area(radius: number): number | null {
if (radius < 0) {
return null;
}
return Math.PI * radius ** 2;
}
let r: number = 3;
let a = area(r);
if (a != null) {
console.info("result : ", a); //result : 28.274333882308138
}
console.log(3 ** 2); //9
console.log(3 ** 3); //27
ํ์ ๋ณ์นญ์ผ๋ก ํ์ ํ ์ ์๋ ๋ ๋ฆฝ ํธ์ถ ์๊ทธ๋์ฒ๋ฅผ ์ถ์ถํด๋ณธ๋ค.
//greet(name:string) ํจ์
type Greet = (name: string) => string;
//log(message:string, userId?:string) gkatn
type Log = (message: string, userId?: string) => void;
//sumVariadicSafe(...numbers:number[]):number ํจ์
type SumVariadicSafe = (...numbers: number[]) => number;
์์ ๊ฐ์ด ํจ์์ ํธ์ถ ์๊ทธ๋์ฒ๋ ๊ตฌํ ์ฝ๋์ ๊ฑฐ์ ๊ฐ๋ค.
์ฐ์ฐ์ด ์๋๋ผ ์ธ์ด ์ค๊ณ์ ์๋ํ ๊ฒฐ์ ์ผ๋ก, ์ด๋ ๊ฒ ํจ์ผ๋ก ํธ์ถ ์๊ทธ๋์ฒ๋ฅผ ์ฝ๊ฒ ์ถ๋ก ํ ์ ์๋ค.
ํธ์ถ ์๊ทธ๋์ฒ์ ๊ตฌํ์ ๊ด๊ณ๋ฅผ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ํ์ธํ์๋ฉด,
ํธ์ถ ์๊ทธ๋์ฒ๊ฐ ์ฃผ์ด์ก์ ๋ ์ด๋ป๊ฒ ๊ทธ ์๊ทธ๋์ฒ๋ฅผ ๋ง์กฑํ๋ ํจ์๋ฅผ ๊ตฌํํ ์ ์์๊น? ๊ฐ๋จํ๊ฒ ํธ์ถ ์๊ทธ๋์ฒ๋ฅผ ํจ์ ํํ์๊ณผ ํฉ์น ์ ์๋ค. ๊ธฐ์กด์ Log ํจ์๋ฅผ ์๋ก์ด ์๊ทธ๋์ฒ์ ๋ง๊ฒ ๋ค์ ๊ตฌํํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
type Log = (message: string, userId?: string) => void;
let log: Log = ( //1 : ํจ์ ํํ์ log๋ฅผ ์ ์ธํ๋ฉด์ Log ํ์
์์ ๋ช
์ํ๋ค.
message, //2 : ๋งค๊ฐ๋ณ์์ ํ์
์ ๋ค์ ์ง์ ํ ํ์๋ ์๋ค. Log์์ ์ด๋ฏธ ํ์
๋ช
์ํ์ผ๋ฏ๋ก
// ํ์
์คํฌ๋ฆฝํธ๋ Log๋ฅผ ํตํด ํ์
์ ์ถ๋ก
userId = "Not signed in" //3 : ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ๋ค. ํธ์ถ ์๊ทธ๋์ฒ๋ ๊ฐ์ ํฌํจํ ์ ์์ผ๋ฏ๋ก
//Log์์๋ userId์ ํ์
์ ์ง์ ํ ์ ์์ง๋ง ๊ธฐ๋ณธ๊ฐ์ ์ง์ ๋ชปํจ
) => { //4 : Log ํ์
์์ ๋ฐํ ํ์
์ void๋ก ์ด๋ฏธ ์ง์ ํ์ผ๋ฏ๋ก ๋ฐํ ํ์
์ ๋ค์ ์ง์ ํ ํ์๊ฐ ์๋ค.
let time = new Date().toISOString();
console.log(time, message, userId);
};
'TypeScript > ํ์ ์คํฌ๋ฆฝํธ TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ ์คํฌ๋ฆฝํธ] ์บก์ํ, ์ถ์ํ ์ฐจ์ด ๋ช ํํ๊ธฐ ์ก๊ธฐ (0) | 2022.04.20 |
---|---|
[ํ์ ์คํฌ๋ฆฝํธ] ๋ฌธ๋งฅ์ ํ์ ํ (0) | 2022.04.20 |
[ํ์ ์คํฌ๋ฆฝํธ] ์ ๋๋ ์ดํฐ, ๋ฐ๋ณต์(iterator) ์ถ๋ก ๊ณผ ๋ช ์ (0) | 2022.04.20 |
[ํ์ ์คํฌ๋ฆฝํธ] ์ปคํผ๋จธ์ ํด๋์ค๋ง๋ค๊ธฐ ์ค์ต (0) | 2022.04.19 |
[ํ์ ์คํฌ๋ฆฝํธ] ์ ๋๋ ์ดํฐ ์ง์, ๋ช ์ (0) | 2022.04.19 |