[typescript] Class

dev stefanCho·2021년 9월 12일
1

typescript

목록 보기
7/16
post-custom-banner

modifier

modifier

class에는 modifier가 3가지 있다.

  • public : 표기하지 않아도 기본적으로 적용됨 (외부에서 접근할 수 있다.)
  • private : 해당 class(instance) 내에서만 접근(사용)할 수 있다.
  • protected : same class와 subclass에서 접근할 수 있다. (상위 class를 extends를 했다면, subclass에서도 사용할 수 있다는 의미)

class에서는 타입을 정의할 때 2가지 방식이 있다.

  1. 타입정의를 해주고, constructor내에서 initialize를 해준다.
class Vehicle {
  color: string;
  constructor(color: string) {
    this.color = color;
  }
}

// initialize를 타입정의와 같은 줄에 써줄 수 도 있다. (변수로 받지 않는다면)
class Vehicle {
  color: string = 'blue';
  constructor(color: string) {
  }
}
  1. public으로 나타내면, 따로 타입정의와 initialize를 하지 않아도 된다. (1번과 결과적으로 같다.)
class Vehicle {
  constructor(public color: string) {}
}

extends

extends를 하면, super()를 사용해서, 상위에 있는 constructor에 넘겨줘야한다.

주의할 점은 파라미터가 중복되는 경우 modifier가 다르면 안된다.

  • 아래 예시에서는 color를 받는데, Car class에서 private color: string으로 받으면 에러가 발생한다. 상위 class에서는 public color: string으로 타입정의를 했기 때문이다.
class Vehicle {
  constructor(public color: string) {}
}

const vehicle = new Vehicle('red');
console.log(vehicle);

class Car extends Vehicle {
  constructor(color: string, public brand: string) { // color를 private color: string로 하면 에러가 발생함.
    super(color);
  }
}

const myCar = new Car('blue', 'ford');
console.log(myCar);

implements

필수는 아니지만, class가 포함해야할 interface를 정의해줄 때 사용한다.
어디서 에러가 나는것인지 (타입을 만족하지 못하는지) 찾기 쉽게 해준다.

// interface를 export해서 class로 가져간다.
export interface Spec {
  color: string;
  price: number;
}
// class는 implements하는 interface를 만족해야 한다.
import { Spec } from './interfaces';

class Vehicle implements Spec {
  color: string;
  price: number;
  constructor(color: string, price: number) {
    this.color = color;
    this.price = price;
  }
}

const vehicle = new Vehicle('red', 1000);
console.log(vehicle);
profile
Front-end Developer
post-custom-banner

0개의 댓글