728x90
class
member변수를 미리 선언해야함
class Car {
name; //member변수를 미리 선언해두어야함
constructor(name :string){
this.name = name;
}
start(){
console.log("start");
}
}
public / readonly를 사용해주면 member변수를 미리 선언하지 않아도 됨
Access modifier 접근 제한자
private / public / protected
접근 제한자 | 설명 |
public | 자식 클래스나, 클래스 인스턴스에서 접근이 가능한 값(default) |
private (or #) | 자식 클래스에서 접근 불가능함, 자신 내부에서만 사용할 수 있게됨 |
protected | 자식 클래스에서 접근이 가능함, 클래스 인스턴스에서는 참조가 불가능함 |
//자기 자신 클래스
class Car {
public name: string; //member변수를 미리 선언해두어야함
private color: string; // or #color :string(같은의미)
protected year: number;
constructor(name :string, color:string, year: number){
this.name = name;
this.color = color;
this.year = year;
}
start(){
console.log("start");
console.log(this.name);
console.log(this.color); // or this.#color
console.log(this.year);
}
}
//자식 클래스
class Bmw extends Car {
constructor(name :string, color:string, year: number){
super(name, color, year);
}
showName(){
console.log(super.name);
}
showColor(){
console.log(super.color); //error
}
showYear(){
console.log(super.year);
}
}
//클래스 인스턴스
const mycar = new Bmw("black", "ccc", 1999);
console.log(mycar.name);
console.log(mycar.color); //error
console.log(mycar.year); // error
mycar.name = "zzz"; //변경가능 readonly가 들어가면 변경불가능 -> 이 경우 constructor로만 변경가능
static변수
static으로 선언된 정적 멤버변수는 this가 아닌 클래스명으로만 접근이 가능하다.
class Car {
name; //member변수를 미리 선언해두어야함
static wheels = 4;
constructor(name :string){
this.name = name;
}
start(){
console.log("start");
console.log(this.wheels);//error
console.log(Car.wheels); //맞는 표현
}
}
const mycar = new Bmw("ccc");
console.log(Car.wheels);
추상 클래스
abstract키워드를 사용해서 추상 클래스를 생성가능하며, new를 이용하여 객체를 생성할 수 없다.
extends를 통해서 자식클래스를 만들 수만 잇다.
추상클래스 내 존재하는 추상 메소드는 상속받은 클래스(자식)에서 꼭 구현해야한다 (아니면 에러)
모든 자식이 같은 메소드를 가지지만, 구체적인 내용은 자식마다 다를 수 있다.
참고영상
https://www.youtube.com/watch?v=17Oh028Jpis&list=PLZKTXPmaJk8KhKQ_BILr1JKCJbR0EGlx0&index=6
728x90
'MATHrone > STUDY' 카테고리의 다른 글
TypeScript - 제네릭, 유틸리티 타입 (0) | 2022.01.24 |
---|---|
TypeScript - 함수, 리터럴, 유니온, 교차 타입 (0) | 2022.01.24 |
TypeScript - 기본타입, 인터페이스 (0) | 2022.01.21 |
[Error] cannot resolve symbol 'Routes' (0) | 2022.01.14 |