- 객체를 정의하는 설계도 같은 의미이다.
- 객체의 상태를 나타내는 필드와 행동을 나타내는 메서드로 구성된다.
- 필드는 클래스에 정의된 변수, 메서드는 클래스 내에 정의된 함수를 의미한다.
- 클래스에 의해 생성된 객체를 인스턴스라 한다.
생성자라고 불리며 인스턴스를 생성하고 클래스 필드를 초기화 하기 위한 메서드이다.
constructor는 클래스 내에 한개만 존재할 수 있으므로 명심하자.
class 클래스명 {
constructor(name, age) {
this.name = name; // this : 해당 클래스로 생성된 인스턴스 지칭
this.age = age;
}
}
타입스크립트는 생성자 메서드와 함께 클래스 바디에 인스턴스 변수를 정의해주어야 한다.
class Ts {
name : string; // 인스턴스 변수 선언
constructor(name : string) {
this.name = name;
}
}
아래 예시처럼 생성자 내부에 접근제어자를 활용해 매개변수 작성 시 매개변수의 속성값은 자동으로 초기화된다.
class Ts {
constructor(
private name : string,
private name : age
) {}
오직 다른 클래스가 상속받기 위한 용도로만 사용되는 클래스이다.
상속 용도로만 사용되기 때문에 추상 클래스로 새로운 인스턴스를 만들 수 없다.
추상 클래스를 상속받으려면 extends 키워드를 사용한다.
abstract class User {
constructor(
public firstName : string,
public lastName : string,
public nickName : string
) {}
}
// 상속받은 클래스에 프로퍼티를 추가하여 사용할 수 있는 것이다.
class Player extends User {
hello() {
console.log(`hello ${this.firstName + this.lastName}`);
}
};
const lee = new Player("lee", "cn", "LCN");
lee.hello();
const kim = new User(); // error
추상 메서드는 추상 클래스 내부에서 구현할 수 있는 함수이다.
일반 메서드와 다르게 클래스 내에서 구현되지 않으며 상속받은 클래스 내부에서 구현되어야 한다.
추상 클래스에서는 추상 메서드의 call signature만 지정하는 것이다.
abstract class User {
constructor(
public firstName : string,
public lastName : string,
public nickName : string
) {}
fullName() { // general method
console.log(`${this.firstName + this.lastName}`)
}
abstract hello() : void; // abstract method
}
class Player extends User {
hello() {
console.log(`hello ${this.fullName()}`) // 추상 메서드 구현
}
};
const lee = new Player("lee", "cn", "LCN");
lee.hello();
클래스, 메서드에 접근 가능성을 설정하는 객체지향 언어의 키워드이다.
수식어 | 접근 범위 |
---|---|
private | 선언한 클래스 내에서만 접근 가능 |
public | 어디에서나 접근 가능하며, 접근 제어자의 기본값이다 |
protected | 선언한 클래스, 상속받은 자식 클래스에서만 접근 가능 |
참고