[2] 타입스크립트의 타입 정의 상속에 대하여
•
2024-10-21 16:46
개요
저번에는 타입을 어떻게 정의하고 사용하는지에 대해 알아봤는데
이번에는 상속을 이용해서 타입을 조합해 정의해보겠습니다!
타입 정의 방법
type Test = {
name: string, // 이름
description: string, // 설명
age: number, // 나이
func: () => void // 함수
}
테스트로 타입을 정의 해보았습니다.
이 부분이 저번에 알려드린 내용과 같은데요.
하지만 이렇게 사용하게 되면 특수한 상황,
예를 들면 name과 age의 타입만 필요한 상황, func와 name의 타입 정의만 필요한 상황 같은 특수한 상황이 있을 수 있는데요
이럴때 필요한게 상속입니다.
상속이란?
마치 레고를 조립하듯이 기본이 되는 기본 블럭이 있고
거기에 특수한 기능을 가진 블럭을 붙이는 겁니다.
예시
// 형태
type Shape = {
style: string // 스타일
color: string // 색상
}
// 상세정보
type Details = {
name: string, // 이름
description: string, // 설명
date: number // 날짜
}
// 자동차 베이스
type Car = {
company: string, // 이름
country: string // 설명
}
만약 이러한 값이 있다고 하였을때
자동차 베이스에 형태 + 상세정보를 합쳐야 하는 상황이 있는데
지금과 같은 경우엔 나뉘어져 있어 조립이 필요한 상황입니다.
이 경우 다음과 같이 하면 됩니다.
// 형태
interface Shape {
style: string; // 스타일
color: string; // 색상
}
// 상세정보
interface Details extends Shape {
name: string; // 이름
description: string; // 설명
date: number; // 날짜
}
// 자동차 베이스
interface Car extends Details {
company: string; // 이름
country: string; // 설명
}
결과
이렇게 할 경우 Car 타입을 사용하면 이런 형태를 지니게 됩니다.
const myCar: Car = {
style: "SUV",
color: "red",
name: "My Car",
description: "This is a great car!",
date: 2024,
company: "Toyota",
country: "Japan"
};
상속의 방법
상속의 방법은 interface의 extends만 있는게 아닌데요 type에 &를 붙여 조합하는것 또한 가능합니다.
그럼 결국 둘은 똑같은게 아니냐는 생각이 들수도 있을텐데
비유로 다름을 설명해보자면
const(상수)는 재선언 재할당이 불가능합니다.
var(변수)는 재선언 재할당이 가능합니다.
extends와 &는 이 차이인겁니다.
interface의 extends는 재선언 재할당이 불가능합니다.
type의 &는 재선언 재할당이 가능합니다.
예시
interface의 경우
interface User {
name: string;
}
interface User {
age: number; // 병합됨
}
const user: User = {
name: "CODi",
age: 28,
};
type의 경우
type User = {
name: string;
};
type User = { // 오류 발생
age: number;
};
마무리
이번에는 타입의 상속에 대해 알아보았습니다.
그래도 블럭으로 비유하며 생각해보니 상속이라고 외우는것보다 더 쉽네요 ㅋㅋㅋ