=> JavaScript에서는 존재하지 않는다.
=> 객체의 타입을 정의하고 생김새를 가지도록 할 수 있다.
=> TypeScript에서의 클래스 기능은 C#에서 유래된 것이 많다.
=> 일부 기능은 TS에서만 존재하는 고유 문법으로 컴파일 후에 사라진다.
=> extends가 아닌 implements 키워드로 구현한다.

이처럼 파라미터에 인터페이스를 정의하고 변수, 함수 등에 인터페이스를 활용할 수 있다.
=> extends는 확장하는 느낌이라면 implements는 interface의 설계를 구현하는 것이다.

Jang이라는 클래스는 Person이 시키는대로 한다!!
=> name에 대한 내용과 run() 메서드에 대한 내용 중 하나라도 빠지면 에러가 난다.

그리고 이렇게 다중으로 implements를 할 수 있다.

extends와 implements를 동시에 할 수 있다.

이렇게 인터페이스에서도 extends를 적용할 수 있다.
만약 name?: string 이라고 적어주면 name 구현은 필수가 아니게 된다.