//class 다루기
class Car {
color:string
constructor(color:string){
this.color = color
}
start(){
console.log("start")
}
}
const bmw = new Car("red")
class Car {
//color:string
constructor(public color:string){
this.color = color
}
start(){
console.log("start")
}
}
const bmw = new Car("red")
[public, private, protected]
ES6의 클래스는 다른 객체지향언어처럼 접근 제한자를 지원하지 않았다.
하지만, 타입스크립트는 접근 제한자를 지원한다.
[public]: 자식 클래스나 클래스 인스턴스 모두 접근 가능하다.
아무것도 표기하지 않고 작성하면 모두 public이다.
[private]: 해당 클래스 내부에서만 접근 가능.
[protected]: 자식 클래스에서 접근 가능, 클래스 인스턴스는 참조 불가
[public]
//class 다루기
class Car {
public name: string ="car" //public 명시 안해줘도 됨
color:string
constructor(color:string){
this.color = color
}
start(){
console.log("start")
}
}
//Car 클래스를 상속받은 Bmw
class Bmw extends Car{
constructor(color:string){
super(color)
//super를 호출하지 않으면 에러가 발생한다.
}
showName(){
console.log(super.name) //Car의 name이 public이기에 자식클래스에서 사용해도 문제가 없다.
}
}
const z4 = new Bmw("black")
[private]
class Car {
private name: string ="car"
color:string
constructor(color:string){
this.color = color
}
start(){
console.log("start")
console.log(this.name)
}
}
class Bmw extends Car{
constructor(color:string){
super(color)
}
showName(){
console.log(super.name) //에러발생
}
}
const z4 = new Bmw("black")
private일 경우 자식 클래스에서 name을 사용할 수 없다.
class Car {
#name: string ="car"
color:string
constructor(color:string){
this.color = color
}
start(){
console.log("start")
console.log(this.#name)
}
}
class Bmw extends Car{
constructor(color:string){
super(color)
}
showName(){
console.log(super.#name) //에러발생
}
}
const z4 = new Bmw("black")
private대신 #으로 사용할 수 있다.
[protected]
//class 다루기
class Car {
protected name: string ="car"
color:string
constructor(color:string){
this.color = color
}
start(){
console.log("start")
console.log(this.name)
}
}
//Car 클래스를 상속받은 Bmw
class Bmw extends Car{
constructor(color:string){
super(color)
//super를 호출하지 않으면 에러가 발생한다.
}
showName(){
console.log(super.name)
}
}
const z4 = new Bmw("black")
console.log(z4.name) //error발생
protected는 자식 클래스 내부에서는 참조할 수 있다.
하지만 클래스 인스턴스에는 참조할 수 없다.