타입 별칭과 비슷하지만 '확장, 선언 병합, 다중 확장, 구현' 등 다양한 역할을 수행한다.
타입별칭은 객체나 클래스가 아닌 일반적인 타입에 대한 것들에 중복됨을 줄이기 위해 사용한다고 생각하면 되고,
인터페이스는 객체나 클래스 등에서 구조적으로 사용하기 위해 사용한다고 보면 된다.
1. 선언 병합
// 인터페이스 선언 병합 예시
interface User {
name: string;
}
interface User {
age: number;
}
// 합쳐진 User 인터페이스는 다음과 동일하게 취급됩니다.
const user: User = {
name: "Alice",
age: 30,
};
인터페이스를 동일한 이름으로 선언하지만 동일한 인터페이스로 취급하므로 확장하기가 쉬워진다.
2. 확장 (상속)
interface Animal {
name: string,
age: number,
}
interface Dog extends Animal {
isBark: string,
}
interface Cat extends Animal {
isScratch: string,
}
interface DogCat extends Dog, Cat {
}
extends 키워드로 '확장'을 할 수 있다. 이는 다른 이름의 인터페이스 혹은 클래스에 해당 인터페이스에 대한 추가적인 확장이다. 위의 코드에서는 Dog라는 인터페이스는 Animal의 타입들 까지 정의된다.
3. 구현
클래스가 특정 인터페이스나 추상 클래스에서 정의된 계약(Contract)을 반드시 구현하도록 강제할 때 사용된다.
// 인터페이스를 구현하는 클래스 예시
interface Logger {
log(message: string): void;
}
class ConsoleLogger implements Logger {
// Logger 인터페이스에 명시된 log 메서드를 구현
log(message: string): void {
console.log(`Log: ${message}`);
}
}
Logger의 log 함수를 반드시 구현해야한다.
추상클래스 구현
// 추상 클래스를 구현하는 예시
abstract class AbstractProcessor {
abstract process(data: string): void;
}
class DataProcessor extends AbstractProcessor {
process(data: string): void {
console.log(`Processing: ${data}`);
}
}
abstract 키워드로 추상클래스를 선언할 수 있다. 참고로 추상 클래스는 부분 구현이 가능하므로 인터페이스와는 쓰임이 다르다.
'프로그래밍 > 타입스크립트' 카테고리의 다른 글
타입스크립트 - 제네릭 함수 (0) | 2025.02.15 |
---|---|
타입스크립트 - 클래스 (0) | 2025.02.15 |
타입스크립트 - 사용자 정의 타입 가드 (0) | 2025.02.14 |
타입스크립트 - 함수 오버로딩 (0) | 2025.02.14 |
타입스크립트 - 함수 타입의 호환성 (0) | 2025.02.14 |