[ Typescript ] - class에서 사용가능한 protected, static 키워드

최문길·2023년 12월 21일
1

Typescript

목록 보기
16/23

class안에서 쓰는 protected 키워드



private 이랑 비슷하지만 약간 느슨한 느낌이랄까

protected를 달아놓으면

  1. private 이거랑 똑같은데
  2. extends 된 class 안에서도 사용가능하다.


class User {
  protected x = 10;
}

User 라는 class의 x 속성은 protected 이다.

그럼 private 과 동일한 class 안에서만 사용이 가능해지며

User의 자식들도 함부로 접근, 사용이 불가하다.




class Person {
  protected x = 10;
}

class User extends Person {
	constructor() {
      super()
      this.x = 40; 
    }
  // User의 protected를 이용하여 바꿀 접근/변경가능
  doThis(){
    this.x = 20;
  }
}

let newUser = new User();
console.log(newUser) // Ueser {x: 40}

User extends Person으로 x값을 변경 할 수 있다.



그렇다면 Person의 x의 값은 바뀌었을까 ? 🙄

class Person { 
      protected x =10;
    }
let person = new Person()

class Ueser extends Person {
      constructor(){
            super()
            this.x = 30    
            
      }
      addX(){
            this.x = 40
      }
}
let user = new Ueser()

console.log(person) //Person {x: 10}
console.log(user) // Ueser {x: 30}

user.addX()

console.log(person) // Person {x: 10}
console.log(user) // Ueser {x: 40}

Person의 x의 값은 변경되지 않고
상속받은 User의 x의 값이 변경이 된다.






class 안에서 쓰는 static 키워드

class { . . . } 안에 집어넣는 변수, 함수 전부 class에서 생성되는 object (=instance)에 부여된다.

class 자체에서 활용 할 수는 없다는 이야기 이다.

근데 class에서 직접 변수나 함수를 사용하고 싶으면 static 키워드를 왼쪽에 붙여주자




class User {
  x = 10;
  y = 20;
}

let john = new User();
john.x //가능
User.x //불가능

이러면 User에서 생성된 instance에서 '만' 사용가능하다.
근데 static을 붙이면



class User {
  static x = 10;
  y = 20;
}

let john = new User();
john.x //불가능
User.x //가능

john은 사용불가능하고
User는 직접 사용이 가능하다.



함수도 static 붙이기 가능
extends로 class를 복사할 경우 static 붙은 것들도 따라온다.


class Person { 
      static y = 10;
    }

class User extends Person {}

console.log(Person.y)// 10
console.log(User.y) // static y도 같이 상속받는다. 


그렇다면 static의 값을 바꿔주면 extends 된 class의 값에도 영향이 갈까?

영향이 간다면 반대로 extends된 class에서 상속받은 static 값을 변경하면 상속해준 class의 static의 값에 영향이 갈까??



class Person { 
      static y = 10;
    }

class User extends Person {}

console.log(Person.y =20)// 20 static의 값은 변경가능하군
console.log(Person.y)// static 값이 20으로변경됨

console.log(User.y)// static 값을 같이 상속받았고 y의 값이 20이다.
console.log(User.y =40) // 상속받은 static 값을 변경가능하다.
console.log(Person.y) // 물려준 class의 static 값에 영향은 없다.


static값을 class 내부에서 사용해보자

// 필드 값 || 함수 안에서 사용하자
class Person { 
      static y = 10;
      add = Person.y + 1
    }

class User extends Person {
      addY(){ return User.y+1
}




static은 private, protected, public 키워드와 동시 사용가능

class User {
 private static x = 10;
}

먼 의미일까




class User {
  private static x = 10;
  public static y = 20;
  protected z = 30;
}

먼 의미일까욤

0개의 댓글