인터페이스 구현 VS 추상 클래스 상속 인터페이스 구현은 추상 클래스 상속과 아주 비슷합니다. 하지만 인터페이스가 더 범용으로 쓰이며 가벼운 반면, 추상 클래스는 특별한 목적과 풍부한 기능을 갖는다는 점이 다릅니다. 인터페이스 인터페이스는 형태를 정의하는 수단입니다. 값 수준에서 이는 객체, 배열, 함수, 클래스, 클래스 인스턴스를 정의할 수 있다는 뜻입니다. 인터페이스는 아무런 JavaScript 코드를 만들지 않으며 컴파일 타임에만 존재합니다. 추상 클래스 추상 클래스는 오직 클래스만 정의할 수 있습니다. 예상할 수 있겠지만 추상 클래스는 런타임의 JavaScript 클래스 코드를 만듭니다. 추상 클래스는 생성자와 기본 구현을 가질 수 있으며 프로퍼티와 메서드에 접근 한정자를 지정할 수 있습니다. 위..
구현 클래스를 선언할 때 implements라는 키워드를 이용해 특정 인터페이스를 만족 시킴을 표현할 수 있습니다. 다른 명시적인 타입 어노테이션처럼 implements로 타입 수준의 제한을 추가하면 구현에 문제가 있을 때 어디가 잘못되었는지 쉽게 파악할 수 있습니다. 또한 어댑터(adapter), 팩토리(factory), 전략(strategy) 등 흔한 디자인 패턴을 구현하는 대표적인 방식이기도 합니다. implements는 아래처럼 사용할 수 있습니다. interface Animal { eat(food: string): void sleep(hours: number): void } class Dog implements Animal { eat(food: string){ console.info('Ate s..
인터페이스 클래스는 인터페이스를 통해 사용할 때가 많습니다. 타입 별칭처럼 인터페이스도 타입에 이름을 지어주는 수단이므로 인터페이스를 사용하면 타입을 더 깔끔하게 정의할 수 있습니다. 타입 별칭과 인터페이스는 문법만 다를 뿐 거의 같은 기능을 수행하며, 작은 몇몇 부분에서만 차이를 보입니다. 먼저 둘의 공통점을 살펴보겠습니다. 아래 코드는 타입 별칭입니다. type RiceCake = { calories: number salty: boolean tasty: boolean } 이 코드를 다음처럼 간단하게 인터페이스로 바꿀 수 있습니다. interface RiceCake { calories: number salty: boolean tasty: boolean } RiceCake 타입 별칭을 사용한 모든 곳에 ..