[λ°λΈŒμ½”μŠ€] νƒ€μž…μŠ€ν¬λ¦½νŠΈ: 객체 λ¦¬ν„°λŸ΄λΆ€ν„° ν΄λž˜μŠ€κΉŒμ§€

2025. 6. 11. 23:55Β·πŸ•ŠοΈν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ λ°λΈŒμ½”μŠ€/TIL

객체 λ¦¬ν„°λŸ΄ νƒ€μž…

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 객체의 ꡬ쑰λ₯Ό λͺ…ν™•νžˆ μ§€μ •ν•  수 있으며, 이λ₯Ό 객체 λ¦¬ν„°λŸ΄ νƒ€μž…μ΄λΌ ν•œλ‹€. 객체가 κ°€μ Έμ•Ό ν•  속성과 κ·Έ νƒ€μž…μ„ λͺ…μ‹œν•¨μœΌλ‘œμ¨ νƒ€μž… μ•ˆμ •μ„±μ„ ν™•λ³΄ν•œλ‹€.

const user: { id: number; name: string } = {
  id: 1,
  name: "Alice",
};

ν•„μš” μ‹œ 선택적 속성(?)μ΄λ‚˜ 읽기 μ „μš© 속성(readonly)도 μ‚¬μš©ν•  수 μžˆλ‹€.

const config: { readonly port: number; debug?: boolean } = {
  port: 3000,
};

이 방식은 κ°„λ‹¨ν•œ 객체 ꡬ쑰λ₯Ό μΌμ‹œμ μœΌλ‘œ μ •μ˜ν•  λ•Œ μœ μš©ν•˜λ©°, 반볡 μ‚¬μš©μ΄ ν•„μš”ν•œ κ²½μš°μ—λŠ” λ³„λ„μ˜ νƒ€μž… λ³„μΉ­μ΄λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 μ’‹λ‹€.

μœ λ‹ˆμ–Έ νƒ€μž…

μœ λ‹ˆμ–Έ νƒ€μž…μ€ ν•˜λ‚˜μ˜ 값이 μ—¬λŸ¬ νƒ€μž… 쀑 ν•˜λ‚˜μΌ 수 μžˆμŒμ„ μ˜λ―Έν•œλ‹€. | μ—°μ‚°μžλ₯Ό 톡해 μ •μ˜ν•˜λ©°, μ„œλ‘œ λ‹€λ₯Έ νƒ€μž… κ°„ 쑰건 λΆ„κΈ° μ²˜λ¦¬μ— ν™œμš©λœλ‹€.

let status: "success" | "error" | "loading";
status = "success"; // OK
status = "failure"; // 였λ₯˜

κΈ°λ³Έ νƒ€μž… 간에도 μœ λ‹ˆμ–Έμ„ μ μš©ν•  수 μžˆλ‹€.

let value: string | number;
value = "hello";
value = 42;

μœ λ‹ˆμ–Έ νƒ€μž…μ„ μ‚¬μš©ν•  경우, ν•΄λ‹Ή 값이 μ–΄λ–€ νƒ€μž…μΈμ§€λ₯Ό νŒλ‹¨ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ 닀루기 μœ„ν•œ νƒ€μž… κ°€λ“œκ°€ ν•¨κ»˜ μ‚¬μš©λœλ‹€.

νƒ€μž… 별칭

νƒ€μž… 별칭(type alias)은 type ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³΅μž‘ν•œ νƒ€μž…μ„ μž¬μ‚¬μš© κ°€λŠ₯ν•˜λ„λ‘ 이름을 λΆ€μ—¬ν•˜λŠ” κΈ°λŠ₯이닀. μœ λ‹ˆμ–Έ νƒ€μž…, 객체 νƒ€μž…, ν•¨μˆ˜ νƒ€μž… λ“± λ‹€μ–‘ν•œ νƒ€μž… ν˜•νƒœμ— μ‚¬μš©ν•  수 μžˆλ‹€.

type UserID = string | number;
let uid: UserID = "abc123";

객체 ꡬ쑰에도 ν™œμš©ν•  수 μžˆλ‹€.

type Product = {
  id: number;
  name: string;
  price: number;
};

별칭은 μΈν„°νŽ˜μ΄μŠ€μ™€ μœ μ‚¬ν•œ 역할을 ν•˜μ§€λ§Œ, μœ λ‹ˆμ–Έ νƒ€μž…μ΄λ‚˜ νŠœν”Œκ³Ό 같이 더 폭넓은 νƒ€μž… μ •μ˜μ— μ ν•©ν•˜λ‹€.

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

νƒ€μž… κ°€λ“œλŠ” λŸ°νƒ€μž„ μ‹œμ μ—μ„œ μœ λ‹ˆμ–Έ νƒ€μž…μ΄λ‚˜ any νƒ€μž…μ˜ ꡬ체적인 νƒ€μž…μ„ 쒁히기 μœ„ν•œ 쑰건문이닀. 일반적으둜 typeof, instanceof, μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜ 등이 μ‚¬μš©λœλ‹€.

function printId(id: string | number) {
  if (typeof id === "string") {
    console.log(id.toUpperCase());
  } else {
    console.log(id.toFixed(2));
  }
}

μ‚¬μš©μž μ •μ˜ νƒ€μž… κ°€λ“œλ₯Ό λ§Œλ“€ μˆ˜λ„ μžˆλ‹€.

type Dog = { bark: () => void };
type Cat = { meow: () => void };

function isDog(animal: Dog | Cat): animal is Dog {
  return (animal as Dog).bark !== undefined;
}

μ΄λŸ¬ν•œ 방식은 μœ λ‹ˆμ–Έ νƒ€μž… 처리의 μ•ˆμ •μ„±κ³Ό 가독성을 λ†’μ΄λŠ” 데 μœ μš©ν•˜λ‹€.

λ°°μ—΄κ³Ό νŠœν”Œ

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” λ°°μ—΄μ˜ μš”μ†Œ νƒ€μž…μ„ λͺ…ν™•νžˆ μ§€μ •ν•  수 μžˆλ‹€. 일반 배열은 λ‹€μŒκ³Ό 같이 μ„ μ–Έν•œλ‹€.

let names: string[] = ["Alice", "Bob"];
let scores: Array<number> = [100, 95, 80];

νŠœν”Œ(tuple)은 κ³ μ •λœ 길이와 각 μΈλ±μŠ€μ— λͺ…ν™•ν•œ νƒ€μž…μ„ κ°€μ§€λŠ” 배열이닀. λ‹€μ–‘ν•œ 데이터λ₯Ό μˆœμ„œλŒ€λ‘œ 묢을 λ•Œ μœ μš©ν•˜λ‹€.

let userInfo: [number, string, boolean] = [1, "Alice", true];

νŠœν”Œμ€ 인덱슀 기반 μ ‘κ·Ό μ‹œ μžλ™μœΌλ‘œ ν•΄λ‹Ή νƒ€μž…μ΄ μΆ”λ‘ λ˜λ―€λ‘œ, 데이터 포맷이 κ³ μ •λœ 경우 μ‚¬μš©μ„ ꢌμž₯ν•œλ‹€.

ν΄λž˜μŠ€μ™€ 객체 생성

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ ν΄λž˜μŠ€λŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ 문법을 μ§€μ›ν•˜λ©°, μƒμ„±μž(constructor)λ₯Ό 톡해 μ΄ˆκΈ°ν™”λ₯Ό μˆ˜ν–‰ν•œλ‹€.

class User {
  id: number;
  name: string;

  constructor(id: number, name: string) {
    this.id = id;
    this.name = name;
  }

  greet() {
    return `Hello, ${this.name}`;
  }
}

const user = new User(1, "Alice");

μƒμ„±μžλ₯Ό 톡해 속성을 μ΄ˆκΈ°ν™”ν•˜κ³ , λ©”μ„œλ“œλ₯Ό 톡해 객체의 ν–‰μœ„λ₯Ό μ •μ˜ν•  수 μžˆλ‹€.

μ ‘κ·Ό μ§€μ •μž (public, private, protected)

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 클래슀 멀버에 μ ‘κ·Ό μ œμ–΄μžλ₯Ό μ œκ³΅ν•œλ‹€. public은 μ–΄λ””μ„œλ‚˜ μ ‘κ·Ό κ°€λŠ₯ν•˜κ³ , privateλŠ” 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€. protectedλŠ” ν•΄λ‹Ή ν΄λž˜μŠ€μ™€ μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλ‹€.

class Account {
  public owner: string;
  private balance: number;

  constructor(owner: string, balance: number) {
    this.owner = owner;
    this.balance = balance;
  }

  public getBalance(): number {
    return this.balance;
  }
}

μ ‘κ·Ό μ§€μ •μžλŠ” 객체의 μΊ‘μŠν™”λ₯Ό κ΅¬ν˜„ν•˜κ³ , μ™ΈλΆ€λ‘œλΆ€ν„°μ˜ μ˜λ„μΉ˜ μ•Šμ€ 접근을 λ°©μ§€ν•˜λŠ” 데 μœ μš©ν•˜λ‹€.

Getter와 Setter

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” getκ³Ό set ν‚€μ›Œλ“œλ₯Ό 톡해 ν”„λ‘œνΌν‹° μ ‘κ·Όμžλ₯Ό μ •μ˜ν•  수 μžˆλ‹€. λ‚΄λΆ€ 속성에 λŒ€ν•œ μ œμ–΄λœ 접근을 μ œκ³΅ν•˜λ©°, μ†μ„±μ²˜λŸΌ ν˜ΈμΆœν•  수 μžˆλ‹€.

class Temperature {
  private _celsius: number;

  constructor(celsius: number) {
    this._celsius = celsius;
  }

  get fahrenheit(): number {
    return this._celsius * 1.8 + 32;
  }

  set fahrenheit(value: number) {
    this._celsius = (value - 32) / 1.8;
  }
}

const temp = new Temperature(0);
console.log(temp.fahrenheit); // 32
temp.fahrenheit = 50;

getter/setterλŠ” μ†μ„±μ˜ μœ νš¨μ„± 검사, 포맷 λ³€ν™˜, μΊ‘μŠν™”λœ 데이터 μ ‘κ·Ό 등을 κ΅¬ν˜„ν•  λ•Œ μœ μš©ν•˜λ‹€.

'πŸ•ŠοΈν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ λ°λΈŒμ½”μŠ€ > TIL' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°λΈŒμ½”μŠ€] React 기초 핡심 정리(state, ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή, μ»΄ν¬λ„ŒνŠΈ 반볡)  (1) 2025.06.15
[λ°λΈŒμ½”μŠ€] React와 JSX, UI νŒ¨λŸ¬λ‹€μž„μ˜ μ „ν™˜  (1) 2025.06.14
[λ°λΈŒμ½”μŠ€] νƒ€μž…μŠ€ν¬λ¦½νŠΈ 기초(νƒ€μž…, μΈν„°νŽ˜μ΄μŠ€, μ—΄κ±°ν˜•)  (1) 2025.06.10
[λ°λΈŒμ½”μŠ€] 객체지ν–₯ μ–Έμ–΄  (3) 2025.06.04
ν¬μΈν„°μ˜ κ°œλ…κ³Ό λ‚΄λΆ€ λ™μž‘  (0) 2025.06.03
'πŸ•ŠοΈν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ λ°λΈŒμ½”μŠ€/TIL' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ°λΈŒμ½”μŠ€] React 기초 핡심 정리(state, ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή, μ»΄ν¬λ„ŒνŠΈ 반볡)
  • [λ°λΈŒμ½”μŠ€] React와 JSX, UI νŒ¨λŸ¬λ‹€μž„μ˜ μ „ν™˜
  • [λ°λΈŒμ½”μŠ€] νƒ€μž…μŠ€ν¬λ¦½νŠΈ 기초(νƒ€μž…, μΈν„°νŽ˜μ΄μŠ€, μ—΄κ±°ν˜•)
  • [λ°λΈŒμ½”μŠ€] 객체지ν–₯ μ–Έμ–΄
ν‚ν‚μž‰
ν‚ν‚μž‰
뿌둠트 개발자(지망생)의 ν’€μŠ€νƒ 개발자 도전기
  • ν‚ν‚μž‰
    monicx.dev
    ν‚ν‚μž‰
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (125) N
      • πŸ–₯️develop (11)
        • Github (2)
        • Frontend (4)
        • Backend (5)
        • Mobile (0)
        • CS (0)
        • Three.js (0)
        • Docker (0)
      • πŸ“šbook (2) N
        • npm Deep Dive (4)
      • πŸ“•review (4)
        • μ±… (12)
        • 행사 (0)
        • 회고 (2)
      • ⭐project (5)
        • petiary (2)
        • 暎詠 (0)
        • 인턴 (2)
      • 😢‍🌫️algorithm (0)
      • πŸ’‘tips (1)
      • 😎daily (10)
      • πŸ•ΉοΈgame (0)
      • πŸ•ŠοΈν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ λ°λΈŒμ½”μŠ€ (69) N
        • TIL (45) N
        • ν”„λ‘œμ νŠΈ (16)
        • 회고 (8)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
  • 링크

    • 벨둜그
  • 인기 κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
ν‚ν‚μž‰
[λ°λΈŒμ½”μŠ€] νƒ€μž…μŠ€ν¬λ¦½νŠΈ: 객체 λ¦¬ν„°λŸ΄λΆ€ν„° ν΄λž˜μŠ€κΉŒμ§€
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”