class - protected, static 키워드

크롱·2023년 7월 27일
0

TypeScript

목록 보기
14/25

🐇 잠깐 복습! class 복사

extends

class User {
	x=10;
}

class NewUser extends User {}

let 사람 = new NewUser();
//사람 --> {x:10}

🦜 protected

private 와 비슷합니다. {}안에서만 사용가능
하지만 private과 다르게 protected는 extends 된 class 안에서도 사용가능

private
class User {
 private x= 10;
}

class New extends User{
	//x 사용불가
}

--------------------------------

protected
class User {
 protected x= 10;
}

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

let me = new New();
console.log(me); //New{x: 10}
me.doThis();
console.log(me); //New{x: 20}

protected : extends된 class는 사용가능, 자식들 사용불가능
private: extends된 class 사용불가능, 자식들 사용불가능



🦚 static

우리가 class { } 안에 집어넣는 변수, 함수 이런건 전부 class로 부터 새로 생성되는 object, 일명 instance 에 부여됩니다.

근데 부모 class에 직접 변수나 함수를 부여하고 싶으면 static 키워드를 왼쪽에 붙이자.


자식들은 물려받지못하고, 부모만 쓸수잇게!!

👇기본 class문법에선👇

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

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

👇static을 사용하면👇

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

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

-----------------------------------------

- 😻함수도 static 붙이기 가능😻

- 😻extendsclass를 복사할 경우 static 붙은 것들도 따라옵니다. 😻

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

class Hey extends User {
  z = 10;
}

let hey = new Hey();
console.log(Hey.x); //10

- staticprivate, protected, public 키워드와 동시 사용가능합니다. 


예제 코드

class User { 
  static skill = 'js'; 
  intro = User.skill + '전문가입니다'
}

var 철수 = new User();
console.log(철수); //{intro:'js전문가입니다'}

User.skill = 'python';
var 민수 = new User();
console.log(민수); //{intro:'python전문가입니다'}


연습 문제

1번 - x, y, z 속성의 특징을 설명해보십시오.

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

1. 필드값은 원래는 모든 User의 자식들에게 물려주는 속성이지만 
x와 y에는 static 키워드가 붙었기 때문에 User.x 이런 식으로만
접근해서 쓸 수 있습니다.
User의 자식들은 x와 y를 쓸 수 없습니다.

2. private static x는 class 내부에서만 수정가능합니다. 

3. public static y는 class 내부 외부 상관없이 수정가능합니다.
public 키워드 지워도 똑같이 동작할 듯 

4. protected z는 private와 유사하게 class 내부에서만 사용이 가능한데 
extends로 복사한 class 내부에서도 사용할 수 있습니다. 



2번 - x 속성에 숫자를 더해주는 함수가 필요합니다.

class User {
  private static x = 10;
  public static y = 20;
}
User.addOne(3) //이렇게 하면 x가 3 더해져야함
User.addOne(4) //이렇게 하면 x가 4 더해져야함


------------------
해설
class User { 
  private static x = 10; 
  public static y = 20;

  static addOne(파라미터 :number){
    User.x += 파라미터
  }

  static printX(){
      console.log(User.x)
  }
}
User.addOne(3)
User.addOne(10)
User.printX()

profile
👩‍💻안녕하세요🌞

0개의 댓글