Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 그리디
- html/css/js
- 부트캠프
- 호이스팅
- 알고리즘
- 국비지원
- 코딩테스트
- BFS
- 코테
- KAKAO
- 컴퓨터과학
- computerscience
- 컴퓨터공학
- LinkSnap
- DFS
- 백준
- git
- js
- 야놀자
- 자바스크립트
- CSS
- CS
- cpu
- Javascript
- 너비우선탐색
- 패스트캠퍼스
- nodejs
- github
- 국비지원취업
- 프론트엔드개발자
Archives
- Today
- Total
My Boundary As Much As I Experienced
클래스에서 private 필드를 나타내는 기호 #와 _의 차이는 무엇인가? 본문
들어가기 전 토막 상식
보통 클래스 안의 정보들은 프로퍼티가 아니라 필드라고 한다.
계속 프로퍼티라 부르고 있었는데 클래스 문법 복습하면서 다시 알게 되었다.
_가 붙는 필드는 무엇인가?
class Counter {
constructor() {
this._count = 0; // _count는 내부적으로 사용되는 프로퍼티
}
increment() {
this._count++;
}
getCount() {
return this._count;
}
}
const counter = new Counter();
counter.increment();
console.log(counter.getCount()); // 외부에서는 getCount를 통해서만 _count에 접근할 수 있음
JavaScript 클래스 문법에서 _ (언더스코어)로 시작하는 프로퍼티는
주로 해당 클래스의 내부에서만 사용되는 프로퍼티를 나타낸다.
이러한 네이밍 컨벤션은 해당 프로퍼티가 클래스 외부에서 직접적으로 접근되어선 안 된다는 것을 의미한다.
이것은 JavaScript에서는 엄격한 접근 제어를 제공하지 않기 때문에
개발자들이 코드를 더 안전하게 유지하기 위해 사용하는 관습적인 방법 중 하나였다.
_필드의 용도:
1. 내부 구현에 필요한 데이터를 저장하기 위한 것으로, 외부에서 직접 접근하면 안 되는 데이터를 나타낸다.
2. 외부에 공개되지 않아야 하는 메서드나 변수를 나타낸다.
3. 클래스의 인터페이스를 의미적으로 명확히 하기 위해 사용될 수 있다.
#을 붙여서 private로 만들면 되는거 아닌가?
맞다. JavaScript에서는 2022년 11월에 공개된 ECMAScript 2022(ES12)부터 #을 사용하여 클래스 필드를 private로 만드는 기능이 도입되었다. 이것은 클래스 외부에서 직접적으로 접근할 수 없도록 보호하는 데 사용된다. 이전에는 _을 사용하여 private 프로퍼티를 표시하는 것이 일반적이었지만, #을 사용하는 것이 더 견고한 방법이다.
class Counter {
#count = 0; // private 필드
increment() {
this.#count++;
}
getCount() {
return this.#count;
}
}
const counter = new Counter();
counter.increment();
console.log(counter.getCount()); // 클래스 외부에서 getCount를 통해서만 #count에 접근할 수 있음
요약
#과 _은 모두 JavaScript에서 private 프로퍼티나 메서드를 나타내는데 사용될 수 있다.
그러나 #은 더 최신의 문법이며, ECMAScript 2022(ES12)에서 도입되었다.
반면에 _은 개발자들이 이전에 private 프로퍼티를 나타내는데 주로 사용해온 관습적인 방법이다.
'FrontEnd > Javascript(Vanilla)' 카테고리의 다른 글
Date 객체로 특정 시간 설정하기 (0) | 2024.06.15 |
---|---|
ComputedPropertyName이란? (0) | 2024.04.16 |
클래스 문법 총정리 (1) | 2024.04.06 |
자바스크립트의 Set 자료구조의 특징 및 활용 케이스 (1) | 2024.03.24 |
전통적 링크 방식 → SPA 라우팅 발전 과정 (0) | 2024.03.04 |