본문 바로가기

자바스크립트

[java script] Private Class Fields [ ES2019 ~]

반응형

Private Class Fields 

2015년 ES6 에서 처음 등장한 클래스 내에서 필드선언 시 해당 필드 변수의 좌측에 #을 붙임으로써 외부에서 해당 변수에 대한 접근을 차단하는 문법이 ES2019 에 등장했습니다.

 

즉, '#변수명' 으로 선언된 변수는 외부에서 직접적으로 접근할 수 없고, 해당 변수를 간접적으로 참조하여 접근할 수 있게 가능함으로써 내부 구현을 숨김 으로써 정보은닉 및 보호를 효과적으로 달성토록 도와줍니다. 

 

class ExampleClass{
    publicField = 10; // Public Class Field 입니다(내/외부 자유롭게 접근 가능).
    #privaField = 5; // private Class Field 입니다(내부에서만 접근 가능.

    getPrivateField(){
        return this.#privaField
    }

    setPrivateField(number){
        this.#privaField = number
    }
}
// new 키워드를 사용하여 ExampleCalss 의 인스턴스 객체인 example 을 생성합니다.
const example = new ExampleClass()

//set 메서드에 접근하여 this 키워드를 통해 간접적으로 #변수의 값을 변경합니다.
example.setPrivateField(50)

// set 메서드로 변경된 #변수를 get 메서드로 접근하여 해당 값을 상수형 변수에 할당합니다.
const getPublicNumber = example.getPrivateField()

// 출력 시 변동된 값인 50이 출력됩니다.
console.log(getPublicNumber) // 50

 

위의 코드에서, #privateField는 Private Class Field이며, 인스턴스마다 고유한 값을 가집니다. 이 필드는 클래스 외부에서는 접근할 수 없으며, getPrivateField()와 setPrivateField() 메서드를 통해 클래스 내부에서만 접근할 수 있습니다. 

 

반면, publicField Public Class Field이며, 클래스 내부와 외부에서 모두 접근 가능합니다.

 

반응형