TypeScript/ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript

[ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ํ˜ธ์ถœ ์‹œ๊ทธ๋‹ˆ์ฒ˜

Rainbow๐ŸŒˆCoder 2022. 4. 20. 12:47
728x90

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ํ•จ์ˆ˜์˜ ์ „์ฒด ํƒ€์ž…์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

 

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);
  };

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90