헤더 영역 바로가기 컨텐츠 영역 바로가기 푸터 영역 바로가기
썸네일

[2] 타입스크립트의 타입 정의 상속에 대하여

CODi

2024-10-21 16:46

사진: Unsplash의 Markus Spiske

개요

저번에는 타입을 어떻게 정의하고 사용하는지에 대해 알아봤는데

이번에는 상속을 이용해서 타입을 조합해 정의해보겠습니다!

타입 정의 방법

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;
};

​​마무리

이번에는 타입의 상속에 대해 알아보았습니다.

그래도 블럭으로 비유하며 생각해보니 상속이라고 외우는것보다 더 쉽네요 ㅋㅋㅋ