TypeScript: Extends vs Implements

Outclass·2022년 7월 13일
0

extends vs implements

Typescript에서 class를 사용하다보면 보게 되는 Typescript class 상속의 유형들이다.
각각의 정의와 차이점에 대해 정리해본다

extends

extends는 class를 그야말로 상속하는 개념으로, 부모 클래스의 속성/메소드를 그대로 사용가능하다.

Classes may extend from a base class. A derived class has all the properties and methods of its base class, and also define additional members. - 공식문서

class Animal {
  move() {
    console.log("Moving along!");
  }
}
 
class Dog extends Animal {
  woof(times: number) {
    for (let i = 0; i < times; i++) {
      console.log("woof!");
    }
  }
  
const d = new Dog();
// Base class method
d.move();
// Derived class method
d.woof(3);

다중상속은 불가능하다.

class A {
  a() {
  }
}

class B {
  b() {
  }
}

//아래와 구현은 불가능하다
class C extends A, B{
}

implements

상속의 느낌보다는 interface로 class의 속성이나 메소드에 제약조건을 추가하는 것에 더 가까운 것 같다. interface로 타입을 지정해줄 뿐, 내부 구현을 상속하는 것은 아니기 때문에 속성이나 메소드를 반드시 override해서 써야 한다.(추상 메소드와 비슷한 느낌)

You can use an implements clause to check that a class satisfies a particular interface. An error will be issued if a class fails to correctly implement it - 공식문서

interface Study {
  read(): void;
}

//이것은 가능
class Coding implements Study {
  read() {
    //타입에 내부구현은 정의되어 있지 않으므로, override해야 한다.
    console.log("공식문서를 읽자!");
  }
}

//이렇게 하면 에러
class Coding implements Study {
  //read가 없으므로 에러가 뜬다
  write() {
    console.log("일단 쓰고 보자");
  }
}

다중 상속이 가능하다.

interface A {
  a() {
  }
}

interface B {
  b() {
  }
}

//아래와 같이 구현할 수 있다.
class C implements A, B{
}

참조링크 : https://www.typescriptlang.org/docs/handbook/2/classes.html

profile
When you stop having big dreams that’s when you’ve died, despite not being buried yet.

0개의 댓글