πŸ“˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈ κ°œλ… 정리08

seoyoon_leeΒ·2026λ…„ 3μ›” 29일

TypeScript

λͺ©λ‘ 보기
15/21
post-thumbnail

πŸ”₯ 1. ν•¨μˆ˜ μ˜€λ²„λ‘œλ”© (Function Overloading)

πŸ‘‰ κ°œλ…
πŸ‘‰ 같은 ν•¨μˆ˜ 이름인데, μ‚¬μš©ν•˜λŠ” 방법이 μ—¬λŸ¬ 개 μžˆλŠ” 것
ν•˜λ‚˜μ˜ ν•¨μˆ˜μ— μ—¬λŸ¬ νƒ€μž…μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 방식

예λ₯Ό λ“€μ–΄:

func(1) πŸ‘‰ ν•˜λ‚˜λ§Œ λ„£μœΌλ©΄ Γ—20
func(1,2,3) πŸ‘‰ 3개 λ„£μœΌλ©΄ ν•©

πŸ‘‰ μ½”λ“œ ꡬ쑰 핡심 3단계

1️⃣ μ˜€λ²„λ‘œλ“œ μ‹œκ·Έλ‹ˆμ²˜ (μ„€λͺ…μ„œ)

function func(a: number): void;
function func(a: number, b: number, c: number): void;

πŸ‘‰ "이 ν•¨μˆ˜ μ΄λ ‡κ²Œλ„ μ“°κ³ , μ €λ ‡κ²Œλ„ μ¨μš”" 라고 미리 μ„ μ–Έ

2️⃣ μ‹€μ œ κ΅¬ν˜„ (μ§„μ§œ ν•¨μˆ˜)

function func(a: number, b?: number, c?: number) {

πŸ‘‰ μ‹€μ œ ν•¨μˆ˜λŠ” ν•˜λ‚˜λ§Œ 쑴재
πŸ‘‰ λŒ€μ‹  ?둜 선택적 νŒŒλΌλ―Έν„° 처리

3️⃣ λΆ„κΈ° 처리 (if)

if (typeof b === 'number' && typeof c === 'number') {
  console.log(a + b + c);
} else {
  console.log(a * 20);
}

πŸ‘‰ λ“€μ–΄μ˜¨ 값에 따라 λ‹€λ₯΄κ²Œ μ‹€ν–‰

🚨 μ™œ μ΄λ ‡κ²Œ 해야함?

❌ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ˜€λ²„λ‘œλ”© μ—†μŒ
πŸ‘‰ κ·Έλž˜μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ "νƒ€μž…λ§Œ" λ„μ™€μ£ΌλŠ” 것
πŸ‘‰ μ‹€μ œ 싀행은 κ²°κ΅­ ν•˜λ‚˜μ˜ ν•¨μˆ˜

πŸ’‘ ν•œ 쀄 정리

πŸ‘‰ "νƒ€μž…λ§Œ μ—¬λŸ¬ 개처럼 보이게 ν•˜κ³ , μ‹€μ œ ν•¨μˆ˜λŠ” ν•˜λ‚˜"

🐢 2. μ‚¬μš©μž μ •μ˜ νƒ€μž… κ°€λ“œ (Type Guard)

πŸ‘‰ 문제 상황

type Animal = Dog | Cat;

πŸ‘‰ Dog인지 Cat인지 λͺ¨λ¦„ 😱

πŸ‘‰ ν•΄κ²° 방법: "직접 ꡬ뢄 ν•¨μˆ˜ λ§Œλ“€κΈ°"

1️⃣ Dog νŒλ³„ ν•¨μˆ˜

function isDog(animal: Animal): animal is Dog {
return (animal as Dog).isBark !== undefined;
}

πŸ”₯ 핡심 포인트

πŸ‘‰ animal is Dog β†’ νƒ€μž… 쒁히기 (이게 μ€‘μš”!)

  • trueλ©΄ Dog둜 확정됨

πŸ‘‰ 이 뜻:
"이 ν•¨μˆ˜κ°€ trueλ©΄ animal은 Dogμ•Ό"
πŸ‘‰ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ 이해함

πŸ‘‰ μ‰½κ²Œ λ§ν•˜λ©΄

if (isDog(animal)) {

πŸ‘‰ νƒ€μž…μŠ€ν¬λ¦½νŠΈ 생각:
"μ•„ μ–˜ Dog 확정이넀"

2️⃣ Cat도 동일

function isCat(animal: Animal): animal is Cat {
return (animal as Cat).isScratch !== undefined;
}

3️⃣ μ‹€μ œ μ‚¬μš©

function warning(animal: Animal) {
  if (isDog(animal)) {
    // Dog νƒ€μž… ν™•μ •
  } else if (isCat(animal)) {
    // Cat νƒ€μž… ν™•μ •
  }
}

🀯 μ™œ ꡳ이 μ΄λ ‡κ²Œ 함?

❌ κ·Έλƒ₯ ν•˜λ©΄ 였λ₯˜λ‚¨

animal.isBark ❌

πŸ‘‰ μ™œ?
πŸ‘‰ Dog인지 Cat인지 λͺ¨λ₯΄λ‹ˆκΉŒ

βœ… νƒ€μž… κ°€λ“œ μ“°λ©΄ κ°€λŠ₯

if (isDog(animal)) {
  animal.isBark βœ…
}

βœ… μ‚¬μš© μ˜ˆμ‹œ

function warning(animal: Animal) {
  if (isDog(animal)) {
    console.log("κ°•μ•„μ§€");
  } else {
    console.log("고양이");
  }
}

πŸ’‘ ν•œ 쀄 정리

πŸ‘‰ "이 값이 μ–΄λ–€ νƒ€μž…μΈμ§€ TSμ—κ²Œ μ•Œλ €μ£ΌλŠ” ν•¨μˆ˜"

🧠 핡심 μš”μ•½

βœ… ν•¨μˆ˜ μ˜€λ²„λ‘œλ”©

  • 같은 ν•¨μˆ˜ μ—¬λŸ¬ 방식 μ‚¬μš© κ°€λŠ₯
  • νƒ€μž…λ§Œ μ—¬λŸ¬ 개, μ‹€μ œ ν•¨μˆ˜λŠ” ν•˜λ‚˜
  • 쑰건문으둜 λΆ„κΈ° 처리

βœ… νƒ€μž… κ°€λ“œ

  • μœ λ‹ˆμ˜¨ νƒ€μž…μ—μ„œ νƒ€μž… ꡬ뢄
  • animal is Dog β†’ TSμ—κ²Œ 힌트
  • ifλ¬Έ μ•ˆμ—μ„œ νƒ€μž… 확정됨

⚠️ μ‹€μˆ˜ 포인트

❌ μ‹€μˆ˜ 1

function func(a:number)
function func(a:number, b:number)

πŸ‘‰ κ΅¬ν˜„ ν•¨μˆ˜ λ”°λ‘œ μ•ˆ λ§Œλ“€λ©΄ μ—λŸ¬

❌ μ‹€μˆ˜ 2

animal.isBark

πŸ‘‰ λ°”λ‘œ μ ‘κ·Ό ❌ (νƒ€μž… λͺ¨λ¦„

❌ μ‹€μˆ˜ 3

return animal.isBark !== undefined;

πŸ‘‰ νƒ€μž… 단언 없이 μ“°λ©΄ μ—λŸ¬ κ°€λŠ₯

βœ” μ•ˆμ „ν•˜κ²Œ:

(animal as Dog).isBark

profile
Frontend Developer · 기둝 ⭐

0개의 λŒ“κΈ€