all is well!!
17. [Ts] Abstract class 본문
[Nextjs + Typescript] velog 클론코딩/[ Nextjs + Typescript ] 나를 위한 기록
17. [Ts] Abstract class
tnqlscho 95 2023. 3. 13. 20:58Abstract class (추상클래스)
Typescript와 객체지향 프로그램에서의 추상클래스
abstract class User{
constructor(
private firstName: string,
private lastName: string,
Public nickname: string,
){}
}
class Player extends User{}
const subin = new Player(‘subin’, ‘las’, ‘bin’)
추상클래스는 오직 다른 클래스가 상속받을수 있는 class
직접적으로 extends를 만들지 못한다.
만약에
const subin = new User(‘subin’, ‘las’, ‘bin’)
바로 Player가 아닌 User을 가져오면 에러가 난다.
Abstract method (추상메소드)
getFullName이라는 method를 만들게되면
abstract class User{
constructor(
private firstName: string,
private lastName: string,
Public nickname: string,
){}
getFullName(){
return `${this.firstName} ${this.lastName}`
}
}
class Player extends User{}
const subin = new Player(‘subin’, ‘las’, ‘bin’)
Player은 User에서 getFullName이라는 메소드를 상속받았기 때문에 적용할 수 있다.
Abstract method를 만들기 위해서는 method를 추상클래스 안에서 구현하지 않고
Abstract method의 call signature만 적용한다.
abstract class User{
constructor(
private firstName: string,
private lastName: string,
Public nickname: string,
){}
abstract getNickName() : void // 1. 이렇게 Abstract method의 call signature을 만들면
getFullName(){
return `${this.firstName} ${this.lastName}`
}
}
class Player extends User{}// 2. Player에는 getFullName method를 구현해야 한다고 에러가 뜬다.
const subin = new Player(‘subin’, ‘las’, ‘bin’)
그리고 Abstract method(추상메소드)는 Abstract class(추상 클래스)를
상속받는 모든 class들이 구현해야만 하는 method다.
그래서 class User로부터 상속받은 class Player안에 메소드를 구현해야 하는데
abstract class User{
constructor(
private firstName: string,
private lastName: string,
Public nickname: string,
){}
abstract getNickName() : void
getFullName(){
return `${this.firstName} ${this.lastName}`
}
}
class Player extends User{
getNickName(){
console.log(this.nickname)
}
} // private property를 접근했기 때문에 에러가 난다.
const subin = new Player(‘subin’, ‘las’, ‘bin’)
Abstract class에서 상속받은 class에서는 private property는 접근할 수 없다.
그래서 외부로부터 보호되지만 상속받은 class에서 사용하고 싶을때는 private를 쓰지않고 protected를 쓴다.
abstract class User{
constructor(
protected firstName: string,
protected lastName: string,
protected nickname: string,
){}
abstract getNickName() : void
getFullName(){
return `${this.firstName} ${this.lastName}`
}
}
class Player extends User{
getNickName(){
console.log(this.nickname) // 1. protected property는 상속받은 class안에서 접근가능하다.
}
}
const subin = new Player(‘subin’, ‘las’, ‘bin’)
subin.getFullName()
subin.firstName // 2. protected property는 class 밖에서는 접근할 수 없다. 그래서 이렇게쓰면 에러가 난다.
*출처 [노마드코더 ts 강의]
https://nomadcoders.co/typescript-for-beginners/lectures/3679
https://nomadcoders.co/typescript-for-beginners/lectures/3678
'[Nextjs + Typescript] velog 클론코딩 > [ Nextjs + Typescript ] 나를 위한 기록' 카테고리의 다른 글
[package.json] dependencies / devDependencies 차이 (0) | 2023.03.24 |
---|---|
18.[Ts] Interface (0) | 2023.03.15 |
16. [Ts] Polymorphism / Generic (0) | 2023.03.10 |
15. [Ts] Overloading (0) | 2023.03.08 |
14. [Ts] Call signatures (0) | 2023.03.07 |
Comments