[Language/TypeScripts] ์ƒ์†

2023. 7. 27. 13:51ใ†๐Ÿ”ค Language/TypeScript

์ •์˜: ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ, ๊ธฐ์กด ํด๋ž˜์Šค์˜ ์†์„ฑ/๋งค์„œ๋“œ๋ฅผ ๋ฌผ๋ ค๋ฐ›์•„ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ.

   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