본문 바로가기

TypeScript/기초

[TypeScript] Public & Private

타입스크립트는 class 안에서 public & private 키워드를 사용할 수 있다. 

Java를 공부한 사람이라면 친숙한 키워드일 것이다. 그 키워드가 맞다. 

Public

class User  {
    public name: string;
    
    constructor(){
    	this.name = 'kim'
    }
}

let user = new User();
user.name = "Seo";

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

사실 모든 class의 속성은 기본적으로 public이 붙어있다. 즉, 굳이 키워드를 넣지 않아도 name은 public 키워드가 

붙어있다고 생각하면 된다. 

 

Private 

class User {
    public name :string;
    private familyName :string;
    
    constructor() {
    	this.name = 'kim';
        let hello = this.familyName + "Hi!";
    }
}

let user = new User();
user.name = "park";        // 가능
user.familyName = "toto";  // 불가능

private 키워드가 붙은 속성은 class {} 안에서만 사용과 수정이 가능하다. 

자식 object에서도 private 키워드가 붙은 건 사용과 수정이 불가능합니다. 

 

속성을 외부에서 숨기고 싶은 경우 private 키워드를 이용한다. 

오리지널 자바스크립트 문법에서는 #을 속성 옆에 붙이면 private 속성이 된다. 

 

만약 private 키워드가 부여된 속성을 class 외부에서 수정하고 싶은 경우는 어떻게 해야할까? 

class User {
    public name :string;
    private familyName :string;
    
    constructor() {
    	this.name = 'kim';
        let hello = this.familyName + "Hi!";
    }
    
    setFamilyName(newFamilyName) {
    	this.familyName = newFamilyName;
    }
}

let user = new User();
user.name = "park";        // 가능
user.familyName = "toto";  // 불가능
user.setFamilyName("fofo");// 가능

set~ 함수를 이용해서 class 내부에서 수정할 수 있는 함수를 만들어 외부에서 이용하는 것이다. 

반드시 set~ 방식으로 명칭을 적어야하는 것은 아니지만, Java를 공부할때 생긴 습관으로, private 데이터를 가져올 때는

get~ , 수정할 때는 set~ 명칭으로 사용했었다.

 

 

반응형