⏭️ JavaScript에서는 public이 기본 접근 제어자이며, #을 통해 private을 구현할 수 있다.
2. 코드 구현
(1) 접근제한자를 사용하지 않은 경우
class BankAccount {
constructor(initialBalance) {
this.balance = initialBalance;
// public 필드
}
}
const account = new BankAccount(1000);
//new 를 통해 새로운 생성자 함수를 만들어서 BankAccount 메서드 사용하려고 함
account.balance = -5000;
// 외부에서 직접 수정 가능 - 잘못된 값이 들어감
console.log(account.balance);
// -5000
코드를 잘 살펴보면,
BankAccount 클래스는 this를 통해 initialBalance를 받아 this.balance로 설정하는데
이때 balance는 기본적으로 public 속성이라 외부에서 직접 접근이 가능하다.
따라서 new 키워드를 통해 BankAccount 클래스의 인스턴스인 account 를 생성한 후
account.balance 가 직접 수정이 가능해진것이다.
-> 이렇게 되면 오류가 일어날 수 있다.
(2) 접근제한자를 사용한 경우
class BankAccount {
#balance; // private 필드로 정의
constructor(initialBalance) {
this.#balance = initialBalance; // private 필드 초기화
}
getBalance() {
return this.#balance; // 외부에서 balance 값을 확인할 때 사용
}
}
const account = new BankAccount(1000);
console.log(account.getBalance());
// 1000 (입력받은 잔액이 그대로 유지됨)
console.log(account.balance);
// 에러 발생: 직접 접근 불가
BankAccount 클래스에 #balance라는 private 필드를 사용하여 접근 제한자를 적용하면,
외부에서 balance 필드에 직접 접근할 수 없게 된다.
#balance는 클래스 내부에서만 접근이 가능하며, 클래스 외부에서는 보이지 않는다.
이로 인해, new BankAccount(1000)을 통해 생성된 account 인스턴스의 balance는 외부에서 직접 변경할 수 없어서,