ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Language/Typescript

[๐ŸŸฆ] interface & type

์ฑ„._. 2025. 3. 10. 16:28

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ํƒ€์ž…์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹์ธ interface์™€ type.

 

interface๋Š” ์—ฌ๋Ÿฌ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์œ„ํ—˜์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ž์ฃผ ์“ฐ์ด์ง€๋Š” ์•Š๋Š” ๋“ฏ ํ•˜๋‹ค.

interface Todo {
	id: string;
    title: string;
    completed: boolean;
};

interface Todo {
	timestamp: number;
};

 

์œ„์™€ ๊ฐ™์ด interface๋Š” ์—ฌ๋Ÿฌ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ํ• ๋‹นํ•˜๊ฒŒ ๋˜๋ฉด ๊ฒฐ๊ตญ Todo์—๋Š” 4๊ฐœ์˜ ํƒ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ํ™•์ธ์€ ์•„๋ž˜ ์‚ฌ์ง„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด todo. ์„ ์ฐ์œผ๋ฉด ๋‚ด๋ถ€ ํƒ€์ž… ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ timestamp ํƒ€์ž…์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

 

๋‹ค๋งŒ, ์ด๋ ‡๊ฒŒ ์“ฐ์ธ๋‹ค๋ฉด Todo ์ž์ฒด์˜ ํƒ€์ž…์ด ๋ณ€ํ•˜๊ฒŒ ๋œ๋‹ค.

์ฆ‰, ์ฒ˜์Œ ํ• ๋‹นํ•œ {id, title, completed} ํƒ€์ž…๋งŒ์˜ Todo๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ณณ์ด ์žˆ๋‹ค๋ฉด

timpstamp๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ํ˜น์—ฌ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

(๋ฆฌ์•กํŠธ์—์„œ push๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์›๋ณธ ๋ฐฐ์—ด์ด ๋ณ€ํ•ด์„œ ๋ถˆ๋ณ€์„ฑ์ด ๊นจ์ง€๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ๋˜๋ ค๋‚˜..?)

 

๋”ฐ๋ผ์„œ interface๋Š” extends, type์€ & ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํƒ€์ž…์„ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.


 

๐Ÿ“interface

  • interface C๊ฐ€ A์™€ B๋ฅผ ์ƒ์†(extends) ํ•ด์„œ ๋ชจ๋“  ์†์„ฑ์„ ๊ฐ€์ง
  • interface๋Š” ์ž๋™์œผ๋กœ ๋ณ‘ํ•ฉ(Declaration Merging) ๊ฐ€๋Šฅ
// interface - extends

interface A {
  name: string;
}

interface B {
  age: number;
}

// B๊ฐ€ A๋ฅผ ํ™•์žฅ (interface๋Š” extends ์‚ฌ์šฉ)
interface C extends A, B {
  gender: string;
}

const person: C = {
  name: "์œ ๋ฆฌ",
  age: 25,
  gender: "์—ฌ์„ฑ",
};

 

 

 

๐Ÿ“type

  • type C๋Š” A, B๋ฅผ ๋ณ‘ํ•ฉ(& ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)
  • type์€ ํ™•์žฅํ•  ๋•Œ & ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
// type - & ์—ฐ์‚ฐ์ž

type A = {
  name: string;
};

type B = {
  age: number;
};

// ๋‘ ๊ฐœ์˜ ํƒ€์ž…์„ & ์—ฐ์‚ฐ์ž๋กœ ํ•ฉ์น˜๊ธฐ
type C = A & B & { gender: string };

const person: C = {
  name: "์œ ๋ฆฌ",
  age: 25,
  gender: "์—ฌ์„ฑ",
};

 

 

๐Ÿ“Œinterface vs type ์ฐจ์ด

// interface ์ž๋™ ๋ณ‘ํ•ฉ ๊ฐ€๋Šฅ
interface A {
  name: string;
}

interface A {
  age: number;
}

const person: A = { name: "์ง„์ฑ„", age: 25 }; // ์ž๋™ ๋ณ‘ํ•ฉ๋จ

// type์€ ์ค‘๋ณต ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ โŒ 
type B = { name: string };
type B = { age: number }; // Error: Duplicate identifier 'B'

 

 

 

โœจ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

  • ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ํ™•์žฅํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋ฉด? → interface (์ž๋™ ๋ณ‘ํ•ฉ ๊ฐ€๋Šฅ)
  • ์œ ๋‹ˆ์˜จ(|)์ด๋‚˜ ํŠœํ”Œ ๊ฐ™์€ ๋ณต์žกํ•œ ํƒ€์ž… ์กฐํ•ฉ์ด ํ•„์š”ํ•˜๋ฉด? → type

๐Ÿ“Œ๋‘˜ ๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, interface๋Š” ํ™•์žฅ์„ฑ(extends)์ด ํ•„์š”ํ•  ๋•Œ, type์€ ๋” ์ž์œ ๋กœ์šด ์กฐํ•ฉ์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ

๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2026/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ