TypeScript: Extends vs Implements

Outclass·2022년 7월 13일

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개의 댓글