역시 js와 다르게 typescript는 정말 powerfull 한 언어이다.
언어가 맞다고 해야되나 결국엔 js이긴 한데
여튼 정말 class를 만들때 편리하기도하고 absctract, private, public, protected 같은 건
사실 js에서 본적도 없고 kotlin에서 잠시 본 거 같기도 하고 여튼
class 를 만들어 보자!
export class player {
constructor (
private firstName: string,
private lastName: string
){}
}
const shin = new player("shin", "gyu chul")
이렇게 아주 편리하게 js 처럼 this 이딴 거안써도된다.
그냥 매개변수 부분에 private 인지 protect인지 public인지 써주면 된다.
저 3개는 나중에 설명
그래서 absctract가 뭐냐면
abstract class 는 생성은 못하지만 js에서 보던 extends 로 다른 클래스가
상속 만 받아올 수 있는 class 라고 생각하면 된다
예를 들어
abstract class user {
constructor (
private firstName: string,
private lastName: string
){}
}
export class player extends user {
}
const shin = new player("shin", "gyu chul")
이렇게 player가 user를 상속해왔다
그러니 abstract class 인 user는 상속만 된다
const shin = new user()
이런거 안된다.
그리고 private , protected, public을 알아보자잉!
abstract class user {
constructor(
private firstName: string,
protected lastName: string,
public age: number
) {}
}
export class player extends user {
getLastName() {
return this.lastName
}
}
const shin = new player("shin", "gyu chul", 18);
shin.age
여기서 firstname은 private이다 이거는
user class 안에서만 사용 가능한 것이다
상속되는 class 인 player에서도 사용할 수없다잉
그리고 protected인 lastname을 보면
저거는 상속되는 거에서 사용할 수 있게 만든 거다잉
그러면 저기 상속된 player에서
getFullName이라는 메소드를 만들 었고
거기안에 내용으로 lastname을 사용 한것이다.
여기에 private인 firstname 못 쓴다잉!!!!
public인 age는 그냥 전역 어디서나 쓸 수 있게 한거다
그냥 클래스 밖인 저공간에서도
shin.age 하면은 사용할 수 있다.
그리고 여기서 하나더 abstract에 abstract method를 쓰면은
상속받는 class는 꼭 그 method를 만들어야 되는데
먼소리냐면
아래 코드와같다잉
abstract class user {
constructor(
private firstName: string,
protected lastName: string,
public age: number
) {}
abstract climing():void
}
export class player extends user {
climing(): void {
return
}
getLastName() {
return this.lastName
}
}
const shin = new player("shin", "gyu chul", 18);
shin.age
여기서 abstract class 에 abstract climing function을 만들 었고 저거는 void를 return 하게 했다.
void는 빈 거라는 뜻이다.
그러면 꼭 상속받는 player에서는 void를 return 하는 climing 함수를 만들어 주어야 한다.