타입스크립트_class

mangorovski·2022년 11월 18일
0

//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")
  • 멤버변수를 사용하지 않을 때는 readonly나 public 키워드를 적어준다.

접근 제한자(access modifier)

[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는 자식 클래스 내부에서는 참조할 수 있다.
하지만 클래스 인스턴스에는 참조할 수 없다.

profile
비니로그 쳌킨

0개의 댓글