Skip to content

Latest commit

 

History

History
121 lines (91 loc) · 2.62 KB

File metadata and controls

121 lines (91 loc) · 2.62 KB

1. 타입스크립트의 클래스

타입스크립트의 클래스

TS에서는 클래스의 필드를 선언할 때 타입 주석으로 타입을 함께 정의해 주어야 함.


그렇지 않으면 함수 매개변수와 동일하게 암시적 any 타입으로 추촌되는데 엄격한 타입 검사 모드일 때에는 오류 발생.


추가로 생성자에서 각 필드의 값을 초기화 하지 않을 경우 초기값도 함께 명시해 주어야 함

class Employee {
  // 필드
  name: string = "";
  age: number = 0;
  position: string = "";

  // 메서드
  work() {
    console.log("일함");
  }
}

만약 다음과 같이 생성자 함수에서 필드의 값들을 잘 초기화 해 준다면 필드 선언시의 초기값은 생략해도 됨

class Employee {
  // 필드
  name: string = "";
  age: number = 0;
  position: string = "";

  // 생성자
  constructor(name: string, age: number, position: string) {
    this.name = name;
    this.age = age;
    this.position = position;
  }

  // 메서드
  work() {
    console.log("일함");
  }
}

이때 만약 이 클래스가 생성하는 객체의 특정 프로퍼티를 선택적 프로퍼티로 만들고 싶다면 다음과 같이 필드 이름뒤에 물음표를 붙여주면 됨

class Employee {
  // 필드
  name: string = "";
  age: number = 0;
  position?: string = "";

  // 생성자
  constructor(name: string, age: number, position: string) {
    this.name = name;
    this.age = age;
    this.position = position;
  }

  // 메서드
  work() {
    console.log("일함");
  }
}

클래스는 타입이다

TS의 클래스는 타입으로 사용할 수 있음. 클래스를 타입으로 사용하면 해당 클래스가 생성하는 객체의 타입과 동일한 타입이 됨

class Employee {
  (...)
}

const employeeC: Employee = {
  name: "",
  age: 0,
  position: "",
  work() {},
};

→ employeeC의 타입을 Employee 클래스로 정의함. 따라서 이 변수는 name, age, position 프로퍼티와 함꼐 work 메서드를 갖는 객체 타입으로 정의됨


상속

TS에서 클래스의 상속을 사용할 때 파생 클래스에서 생성자를 정의했다면 반드시 super 메소드를 호출해 슈퍼 클래스의 생성자를 호출해야 하며, 호출 위치는 생성자의 최상단 이어야만 함

class ExecutiveOfficer extends Employee {
  officeNumber: number;

  constructor(
    name: string,
    age: number,
    position: string,
    officeNumber: number
  ) {
    super(name, age, position);
    this.officeNumber = officeNumber;
  }
}