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

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

TypeScript

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

πŸ“Œ 1. 클래슀(class) μ™œ μ“°λŠ”κ°€?

❗ 문제 상황

let studentA = { name: 'army', age: 2, grade: 'A+' };
let studentB = { name: 'tan', age: 3, grade: 'B+' };

πŸ‘‰ μ΄λ ‡κ²Œ 계속 λ§Œλ“€λ©΄?

  • μ½”λ“œ 반볡 ❌
  • μœ μ§€λ³΄μˆ˜ 어렀움 ❌

βœ… ν•΄κ²°: 클래슀

πŸ‘‰ "ν‹€(섀계도)"을 λ§Œλ“€μ–΄μ„œ 객체λ₯Ό 찍어내기

class Student {}

πŸ‘‰ 이건 β€œν•™μƒμ„ λ§Œλ“œλŠ” 기계”라고 μƒκ°ν•˜λ©΄ 쉬움

πŸ“Œ 2. 클래슀 κΈ°λ³Έ ꡬ쑰

βœ… 클래슀 μ‚¬μš©

class Character {
  name;
  level;
  job;

  constructor(name, level, job) {
    this.name = name;
    this.level = level;
    this.job = job;
  }

  attack() {
    console.log(`${this.name} 곡격!`);
  }

  introduce() {
    console.log(`λ‚˜λŠ” ${this.job} ${this.name}`);
  }
}

❌ 객체 μ—¬λŸ¬ 개 λ§Œλ“€κΈ° (λΉ„νš¨μœ¨)

let characterA = {
  name: 'Hero',
  level: 1,
  job: 'Warrior',
  attack() {
    console.log('곡격!');
  },
};

let characterB = {
  name: 'Mage',
  level: 1,
  job: 'Wizard',
  attack() {
    console.log('λ§ˆλ²• 곡격!');
  },
};

πŸ‘‰ 반볡됨 😒

πŸ”₯ 핡심 κ°œλ… 3개

1) ν•„λ“œ : 객체의 속성

name;
level;
job;

πŸ‘‰ 객체가 κ°€μ§ˆ 데이터

2) μƒμ„±μž (constructor) : 객체 생성 μ‹œ μ‹€ν–‰

constructor(name, level, job)

πŸ‘‰ 객체 λ§Œλ“€ λ•Œ μžλ™ 싀행됨 (객체 생성 μ‹œ κ°’ μ„ΈνŒ…)

new Character('Hero', 1, 'Warrior');

πŸ‘‰ 이 μˆœκ°„ constructor 싀행됨

3) this : ν˜„μž¬ 생성 쀑인 객체

this.name = name;

πŸ‘‰ "μ§€κΈˆ λ§Œλ“€μ–΄μ§€κ³  μžˆλŠ” 객체"

πŸ“Œ 3. μΈμŠ€ν„΄μŠ€ 생성

let char1 = new Character('Hero', 1, 'Warrior');

class둜 λ§Œλ“  객체

πŸ‘‰ κ²°κ³Ό:


{
  name: 'Hero',
  level: 2,
  job: 'Warrior'
}

πŸ‘‰ 이걸 μΈμŠ€ν„΄μŠ€(instance)라고 뢀름

πŸ“Œ 4. 상속 (extends)

πŸ‘‰ κΈ°λŠ₯ μž¬μ‚¬μš© + ν™•μž₯

βœ… κ°œλ…

πŸ‘‰ "κΈ°μ‘΄ 클래슀 κΈ°λŠ₯ κ·ΈλŒ€λ‘œ κ°€μ Έμ˜€κ³  + μΆ”κ°€"

πŸ‘‰ β€œλ§ˆλ²•μ‚¬ 캐릭터” λ§Œλ“€κΈ°

class MageCharacter extends Character {
  mana;

  constructor(name, level, job, mana) {
    super(name, level, job); // λΆ€λͺ¨ 호좜
    this.mana = mana;
  }

  castSpell() {
    console.log(`${this.name}κ°€ λ§ˆλ²• μ‚¬μš©!`);
  }
}

πŸ“Œ μ‚¬μš©

let mage = new MageCharacter('Gandalf', 10, 'Wizard', 100);

mage.attack();      // λΆ€λͺ¨ λ©”μ„œλ“œ
mage.castSpell();   // μžμ‹ λ©”μ„œλ“œ

πŸ”₯ 핡심

1) extends : κΈ°μ‘΄ 클래슀 κΈ°λŠ₯ μž¬μ‚¬μš©

πŸ‘‰ λΆ€λͺ¨ 클래슀 상속

2) super() : λΆ€λͺ¨ μƒμ„±μž 호좜 ν•„μˆ˜

super(name, level, job);

πŸ‘‰ λΆ€λͺ¨ constructor 호좜

πŸ‘‰ ❗ μƒμ†μ—μ„œλŠ” λ°˜λ“œμ‹œ 써야 함

⚠️ μ€‘μš”ν•œ μ‹€μˆ˜ 포인트
super(name, job, level);

πŸ‘‰ ❌ μˆœμ„œ ν‹€λ¦Ό
πŸ‘‰ λΆ€λͺ¨λŠ” name, level, job)

πŸ“Œ 5. TypeScript 클래슀

JS vs TS 차이

  • νƒ€μž… μ§€μ • κ°€λŠ₯
  • νƒ€μž…μ²˜λŸΌ μ‚¬μš© κ°€λŠ₯

JS

name;

TS

name: string;

πŸ‘‰ νƒ€μž…μ„ λͺ…ν™•ν•˜κ²Œ μ§€μ •

μ½”λ“œ

class Character {
  name;
  level;
  job;

πŸ”₯ 핡심 포인트

πŸ‘‰ TypeScript ν΄λž˜μŠ€λŠ” "νƒ€μž… 역할도 κ°€λŠ₯"

const charA: Character= {
  name: '',
  level:2
  job: '',
  
};

πŸ‘‰ 클래슀 = νƒ€μž…μ²˜λŸΌ μ‚¬μš© κ°€λŠ₯

πŸ“Œ6. μ ‘κ·Ό μ œμ–΄μž (Access Modifier)

3κ°€μ§€ 핡심

ν‚€μ›Œλ“œμ˜λ―Έ
publicλˆ„κ΅¬λ‚˜ μ ‘κ·Ό κ°€λŠ₯
private클래슀 λ‚΄λΆ€λ§Œ κ°€λŠ₯
protectedμžμ‹ ν΄λž˜μŠ€κΉŒμ§€ κ°€λŠ₯
class Character {
  private name: string;
  protected level: number;
  job: string;

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

πŸ”₯ 차이

const char = new Character('Hero', 1, 'Warrior');

char.name ❌
char.level ❌
char.job β­•

μƒμ†μ—μ„œλŠ”?

class Warrior extends Character {
  showLevel() {
    console.log(this.level); // β­• protected
    // console.log(this.name); ❌ private
  }
}

πŸ“Œ 7. μΈν„°νŽ˜μ΄μŠ€ + 클래슀

  • implements둜 κ΅¬ν˜„
  • ꡬ쑰 κ°•μ œ

μΈν„°νŽ˜μ΄μŠ€

πŸ‘‰ "이 ꡬ쑰 λ°˜λ“œμ‹œ 따라!"

interface GameCharacter {
  name: string;
  speed: number;
  move(): void;
}

κ΅¬ν˜„

πŸ‘‰ μΈν„°νŽ˜μ΄μŠ€ κ·œμΉ™ κ°•μ œ

class Player implements GameCharacter {
  constructor(
    public name: string,
    public speed: number,
    private skill: string
  ) {}

  move() {
    console.log(`${this.speed} μ†λ„λ‘œ 이동`);
  }
}

πŸ‘‰ λ°˜λ“œμ‹œ λ‹€ κ΅¬ν˜„ν•΄μ•Ό 함

μƒμ„±μž 단좕 문법 ⭐ (μ€‘μš”)

β†’ μžλ™μœΌλ‘œ ν•„λ“œ + this 생성

constructor(public name: string, public speed: number, private skill: string)

πŸ‘‰ 이거 μ“°λ©΄ μžλ™μœΌλ‘œ:

this.name = name;
this.moveSpeed = moveSpeed;

πŸ‘‰ ❗ μ—„μ²­ 많이 μ“°μž„

🎯 ν•œ 쀄 핡심 정리

πŸ‘‰ 클래슀 = 객체 μ°μ–΄λ‚΄λŠ” 곡μž₯
πŸ‘‰ constructor = μ΄ˆκΈ°κ°’ μ„ΈνŒ…
πŸ‘‰ extends = 볡사 + ν™•μž₯
πŸ‘‰ super = λΆ€λͺ¨ 호좜
πŸ‘‰ TSλŠ” νƒ€μž…κΉŒμ§€ 관리

profile
Frontend Developer · 기둝 ⭐

0개의 λŒ“κΈ€