TypeScript

[TypeScript] Record๋ž‘ Interface ๋ญ๊ฐ€ ๋‹ค๋ฅด์ง€ .. ?

Dana10 2025. 3. 7. 00:00

โœจ Record<K, T>

K๋Š” key, T๋Š” value๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

๊ทธ๋ž˜์„œ Record๋Š” ์‚ฌ์‹ค์ƒ key์™€ value์˜ ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.

type User = Record<string, number>;

const userAge: User = {
  Alice: 25,
  Bob: 30,
  Charlie: 22,
};

 

์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ๋ฐ”๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด๋ฐ ์—ฌ๊ธฐ์„œ key๋Š” String, ๊ฐ’์€ Number๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

type StatusCodes = Record<"success" | "error" | "loading", string>;

const status: StatusCodes = {
  success: "Operation was successful",
  error: "There was an error",
  loading: "Loading...",
};

์ด๋ ‡๊ฒŒ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ key๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ,

key์—๋Š”  "success", "error", "loading"๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์ •๋˜์–ด ์žˆ๊ณ 

value๋Š” string๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

 

type Item = Record<"id" | "name" | "price", string | number>;

const product: Item = {
  id: 101,
  name: "Laptop",
  price: 1200,
};

์—ฌ๊ธฐ ์ข€ ๋” ๋ณต์žกํ•œ ์˜ˆ์‹œ๊ฐ€ ์žˆ๋Š”๋ฐ key์—๋Š” id,name,price๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ณ  value๋Š” String์ด๋‚˜ Number๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ“ Record๋Š” ์ด๋ ‡๊ฒŒ ์ •ํ•ด์ง„ ํ‚ค์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ๊ฐ’์„ ๊ฐ€์ง€๋„๋ก ํƒ€์ž…์„ ์ •์˜ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

์Œ ๊ทธ๋Ÿฌ๋ฉด Interface๋ž‘์€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅผ๊นŒ ? ๐Ÿค”


โœจ interface

interface๋Š” ๊ฐ์ฒด์— ํฌํ•จ๋  ์†์„ฑ์˜ ์ด๋ฆ„๊ณผ ํƒ€์ž…์„ ์ง€์ •ํ•˜์—ฌ ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

const user: User = {
  name: 'Alice',
  age: 30,
};

 

์—ฌ๊ธฐ์„œ๋Š” name์˜ value๋Š” string์ด์–ด์•ผ ํ•˜๊ณ  age๋Š” numer์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

 

์ด๊ฑธ ๋งŒ์•ฝ Record๋กœ ๋ฐ”๊ฟ”๋ณธ๋‹ค๋ฉด ์–ด๋–จ๊นŒ?

type User = Record<'name' | 'age', string|number>;

const user: User = {
  name: 'Alice',
  age: '30',  // ์ฃผ์˜! ๊ฐ’์ด 'string'์œผ๋กœ ์ง€์ •๋˜์—ˆ์Œ
};

 

Record๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด name๊ณผ age๋ผ๋Š” key์˜ value๋กœ string, number ๋‘˜ ๋‹ค ํ—ˆ์šฉํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

value๋กœ String๊ณผ Number ๋ชจ๋‘๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

name์— Number๊ฐ€ ๋“ค์–ด๊ฐ€๋„, age์— String์ด ๋“ค์–ด๊ฐ€๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.

์ด๊ฑด ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋˜ ๊ทธ๋ฆผ์€ ์•„๋‹ ๊ฒƒ์ด๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ Record๋Š” value์˜ ํƒ€์ž…์ด ๋ชจ๋‘ ๋™์ผํ•  ๋•Œ ์‚ฌ์šฉํ•ด์•ผ ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿง ์–ธ์ œ interface๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์–ธ์ œ Record๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

1. interface ์‚ฌ์šฉ ์ƒํ™ฉ

  • ๊ตฌ์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•˜๊ณ , ๊ฐ์ฒด๊ฐ€ ํŠน์ • ์†์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ.
  • ํ™•์žฅํ•˜๊ฑฐ๋‚˜, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค๋ฅธ ํƒ€์ž…๊ณผ ํ•ฉ์„ฑํ•  ๋•Œ ์œ ์šฉ.
  • interface๋Š” ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ๋‹ค๋ฃจ๋Š” ๋ณต์žกํ•œ ๊ฐ์ฒด์— ์‚ฌ์šฉ.
interface Person {
  name: string;
  age: number;
  greet(): void;
}

const person: Person = {
  name: 'John',
  age: 25,
  greet() {
    console.log(`Hello, my name is ${this.name}`);
  },
};

 

2. Record ์‚ฌ์šฉ ์ƒํ™ฉ

  • ์ •ํ•ด์ง„ ํ‚ค์— ๋Œ€ํ•ด ๋™์ผํ•œ ํƒ€์ž…์˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉ. 
  • ํ‚ค๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •ํ•ด์ ธ ์žˆ์„ ๋•Œ, ์†์„ฑ๋“ค์ด ๋™์ผํ•œ ํƒ€์ž…์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•  ๋•Œ ์œ ์šฉ.
  • ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํ‚ค๋‚˜ ์œ ์—ฐํ•œ ํ‚ค์— ๋Œ€ํ•ด ๊ฐ’ ํƒ€์ž…์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ.
type Status = Record<"pending" | "completed" | "failed", boolean>;

const taskStatus: Status = {
  pending: false,
  completed: true,
  failed: false,
};

 

'TypeScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TypeScript] unknown vs any  (0) 2025.03.06
[TypeScript] TypeScript ์™œ ์“ธ๊นŒ์š”?  (0) 2025.03.06