private 이랑 비슷하지만 약간 느슨한 느낌이랄까
protected를 달아놓으면
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 { . . . } 안에 집어넣는 변수, 함수 전부 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
}
class User {
private static x = 10;
}
먼 의미일까
class User {
private static x = 10;
public static y = 20;
protected z = 30;
}
먼 의미일까욤