IDE가 발달하기 전에 쓰던 머나먼 옛날(2008년)의 "약속"이고, 현재에 들어서는 IDE의 발달로 소스 트리를 간편하게 볼 수 있고 VSCode의 다양한 확장 프로그램들으로 구분이 어렵지 않다.
개발자들의 "약속"일뿐이지, 실제로 은닉이 되지 않고 외부에서 손쉽게 접근할 수 있다. 접근이 가능하다면 추후 유지/보수 과정에서 분명 접근하는 케이스가 생길 것이다!
시간이 지나서 아래와 같은 더 나은 방법이 등장하고 있다.
const counter = () => {
let privateNumber = 0;
const changeBy = (value) => {
privateNumber += value;
}
return {
increment: () => {
changeBy(1);
},
decrement: () => {
changeBy(-1);
},
value: () => privateNumber
}
}
console.log(counter.value()); // 0
counter.increment();
console.log(counter.value()); // 1
counter.decrement();
console.log(counter.value()); // 0
console.log(counter.privateNumber); // undefined
문제 탐색
const privateNumber = Symbol('여러분은 지금 변수의 이름을 비공개 하여 접근을 막는 과정을 보고 계십니다.');
class Counter {
constructor() {
this[privateNumber] = 0;
}
increment() {
this[privateNumber] += 1;
}
decrement() {
this[privateNumber] -= 1;
}
value() {
return this[privateNumber];
}
}
const counter = new Counter();
counter.increment()
console.log(counter.value()); // 1
counter.decrement()
console.log(counter.value()); // 0
문제 탐색
console.log(Object.getOwnPropertySymbols(counter)); // Array [ Symbol("여러분은 지금 변수의 이름을 비공개 하여 접근을 막는 과정을 보고 계십니다.") ]
class counter {
#privateNumber = 0;
increment() {
this.#privateNumber += 1;
}
decrement() {
this.#privateNumber -= 1;
}
value() {
return this.#privateNumber;
}
}
const counter = new Counter();
counter.increment()
console.log(counter.value()); // 1
console.log(counter.#privateNumber); // undefined
counter.decrement()
console.log(counter.value()); // 0
TC39의 스테이지 3 후보 단계는 완성 단계에 가깝고, 구현 주체나 사용자들로부터 피드백을 좀 더 받아보는 일만이 남은 상태다.
그렇기에 표준에 포함되어도, 그 전에 심각한 문제가 발견되지 않는 이상 문법, 동작 방식은 변경이 없는 편이다.
패키지 설치
npm i @babel/core @babel/eslint-parser @babel/preset-env -D
ESLint 설정 파일(.eslintrc)에서 parser 옵션 설정
{
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": "eslint:recommended",
**"parser": "@babel/eslint-parser",**
"parserOptions": {
"ecmaVersion": 12,
"sourceType": "module"
},
"rules": {
}
}
babel 구성 파일(.babelrc) 설정
{
"presets": [
["@babel/preset-env",
{
"shippedProposals": true
}]
]
}
02.18 - 오류 정정
MDN 한국어 문서에서는 "#"은 ES2019부터 도입되어있다! 라고 표기되어있는데, 확인 결과 아직 TC39 Stage 3 상태의 기능이다.
영문 문서에는 해당 내용이 표기되지 않는다!
틀린 내용, 피드백이 있으시다면 댓글 남겨주시면 감사하겠습니다! 🙇♂️
구욷 피드백을 통해 이렇게까지 학습하다니 멋지네요!