Develop/TypeScript

[Typescript] protected, static

dawonny 2024. 1. 12. 20:52
728x90
반응형

protected

class 에 관련해서, extends 라는 문법을 쓰면 

class 를 복사해서 사용할 수 있다.

 

근데 private 으로 선언한 것은 기존 class 안에서만 사용할 수 있다.

extends 로 만든 class 에서 원본의 class 속성을 쓰고 싶다면 protected 로 선언하면 된다.

 

private 이랑 같으면서도, extends 된 class 안에서도 사용가능하게 해준다.

class User {
  protected x = 10;
}

class NewUser extends User {
  doThis(){
    this.x = 20;
  }
}

NewUser class 는 User class 를 extends 한다.

NewUser 에서 this.x 처럼 x 를 쓰려고 하면,

기존에 private 속성이었다면 에러가 났겠지만

위 코드에서처럼 protected 로 선언하면 에러가 나지 않는다.

 

static

class 에 직접 변수나 함수를 부여하고 싶으면 static 키워드로 선언한다.

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

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

x, y 같은 변수들은 User class 에서 생성된 object 들만 사용이 가능하다.

예를 들어 object 인 john 을 사용해서, john.x 와 같이 사용하는 것처럼 말이다.

 

하지만 static 키워드를 붙이면 다음과 같다

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

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

기존 User class 에 있던 x에 static 키워드를 붙였다.

static 을 붙인 속성은 this 로 쓰지 못하고 부모로만 쓸 수 있다.(User로 직접 사용)

따라서 extends 를 이용해 복사된 자식이더라도, 부모만 쓸 수 있는 속성이라고 할 수 있다.

 

static 은 동시사용이 가능하다

class User {
  private static x = 10;
}

static 은 private, protected, public 키워드와 동시에 사용하는 것이 가능하다.

 

static 은 언제 쓸까

class 안에 기본 설정값을 입력할 때 사용한다.

class로부터 생성되는 object가 사용할 필요가 없는 변수를 만들 때 사용한다.

 

 

응용 예제

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

 

x와 y의 속성의 특징을 알아보자

 

두 속성에는 static 이 붙어있기 때문에 User 의 자식들은 x와 y를 쓸 수 없다.

두 속성을 쓰고 싶다면 User.x, User.y 이런식으로 쓸 수있다.

 

private static x 는 class 내부에서만 쓸 수 있고

public static y 는 class 내부/외부 상관없이 쓸 수 있다.

 

protected z 는 private 속성처럼 class 내부에서만 쓸 수 있지만, extends 로 복사한 class 에서도 쓸 수 있다.

 


ref: 코딩애플

728x90
반응형