πŸ”€ Language/TypeScript

[Language/TypeScripts] 상속

TerryEHLee 2023. 7. 27. 13:51

μ •μ˜: 클래슀 κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜λŠ” κ°œλ…μœΌλ‘œ, κΈ°μ‘΄ 클래슀의 속성/λ§€μ„œλ“œλ₯Ό λ¬Όλ €λ°›μ•„ μƒˆλ‘œμš΄ 클래슀λ₯Ό μ •μ˜ν•  수 있음.

   extends ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•¨.
class Animal {
  name: string;

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

  makeSound() {
    console.log('동물 μ†Œλ¦¬~');
  }
}

class Dog extends Animal {
  age: number;

  constructor(name: string) {
    super(name);
    this.age = 5;
  }

  makeSound() {
    console.log('멍멍!'); // λΆ€λͺ¨μ˜ makeSound λ™μž‘κ³Ό λ‹¬λΌμš”!
  }

  eat() { // Dog 클래슀만의 μƒˆλ‘œμš΄ ν•¨μˆ˜ μ •μ˜
    console.log('κ°•μ•„μ§€κ°€ μ‚¬λ£Œλ₯Ό λ¨ΉμŠ΅λ‹ˆλ‹€.');
  }
}

class Cat extends Animal { // Animalκ³Ό λ‹€λ₯Όκ²Œ ν•˜λ‚˜λ„ μ—†μ–΄μš”!
}

const dog = new Dog('λˆ„λ μ΄');
dog.makeSound(); // 좜λ ₯: 멍멍!

const cat = new Cat('μ•Όμ˜Ήμ΄');
cat.makeSound(); // 좜λ ₯: 동물 μ†Œλ¦¬~
  • Animal Class: λΆ€λͺ¨ν΄λž˜μŠ€, Dog class: μžμ‹ν΄λž˜μŠ€
  • super: μžμ‹ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ν΄λž˜μŠ€λ₯Ό μ°Έμ‘°ν•  λ•Œ μ‚¬μš©
    • μžμ‹ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ν΄λž˜μŠ€μ™€ μ™„μ „ 같을 경우 μƒμ„±μž μƒλž΅ κ°€λŠ₯.
  • Dog classdpt makeSound()methodλ₯Ό μƒˆλ‘­κ²Œ μ •μ˜ν–ˆλŠ”λ° 이λ₯Ό overriding이라 함.

μ„œλΈŒνƒ€μž…, μŠˆνΌνƒ€μž…

  • μŠˆνΌνƒ€μž…: μ„œλΈŒνƒ€μž…μ˜ 것듀을 μ‚¬μš©ν•  수 μ—†μŒ. μœ„ μ˜ˆμ œμ—μ„œ Animal이 이에 ν•΄λ‹Ή. any μ—­μ‹œ μŠˆνΌνƒ€μž…
  • μ„œλΈŒνƒ€μž…: μŠˆνΌνƒ€μž…μ˜ 것듀을 자유둭게 μ‚¬μš©ν•  수 있음. μœ„ μ˜ˆμ œμ—μ„œ Dog, Cat이 ν•΄λ‹Ή.

upcasting/downcasting

  • upcasting: μ„œλΈŒνƒ€μž…μ„ μŠˆνΌνƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것.
    let dog: Dog = new Dog('또순이');
    let animal: Animal = dog; // upcasting λ°œλ™! 
    animal.eat(); // μ—λŸ¬. μŠˆνΌνƒ€μž…(Animal)으둜 λ³€ν™˜μ΄ λ˜μ–΄ eat λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μ—†μ–΄μš”! 
  • downcasting: μŠˆνΌνƒ€μž…μ„ μ„œλΈŒνƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것.
    let animal: Animal;
    animal = new Dog('또순이');
    

let realDog: Dog = animal as Dog;
realDog.eat(); // μ„œλΈŒνƒ€μž…(Dog)둜 λ³€ν™˜μ΄ λ˜μ—ˆκΈ° λ•Œλ¬Έμ— eat λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 있죠!

```

Reference