[TS] interface와 abstract class의 차이에 대한 고민

변진상·2023년 5월 31일
0

고민, 고찰, 삽질

목록 보기
1/6

interface와 abstract class의 차이

- 추상 클래스의 경우 단일 상속만 가능, 인터페이스는 다중 상속 가능

// 추상클래스는 단일 상속만 가능
abstract class Animal {
 ...구현부...
}
class Dog extends Animal {
 ... 
}

 // 인터페이스는 다중 상속 가능
 
interface Move {
  move(): void;
}

interface Speak {
  speak(text: string): void;
}

interface Actions extends Move, Speak {
  sayMyName(): void;
}

class Human implements Actions {
  move(): void {
    console.log("move");
  }
  speak(text: string): void {
    console.log(text);
  }
  sayMyName(): void {
    console.log("sayMyname!");
  }
}

- 추상클래스는 abstract modifier(제어자)가 표기된 변수나 메소드만 구현하면 되지만, interface는 선언된 모든 변수나 메소드를 구현해야한다.

//interface => Animal Interface내의 makesound, move모두 구현해야한다.
interface Animal {
  makeSound(): void;
  move(): void;
}

class Dog implements Animal {
  makeSound(): void {
    console.log("Woof!");
  }

  move(): void {
    console.log("Moving...");
  }
}

const myDog: Animal = new Dog();
myDog.makeSound(); // 출력: "Woof!"
myDog.move(); // 출력: "Moving..."
//abstract class 
abstract class Animal {
  abstract makeSound(): void;

  move(): void {
    console.log("Moving...");
  }
}

class Dog extends Animal {
  makeSound(): void {
    console.log("Woof!");
  }
}

const myDog = new Dog();
myDog.makeSound(); // 출력: "Woof!"
myDog.move(); // 출력: "Moving..."
profile
자신을 개발하는 개발자!

0개의 댓글