TypeScript - public, private

꼬디바아 ㅣ 2024. 3. 4. 11:41

728x90

TypeScript 대표이미지

 

 

728x90

 

TypeScript를 쓰면 JavaScript에 없는 문법도 사용이 가능하다. 객체지향 언어에서 제공하는 public, private, static, protected 키워드를 사용이 가능하다.

 

🖥️ Public

TypeScript에서 public 키워드는 클래스의 멤버(속성 또는 메서드)를 외부에서 접근 가능하도록 지정하는 접근 제어자(access modifier) 중 하나이다. 클래스의 멤버는 기본적으로 'public' 으로 설정되어 있으므로, 'public' 키워드를 명시적으로 사용하지 않아도 된다. 그러나 명시적으로 사용하면 코드의 가독성을 높일 수 있다.

 

class User {
  public name: string;

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

let user = new User();
user.name = 'park';  //가능

 

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

 

🖥️ Private

private 키워드는 TypeScript에서 사용되는 접근 제어자 중 하나로, 해당 멤버(속성 또는 메서드)에 대한 접근을 클래스 내부에서만 허용하도록 지정한다. 외부에서는 접근할 수 없다.

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

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

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

 

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

 

📌 private 가 부여된 속성을 class 밖에서 수정해야할 경우
1. private 속성을 수정하는 함수를 class안에 만든다.
2. 함수를 실행시킨다.

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

  constructor(){
    this.name = 'kim';
    let hello = this.familyName + '안뇽';
  }
  changeSecret(){
    this.familyName = 'park';
  }
}

let user = new User();
user.familyName = 'park';  //에러남
user.changeSecret()        //가능​

 

prviate는 개발을 하다보면 외부에서 실수로 수정하지 않도록 지켜주는 것이다. 그리고 private를 쓰면 함수를 만들어서 수정해야해서 약간의 안전장치를 더해서 개발이 가능하다.

 

🖥️ Protected

protected 키워드는 TypeScript에서 클래스 멤버의 접근 수준 중 하나로, 해당 멤버는 해당 클래스와 그것을 상속 받은 하위 클래스에서만 접근할 수 있다. 즉, 외부에서는 접근할 수 없고, 상속 관계에서만 사용이 가능하다.

 

class User {
  protected x = 10;
}

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

 

User를 extends 하는 NewUser class를 만들었다. NewUser가 갑자기 this.x 로 x를 가져다 쓰려고 하면 x가 private 속성일 경우엔 에러가 나지만 x가 protected 속성일 경우엔 에러가 나지 않는다.

 

그래서 class를 여러개 만들 때 class 끼리 공유할 수 있는 속성을 만들고 싶으면 protected를 쓰면 된다.

 

🖥️ Static

static 키워드는 클래스의 인스턴스가 아닌 클래스 자체에 속한 멤버(속성 또는 메서드)를 나타낸다. 이러한 멤버는 클래스의 인스턴스를 생성하지 않고도 직접 접근할 수 있다. 주로 class 안에 간단한 메모를 하거나, 기본 설정값을 입력하거나 class로 부터 생성되는 object가 사용할 필요가 없는 변수들을 만들어놓고 싶을 때 사용한다.

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

// 철수 인스턴스 생성
var 철수 = new User();
console.log(철수);
// 출력: User { intro: 'js 전문가입니다' }

// User 클래스의 static skill 속성을 변경
User.skill = 'python';

// 민수 인스턴스 생성
var 민수 = new User();
console.log(민수);
// 출력: User { intro: 'python 전문가입니다' }

 

 

 

728x90