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

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

TypeScript

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

πŸ“˜ μΈν„°νŽ˜μ΄μŠ€ (Interface)정리

1️⃣ μΈν„°νŽ˜μ΄μŠ€λž€?

πŸ‘‰ 객체의 λͺ¨μ–‘(ꡬ쑰)을 μ •μ˜ν•˜λŠ” 섀계도

interface Person {
  name: string;
  age: number;
}

πŸ‘‰ μ΄λ ‡κ²Œ λ§Œλ“€μ–΄λ‘λ©΄

const person: Person = {
  name: "army",
  age: 20
};

βœ”οΈ κ°μ²΄λŠ” λ°˜λ“œμ‹œ 이 ꡬ쑰λ₯Ό 따라야 함

2️⃣ νƒ€μž… 별칭(type) vs μΈν„°νŽ˜μ΄μŠ€(interface)

βœ”οΈ 곡톡점

  • λ‘˜ λ‹€ νƒ€μž… 이름을 λ§Œλ“€μ–΄μ€Œ

βœ”οΈ 차이점 (μ€‘μš”πŸ”₯)

ꡬ뢄typeinterface
μœ λ‹ˆμ˜¨β­• κ°€λŠ₯❌ 직접 λΆˆκ°€λŠ₯
μΈν„°μ„Ήμ…˜β­• κ°€λŠ₯❌ 직접 λΆˆκ°€λŠ₯
객체 μ •μ˜β­• κ°€λŠ₯β­• κ°€λŠ₯
ν™•μž₯ (상속)β­• κ°€λŠ₯β­• κ°€λŠ₯
μ„ μ–Έ ν•©μΉ¨βŒ μ•ˆλ¨β­• 됨

βœ”οΈ μ˜ˆμ‹œ

type A = number | string; // μœ λ‹ˆμ˜¨
type B = number & string; // μΈν„°μ„Ήμ…˜

πŸ‘‰ interfaceλŠ” μ΄λ ‡κ²Œ λͺ»ν•¨ ❌

3️⃣ μΈν„°νŽ˜μ΄μŠ€ ν•¨μˆ˜ μ •μ˜ (μ˜€λ²„λ‘œλ”©)

interface Person {
  name: string;
  age?: number; // 선택값

  sayHi(): void;
  sayHi(a: number, b: number): void;
}

πŸ‘‰ 같은 ν•¨μˆ˜ μ—¬λŸ¬κ°œ μ •μ˜ = μ˜€λ²„λ‘œλ”©

βœ”οΈ μ‚¬μš©

const person: Person = {
  name: "army",
  sayHi: function () {
    console.log("hello");
  }
};

person.sayHi();
person.sayHi(1, 2);

4️⃣ 선택적 ν”„λ‘œνΌν‹° (μ˜΅μ…”λ„)

age?: number;

πŸ‘‰ μžˆμ–΄λ„ 되고 없어도 됨

5️⃣ μΈν„°νŽ˜μ΄μŠ€ ν™•μž₯ (extends) ⭐⭐⭐

πŸ‘‰ λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받기

interface Animal {
  name: string;
  age: number;
}

interface Dog extends Animal {
  isBark: boolean;
}

βœ”οΈ μ‚¬μš©

const dog: Dog = {
  name: "",
  age: 0,
  isBark: true
};

6️⃣ μ—¬λŸ¬ 개 ν™•μž₯

interface DogCat extends Dog, Cat {}

πŸ‘‰ Dog + Cat λ‘˜ λ‹€ ν•©μΉœ ꡬ쑰

const dogCat: DogCat = {
  name: "",
  age: 2,
  isBark: true,
  isScratch: true
};

7️⃣ μ„ μ–Έ ν•©μΉ¨ (Declaration Merging) ⭐⭐⭐ 핡심

πŸ‘‰ μΈν„°νŽ˜μ΄μŠ€λŠ” 같은 μ΄λ¦„μœΌλ‘œ μ—¬λŸ¬ 번 μ„ μ–Έ κ°€λŠ₯

interface Person {
  name: string;
}

interface Person {
  age: number;
}

πŸ‘‰ μžλ™μœΌλ‘œ 합쳐짐 πŸ‘‡

const person: Person = {
  name: "",
  age: 20
};

❗ type은 μ•ˆλ¨

type Person = { name: string }
type Person = { age: number } // ❌ μ—λŸ¬

8️⃣ λͺ¨λ“ˆ 보강 (싀무 πŸ”₯)

πŸ‘‰ 라이브러리 νƒ€μž… λΆ€μ‘±ν•  λ•Œ μΆ”κ°€

interface Lip {
  a: number;
  b: number;
}

interface Lip {
  c: string;
}

πŸ‘‰ κ²°κ³Ό


const lip: Lip = {
  a: 1,
  b: 2,
  c: "hello"
};

πŸ’‘ 핡심 μš”μ•½

πŸ‘‰ μΈν„°νŽ˜μ΄μŠ€λŠ”

  • 객체 ꡬ쑰 μ •μ˜μš©
  • ν™•μž₯(상속) κ°€λŠ₯
  • μ„ μ–Έ ν•©μΉ¨ κ°€λŠ₯

πŸ‘‰ νƒ€μž…(type)은

  • μœ λ‹ˆμ˜¨, μΈν„°μ„Ήμ…˜ κ°€λŠ₯
  • 더 μœ μ—°ν•¨

🚨 많이 ν•˜λŠ” μ‹€μˆ˜

❌ 1. extends ν–ˆλŠ”λ° κ°’ μ•ˆ λ„£μŒ

interface Dog extends Animal
πŸ‘‰ Animal 속성 λ‹€ λ„£μ–΄μ•Ό 함!

❌ 2. optional 착각

age?: number;

πŸ‘‰ 없어도 λ˜λŠ”κ±°μ§€
πŸ‘‰ undefined μžλ™ 포함됨

❌ 3. ν•¨μˆ˜ μ˜€λ²„λ‘œλ”© κ΅¬ν˜„ μ•ˆν•¨

sayHi(): void;
sayHi(a: number, b: number): void;

πŸ‘‰ μ‹€μ œ κ΅¬ν˜„μ€ ν•˜λ‚˜λ§Œ μž‘μ„±ν•΄μ•Ό 함

🎯 ν•œ 쀄 정리

πŸ‘‰ interface = 객체 ꡬ쑰 섀계 + 상속 + ν•©μΉ˜κΈ° κ°€λŠ₯ν•œ νƒ€μž…

profile
Frontend Developer · 기둝 ⭐

0개의 λŒ“κΈ€