고급 TypeScript - 고급 인터페이스: 확장 인터페이스
고급 인터페이스: 확장 인터페이스
고급 타입스크립트에서 인터페이스는 객체의 구조를 정의하는 중요한 도구입니다. 확장 인터페이스
는 기존의 인터페이스를 기반으로 새로운 속성을 추가하거나 수정하여 더 구체적인 형태로 만드는 방법을 제공합니다. 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다.
1. 기본 개념
인터페이스를 확장하면, 기존에 정의된 속성과 메서드를 포함하면서도 추가적인 속성이나 메서드를 정의할 수 있습니다. 이는 객체 지향 프로그래밍에서 상속과 유사한 개념으로 이해할 수 있습니다.
예를 들어, 기본적으로 Animal
이라는 인터페이스가 있다고 가정해봅시다:
interface Animal {
name: string;
age: number;
sound(): void;
}
위와 같은 Animal
인터페이스가 있을 때, 이를 확장하여 특정 동물에 대한 세부 정보를 추가할 수 있습니다.
2. 예제 - 동물 유형 확장하기
이제 Dog
라는 새로운 인터페이스를 만들어 보겠습니다. 이때 Animal
을 확장합니다:
interface Dog extends Animal {
breed: string; // 품종 속성 추가
}
const myDog: Dog = {
name: "Buddy",
age: 3,
breed: "Golden Retriever",
sound() {
console.log("Woof!");
}
};
console.log(myDog.name); // Buddy
myDog.sound(); // Woof!
위 예제에서 볼 수 있듯이, Dog
인터페이스는 Animal
의 모든 특성을 가지며 여기에 **품종(breed)**이라는 새 속성이 추가되었습니다.
3. 다중 상속
타입스크립트에서는 하나 이상의 부모 인터페이스로부터 상속받아 여러 개의 부모 특성을 결합할 수도 있습니다. 이를 통해 복잡한 구조도 쉽게 표현할 수 있습니다.
예를 들어, 두 개 이상의 인터페이스인 Pet
과 WildAnimal
을 만들고 이를 동시에 상속받는 경우입니다:
interface Pet {
ownerName: string;
}
interface WildAnimal {
habitat: string;
}
interface Lion extends Pet, WildAnimal {
roar(): void; // 사자의 울음 소리 메서드 추가
}
const myLion: Lion = {
ownerName: "John",
habitat: "Savannah",
roar() {
console.log("Roar!");
}
};
console.log(myLion.ownerName); // John
console.log(myLion.habitat); // Savannah
myLion.roar(); // Roar!
여기서는 **애완동물(ownerName)**과 야생동물(habitat) 두 가지 특성을 모두 가진 사자(Lion) 객체를 생성했습니다.
4. 요약 및 활용 팁
- 재사용성 : 기존의 코드를 재사용함으로써 중복을 줄이고 일관된 구조를 유지합니다.
- 유지보수 용이 : 한 곳에서 변경하면 그 변경 사항이 모든 자식 클래스나 객체에 적용됩니다.
- 명확한 타입 정의 : 코드가 더욱 명확하고 읽기 쉬워집니다.
인터페이스 확장은 특히 대규모 애플리케이션에서 다양한 데이터 모델링에 매우 유용하게 사용될 수 있으며, 각 기능별로 잘 분리된 설계를 가능하게 합니다.