[Typescript] ✨Interface ↔ Abstract class

미누·2023년 3월 30일
0

TypeScript

목록 보기
3/6

Interface

  • 일반적으로 변수, 함수, 클래스에 타입 체크를 위해 사용
  • 직접 인스턴스를 생성 불가, 포함하는 모든 메소드가 추상 메소드
  • 추상 클래스의 추상 메소드와 달리 abstract 키워드 사용 불가

interface를 사용하는 이유

  • 타입의 이름을 짓고 코드 안의 계약을 정의
  • 프로젝트 외부에서 사용하는 코드의 계약을 정의하는 강력한 방법
  • 아래와 같은 범주에 대한 계약을 정의
    - 객체의 스펙(속성과 속성의 타입)
    - 함수의 파라미터
    - 함수의 스펙(파라미터, 반환 타입 등)
    - 배열과 객체에 접근하는 방식
    - 클래스
interface가 없는 코드(왼쪽) ↔ interface를 사용한 코드(오른쪽)

Interface를 추가하여 함수 매개변수 프로퍼티 정의 가능.
정의한 프로퍼티 값을 누락하거나 정의하지 않은 값을 인수로 전달 시 컴파일 에러 발생.

Abstract class

  • 추상 속성 혹은 메소드를 가질 수 있는 클래스
  • 자신의 속성이나 메서드를 상속하는 다른 클래스에서 구현
  • 추상 클래스로는 객체 인스턴스를 생성 불가, 상속용으로만 가능

추상 클래스를 사용하는 이유

  • 공통적인 동작을 정의하기 위해
  • 부모 클래스를 상속 받아 기능을 확장할 때
  • 복제본으로 상속하게 만들고 싶을 때

Summary

구현 가능한 메소드

  • 추상 클래스 - 추상 메소드 포함, 일반 메소드도 포함 가능
  • 인터페이스 - 모든 메소드가 추상 메소드

객체 생성

  • 추상 클래스 - 객체(인스턴스) 생성 불가
  • 인터페이스 - 객체 생성 가능

생성자

  • 추상 클래스 - 생성자를 가질 수 있으며, 자식 클래스에서 호출 가능
  • 인터페이스 - 생성자 X

다중 상속

  • 추상 클래스 - 다른 클래스 상속 불가, 단일 상속만 허용
  • 인터페이스 - 여러 인터페이스 상속 가능, 다중 상속 허용

타입 호환성

  • 추상 클래스 - 타입 호환성 보장 X
  • 인터페이스 - 서로 다른 인터페이스 간 상속 가능, 타입 호환성 보장

💥 추상 클래스는 프로그램의 전체 구조를 잡기 위해 사용하고, 인터페이스는 기본적인 설계도로써 개발 협업에서 사용하기 용이

출처 - [엘리스 강의 자료]

profile
Dev Notes, with bit of JS?

0개의 댓글