# ๐Ÿ“„ Item01 ~ 05


# Item01. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ด€๊ณ„ ์ดํ•ดํ•˜๊ธฐ

  • ๋ฌธ๋ฒ•์˜ ์œ ํšจ์„ฑ๊ณผ ๋™์ž‘์˜ ์ด์Šˆ๋Š” ๋…๋ฆฝ์ ์ธ ๋ฌธ์ œ์ด๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž… ๊ตฌ๋ฌธ์„ ํ†ตํ•ด์„œ ์˜ค๋ฅ˜์˜ ์›์ธ์„ ์ถ”์ธกํ•˜๋Š”๋ฐ ํฐ ๋„์›€์„ ์ค€๋‹ค.
    • ์˜ค๋ฅ˜๊ฐ€ ์–ด๋””์—์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ๊ณ , ํ•ด๊ฒฐ์ฑ…๋„ ์ œ์‹œํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
  • ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์ด์ง€๋งŒ, ์ผ๋ถ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(๊ทธ๋ฆฌ๊ณ  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ)๋Š” ์ฒดํฌ๋ฅผ ํ†ต๊ณผํ•œ๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ทผ๋ณธ ์›์ธ์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ดํ•ดํ•˜๋Š” ๊ฐ’์˜ ํƒ€์ž…๊ณผ ์‹ค์ œ ๊ฐ’์— ์ฐจ์ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

# Item02. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ์ดํ•ดํ•˜๊ธฐ

  • noImplicitAny

    • ๋ณ€์ˆ˜๋“ค์ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ํƒ€์ž…์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ด
    • ์ด ์˜ต์…˜์ด ์„ค์ •๋˜์—ˆ๋‹ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ : any๋ผ๊ณ  ์„ ์–ธํ•ด ์ฃผ๊ฑฐ๋‚˜ ๋” ๋ถ„๋ช…ํ•œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
    • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž… ์ •๋ณด๋ฅผ ๊ฐ€์งˆ ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋˜๋„๋ก์ด๋ฉด ์ด ์˜ต์…˜์„ true๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • strictNullChecks

    • null, undefined๊ฐ€ ๋ชจ๋“  ํƒ€์ž…์—์„œ ํ—ˆ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์„ค์ •
    • ๋งŒ์•ฝ null์„ ํ—ˆ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ์˜๋„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋ƒ„์œผ๋กœ์จ ์˜ค๋ฅ˜๋ฅผ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค.
    const x: number | null = null;
    
    • ๋งŒ์•ฝ null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด, ์ด ๊ฐ’์ด ์–ด๋””์„œ๋ถ€ํ„ฐ ์™”๋Š”์ง€ ์ฐพ์•„์•ผ ํ•˜๊ณ , null์„ ์ฒดํฌํ•˜๋Š” ์ฝ”๋“œ๋‚˜ ๋‹จ์–ธ๋ฌธ(assertion)์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.
    const el = document.getElementById('status');
    el.textContent = 'Ready'; // ~~ ๊ฐœ์ฒด๊ฐ€ 'null'์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    
    if (el) {
      el.textContent = 'Ready'; // null์€ ์ œ์™ธ๋จ
    }
    
    el!.textContent = 'Ready'; // el์ด null์ด ์•„๋‹˜์„ ๋‹จ์–ธ
    
    • ์ด ์˜ต์…˜์€ null, undefined ๊ด€๋ จ๋œ ์˜ค๋ฅ˜๋ฅผ ์žก์•„ ๋‚ด๋Š” ๋ฐ ๋งŽ์€ ๋„์›€์ด ๋˜์ง€๋งŒ, ์ฝ”๋“œ ์ž‘์„ฑ์„ ์–ด๋ ต๊ฒŒ ํ•œ๋‹ค.
    • ์ด ์˜ต์…˜์„ ์„ค์ • ์—†์ด ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ์„ ํƒํ–ˆ๋‹ค๋ฉด "undefined"๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค๋ผ๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ฒฐ๊ตญ์€ ์ด ์˜ค๋ฅ˜ ๋•Œ๋ฌธ์— ์—„๊ฒฉํ•œ ์ฒดํฌ๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋ฐ–์— ์—†๋‹ค.
    • ๊ทธ๋ž˜์„œ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ฑฐ๋Œ€ํ•ด์ง€๊ธฐ ์ „์— ์ดˆ๋ฐ˜์— ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

# Item03. ์ฝ”๋“œ ์ƒ์„ฑ๊ณผ ํƒ€์ž…์ด ๊ด€๊ณ„์—†์Œ์„ ์ดํ•ดํ•˜๊ธฐ

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• 
    • ์ตœ์‹  TS/JS๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ๋ฒ„์ „์˜ JS๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผํ•จ
    • ์ฝ”๋“œ์˜ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ์ฒดํฌํ•จ

# โญ๏ธ ํƒ€์ž… ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋„ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

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

# โญ๏ธ ๋Ÿฐํƒ€์ž„์—๋Š” ํƒ€์ž… ์ฒดํฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค

  • ์‹ค์ œ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ๊ณผ์ •์—์„œ ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค, ํƒ€์ž…, ํƒ€์ž… ๊ตฌ๋ฌธ์„ ๊ทธ๋ƒฅ ์ œ๊ฑฐ๋˜์–ด ๋ฒ„๋ฆฐ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํƒ€์ž… ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • instanceof ๋Œ€์‹ ์— ํŠน์ • ์†์„ฑ์ด ์กด์žฌํ•˜๋Š”์ง€ in์„ ํ†ตํ•ด ํ™•์ธ
    • ๋Ÿฐํƒ€์ž„์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํƒ€์ž… ์ •๋ณด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” 'ํƒœ๊ทธ' ๊ธฐ๋ฒ•
    • ํƒ€์ž…(๋Ÿฐํƒ€์ž„ ์ ‘๊ทผ ๋ถˆ๊ฐ€)๊ณผ ๊ฐ’(๋Ÿฐํƒ€์ž„ ์ ‘๊ทผ ๊ฐ€๋Šฅ)์„ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•
      • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํƒ€์ž…์œผ๋กœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ํด๋ž˜์Šค๋Š” ํƒ€์ž…๊ณผ ๊ฐ’์œผ๋กœ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

# โญ๏ธ ํƒ€์ž… ์—ฐ์‚ฐ์€ ๋Ÿฐํƒ€์ž„์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค

function asNumber(val: number | string): number {
  return val as number;
}
function asNumber(val) {
  return val;
}
  • ์œ„ ์˜ˆ์‹œ๋Š” string ๋˜๋Š” number ํƒ€์ž…์ธ ๊ฐ’์„ ํ•ญ์ƒ nubmer๋กœ ์ •์ œํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.
    • ๋ณ€ํ•œ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์ฝ”๋“œ์— ์•„๋ฌด๋Ÿฐ ์ •์ œ ๊ณผ์ •์ด ์—†๋‹ค.
    • as number๋Š” ํƒ€์ž… ์—ฐ์‚ฐ์ด๊ณ  ๋Ÿฐํƒ€์ž„ ๋™์ž‘์—๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ทธ๋ž˜์„œ ๊ฐ’์„ ์ •์ œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋Ÿฐํƒ€์ž„์˜ ํƒ€์ž…์„ ์ฒดํฌํ•ด์•ผ ํ•˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
function asNumber(val: number | string): number {
  return typeof(val) === 'string' ? Number(val) : val;
}

# โญ๏ธ ๋Ÿฐํƒ€์ž„ ํƒ€์ž…์€ ์„ ์–ธ๋œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค

  • ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ๋งˆ์ง€๋ง‰์˜ console.log๊นŒ์ง€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด์ž.
function setLightSwitch(value: boolean) {
  switch (value) {
    case true:
      turnLightOn();
      break;
    case false:
      turnLightOff();
      break;
    default:
      console.log('์‹คํ–‰๋˜์ง€ ์•Š์„๊นŒ ๋ด ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค.');
  }
}
interface LightApiResponse {
  lightSwitchValue: boolean;
}

async function setLight() {
  const response = await fetch('/light');
  const result: LightApiResponse = await response.json();
  setLightSwitch(result.lightSwitchValue);
}
  • setLightSwitch ํ•จ์ˆ˜์˜ ์ธ์ž์— : boolean์ด๋ผ๋Š” ํƒ€์ž… ์„ ์–ธ๋ฌธ์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ๋Ÿฐํƒ€์ž„์‹œ ์ œ๊ฑฐ๋œ๋‹ค.
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜€๋‹ค๋ฉด ์‹ค์ˆ˜๋กœ string ๊ฐ’์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ์—ˆ์„ ๊ฒƒ์ด๋‹ค.
    • ๋ฌผ๋ก  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ API๋ฅผ ์ž˜๋ชป ํŒŒ์•…ํ•ด์„œ lightSwitchValue๊ฐ€ ์‹ค์ œ๋กœ ๋ฌธ์ž์—ด์ด์˜€๋‹ค๋ฉด, ๋Ÿฐํƒ€์ž„์—๋Š” setLightSwitch ํ•จ์ˆ˜๊นŒ์ง€ ์ „๋‹ฌ๋  ๊ฒƒ์ด๋‹ค.
    • ๋˜๋Š” ๋ฐฐํฌ๋œ ํ›„์— API๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด lightSwitchValue๊ฐ€ ๋ฌธ์ž์—ด์ด ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.
  • ์ด์™€ ๊ฐ™์ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ํƒ€์ž…๊ณผ ์„ ์–ธ๋œ ํƒ€์ž…์ด ๋งž์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
    • ํƒ€์ž…์ด ๋‹ฌ๋ผ์ง€๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์ƒํ™ฉ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.
    • ์„ ์–ธ๋œ ํƒ€์ž…์ด ์–ธ์ œ๋“ ์ง€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•ด์•ผ ํ•œ๋‹ค.

# โญ๏ธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํƒ€์ž…์œผ๋กœ๋Š” ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋กœ๋“œํ•  ์ˆ˜ ์—†๋‹ค

  • ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ

    // ์•„๋ž˜ ๋‘ ํ•จ์ˆ˜๋Š” ์ค‘๋ณต๋œ ํ•จ์ˆ˜ ๊ตฌํ˜„์ด๋‹ค.
    function add(a: number, b: number) { return a + b; }
    function add(a: string, b: string) { return a + b; }
    
    • ๋™์ผํ•œ ์ด๋ฅด๋ฉ” ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ํ•จ์ˆ˜๋ฅผ ํ—ˆ์šฉ
    • ๊ทธ๋Ÿฌ๋‚˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํƒ€์ž…๊ณผ ๋Ÿฐํƒ€์ž„์˜ ๋™์ž‘์ด ๋ฌด๊ด€ํ•˜๋ฏ€๋กœ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ์˜จ์ „ํžˆ ํƒ€์ž… ์ˆ˜์ค€์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.

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

# โญ๏ธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํƒ€์ž…์€ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

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

# Item04. ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์— ์ต์ˆ™ํ•ด์ง€๊ธฐ

  • ๋• ํƒ€์ดํ•‘(Duck Typing)

    • ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ํƒ€์ž…์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ๊ฒฝ์šฐ ๊ฐ์ฒด๋ฅผ ํ•ด๋‹น ํƒ€์ž…์— ์†ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๋ฐฉ์‹
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋• ํƒ€์ดํ•‘ ๊ธฐ๋ฐ˜์ด๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋„ ๊ตฌ์กฐ์  ํƒ€์ดํ•‘(๋• ํƒ€์ดํ•‘) ๊ธฐ๋ฐ˜์ธ๋ฐ ์ด ๋•Œ๋ฌธ์— ๊ฐ’์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

    • ๊ทธ๋ž˜์„œ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์‹ ๋ช…์นญ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์ƒํ‘œ๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
  • ํƒ€์ž…์ด ์—ด๋ ค์žˆ๋‹ค

    • ํƒ€์ž…์˜ ํ™•์žฅ์— ์—ด๋ ค ์žˆ๋‹ค๋Š” ์˜๋ฏธ
    • ์ฆ‰, ํƒ€์ž…์— ์„ ์–ธ๋œ ์†์„ฑ ์™ธ์— ์ž„์˜์˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํƒ€์ž… ์‹œ์Šคํ…œ์—์„œ ํƒ€์ž…์€ ์—ด๋ ค์žˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— ๊ฐ€๋” ๋‹นํ™ฉ์Šค๋Ÿฌ์šด ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

interface Vector3D {
  x: number;
  y: number;
  z: number;
}

function calculateLengthL1(v: Vector3D) {
  let length = 0;
    
  for (const axis of Object.keys(v)) {
    const coord = v[axis]; // 'string'์€ 'Vector3D'์˜ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ์— ์—˜๋ฆฌ๋จผํŠธ๋Š” ์•”์‹œ์ ์œผ๋กœ 'any' ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
      
    length += Math.abs(coord);
  }
    
  return length;
}
  • ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ axis๋Š” Vector3D ํƒ€์ž…์ธ v์˜ ํ‚ค ์ค‘ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์— x, y, z ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.
    • ๊ทธ๋ฆฌ๊ณ  Vector3D์˜ ์„ ์–ธ์— ๋”ฐ๋ฅด๋ฉด ์ด๋“ค์€ ๋ชจ๋‘ number์ด๋ฏ€๋กœ coord์˜ ํƒ€์ž…์ด number๊ฐ€ ๋˜์–ด์•ผ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ์˜ค๋ฅ˜๊ฐ€ ๋œจ๋Š” ๊ฒƒ์ด ๋งž๋‹ค.
    • v๋Š” ์–ด๋–ค ์†์„ฑ์ด๋“  ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— axis์˜ ํƒ€์ž…์€ string์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.
    • ์ •ํ™•ํ•œ ํƒ€์ž…์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ์„ ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ์ด๋‹ค.
    • ๊ทธ๋ž˜์„œ ๋ฃจํ”„๋ณด๋‹ค๋Š” ๋ชจ๋“  ์†์„ฑ์„ ๊ฐ๊ฐ ๋”ํ•˜๋Š” ๊ตฌํ˜„์ด ๋” ๋‚ซ๋‹ค.
function calculateLengthL1(v: Vector3D) {
  return Math.abs(v.x) + Math.abs(v.y) + Math.abs(v.z);
}

# Item05. any ํƒ€์ž… ์ง€์–‘ํ•˜๊ธฐ

  • any ํƒ€์ž…์—๋Š” ํƒ€์ž… ์•ˆ์ „์„ฑ์ด ์—†๋‹ค.
  • any๋Š” ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๋ฌด์‹œํ•ด ๋ฒ„๋ฆฐ๋‹ค.
    • ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์€ ์•ฝ์†๋œ ํƒ€์ž…์˜ ์ž…๋ ฅ์„ ์ œ๊ณตํ•˜๊ณ , ํ•จ์ˆ˜๋Š” ์•ฝ์†๋œ ํƒ€์ž…์˜ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ any ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์•ฝ์†์„ ์–ด๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  • any ํƒ€์ž…์—๋Š” ์–ธ์–ด ์„œ๋น„์Šค๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ์–ด๋–ค ์‹ฌ๋ฒŒ์— ํƒ€์ž…์ด ์žˆ๋‹ค๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ์„œ๋น„์Šค๋Š” ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ๊ณผ ์ ์ ˆํ•œ ๋„์›€๋ง์„ ์ œ๊ณตํ•œ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ any ํƒ€์ž…์ธ ์‹ฌ๋ฒŒ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ฌด๋Ÿฐ ๋„์›€์„ ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค.
  • any ํƒ€์ž…์€ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ๋•Œ ๋ฒ„๊ทธ๋ฅผ ๊ฐ์ถ˜๋‹ค.
  • any๋Š” ํƒ€์ž… ์„ค๊ณ„๋ฅผ ๊ฐ์ถฐ๋ฒ„๋ฆฐ๋‹ค.
    • any ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ํƒ€์ž… ์„ค๊ณ„๊ฐ€ ๋ถˆ๋ถ„๋ช…ํ•ด์ง„๋‹ค.
    • ์„ค๊ณ„๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”์ง€, ์„ค๊ณ„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ๋Š”์ง€ ์ „ํ˜€ ์•Œ ์ˆ˜ ์—†๋‹ค.
    • ์„ค๊ณ„๊ฐ€ ๋ช…ํ™•ํžˆ ๋ณด์ด๋„๋ก ํƒ€์ž…์„ ์ผ์ผ์ด ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • any๋Š” ํƒ€์ž…์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐ๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค.