angsu

[코딩애플] 16.Type Script 본문

IT/Type Script

[코딩애플] 16.Type Script

앙수 2024. 4. 10. 09:49

🍎 public, private 키워드로 사용제한두기

타입스크립트는 class 안에서 public 키워드를 사용가능

public이 붙은 속성은 자식 object들이 마음대로 사용하고 수정가능

class User {
  public name: string;

  constructor(){
    this.name = 'kim';
  }
}

let 유저1 = new User();
유저1.name = 'park';  //가능

(참고) public 키워드는 class 내의 prototype 함수에도 붙일 수 있음

 

근데 private 키워드를 붙이면 수정이 불가능해짐

무조건 class { } 중괄호 안에서만 수정 및 사용가능

class 중괄호 내부가 아니라서 class로 부터 생산된 자식 object에서도 private 붙은건 사용불가능

class User {
  public name :string;
  private familyName :string;  

  constructor(){
    this.name = 'kim';
    let hello = this.familyName + '안뇽'; //가능
  }
}

let 유저1 = new User();
유저1.name = 'park';  //가능
유저1.familyName = 456; //에러남

 

어떤 속성에는 private 키워드를 추가했더니 아무데서나 수정이 불가능해짐

private 붙은 속성들은 오직 class { } 안에서만 수정이 가능

이렇게 속성을 외부에서 숨기고 싶을 때 private 키워드를 이용

실은 오리지널 자바스크립트 문법에서도 #이걸 속성옆에 붙이면 private 속성이 됨

(참고) private 키워드는 class 내의 함수에도 붙일 수 있음

 

🍏 Q. private 부여된 속성을 class 밖에서 수정해야할 경우?

1. private 속성을 수정하는 함수를 class 안에 만들어서 2. 함수를 실행시키면 됩니다. 

 

🍏 Q. private 이걸 어따씀?

A. 개발하다보면 소중하게 지켜주고 싶은 중요한 변수나 속성들이 있습니다.
예를 들면 위의 예제에선 familyName 이런건데 이걸 외부에서 실수로 수정하거나 그러면 큰일날 것 같은 그런 속성들이요.
이걸 외부에서 실수로 수정하지 않도록 지켜주고 싶으면 private를 붙여보시길 바랍니다.
그리고 이걸 쓰면 함수를 만들어서 수정해야하니 약간의 안전장치를 더해서 개발이 가능합니다. 
개발이 귀찮아지지만 버그를 예방해주는 키워드이며
react-redux 이런거 하다보면 매번 보게될 패턴입니다. 
- 코딩 애플 -

 

🍎 public, private 키워드 쓰면 이런 것도 가능

constructor 안에서 this.name = name 이런걸 생략 가능

class Person { 
  name;
  constructor ( name :string ){  
    this.name = name;
  } 
}
let 사람1 = new Person('john')


class Person { 
  constructor ( public name :string ){  
  
  } 
}
let 사람1 = new Person('john')

위 두개의 코드는 같은 역할을 하는 코드

"constructor 파라미터에 public 붙이면 this.name = name 이거 생략가능하다" 라는걸 참고해주시면 되며

이제 Person으로부터 새로 생산되는 object들은 name 속성을 가질 수 있음

 

'IT > Type Script' 카테고리의 다른 글

[코딩애플] 17.Type Script  (0) 2024.04.11
[코딩애플] 15.Type Script  (0) 2024.04.10
[코딩애플] 14.Type Script  (0) 2024.04.09
[코딩애플] 13.Type Script  (0) 2024.04.08
[코딩애플] 12.Type Script  (0) 2024.04.07