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: 코딩애플