ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트 클래스의 접근 제어자(Access Modifiers) 완벽 정리!
    Developer 2025. 2. 10. 09:23
    728x90

     

    1. 접근 제어자(Access Modifiers)란?

    접근 제어자(Access Modifiers)는 객체 지향 프로그래밍(OOP)에서 클래스 내의 속성과 메서드에 대한 접근 권한을 제어하는 기능입니다. 이를 통해 데이터 보호, 캡슐화(Encapsulation), 코드 유지보수성 향상 등의 장점을 얻을 수 있습니다.

    자바스크립트는 기존에 접근 제어자를 명시적으로 지원하지 않았지만, ES6+ 이후 클래스(Class) 문법이 도입되면서 접근 제어자 개념이 추가되었습니다.


    2. 자바스크립트의 접근 제어자 종류

    자바스크립트에서 사용할 수 있는 접근 제어자는 다음과 같습니다:

    접근 제어자 사용 방법 설명
    public 기본값 어디서든 접근 가능
    private # 키워드 사용 클래스 내부에서만 접근 가능
    protected 지원 X (대신 _ 관례 사용) 서브 클래스에서만 접근 가능 (JavaScript에서 공식 지원X)

    ES6 이후, private(#) 접근 제어자가 공식적으로 추가됨 → 클래스 내부에서만 접근 가능.


    3. public 접근 제어자

    • 기본적으로 모든 클래스 속성과 메서드는 public(공개) 접근 제어자를 가짐.
    • 외부에서 자유롭게 접근 가능.

    📌 public 예제

    class Person {
      constructor(name) {
        this.name = name; // public 속성
      }
    }
    
    const user = new Person("홍길동");
    console.log(user.name); // 홍길동 (외부 접근 가능)

    주의: public 속성은 외부에서 수정이 가능하므로, 무분별한 데이터 변경을 방지하기 위해 private을 고려해야 함.


    4. private 접근 제어자 (# 사용)

    • # 기호를 붙이면 private 속성이 됨.
    • 클래스 내부에서만 접근 가능하며, 외부에서는 직접 접근할 수 없음.
    • getter/setter 메서드를 사용해 접근 가능하도록 만들 수 있음.

    📌 private 예제

    class BankAccount {
      #balance; // private 속성
    
      constructor(initialBalance) {
        this.#balance = initialBalance;
      }
    
      getBalance() {
        return this.#balance;
      }
    }
    
    const account = new BankAccount(100000);
    console.log(account.getBalance()); // ✅ 100000 (getter 사용)
    console.log(account.#balance); // ❌ SyntaxError: Private field '#balance' must be declared

    #balance는 클래스 외부에서 직접 접근할 수 없음!


    5. protected 접근 제어자 (자바스크립트 공식 지원 X)

    자바스크립트에서는 protected 키워드를 공식적으로 지원하지 않지만, 관례적으로 _(언더스코어)를 사용하여 protected 개념을 구현합니다.

    📌 protected 스타일 예제

    class Parent {
      constructor() {
        this._protectedValue = "이 값은 서브클래스에서 접근 가능";
      }
    }
    
    class Child extends Parent {
      showValue() {
        console.log(this._protectedValue);
      }
    }
    
    const child = new Child();
    child.showValue(); // ✅ "이 값은 서브클래스에서 접근 가능"

    중요: _protectedValue는 어디서든 접근이 가능하지만, 개발자 간의 암묵적 약속으로 서브 클래스에서만 접근하도록 하는 방식입니다.


    6. 접근 제어자 활용법

    🚀 어떤 경우에 사용할까?

    1. public외부에서 자유롭게 접근해야 하는 경우 (예: 사용자 이름, 공개 데이터)
    2. private외부 변경이 허용되면 안 되는 중요한 정보 (예: 비밀번호, 은행 계좌 정보)
    3. protected상속된 클래스에서만 접근할 필요가 있는 경우 (예: 부모 클래스의 설정 값)

    🚫 잘못된 사용 예 (보안 취약점)

    class User {
      constructor(password) {
        this.password = password; // ❌ 공개 데이터로 저장하면 보안 문제 발생
      }
    }
    
    const user = new User("securepassword");
    console.log(user.password); // ❌ 노출 위험

    ✅ 해결책: private을 사용하여 직접 접근을 막고, 안전한 방식으로 데이터를 보호.

    class User {
      #password;
    
      constructor(password) {
        this.#password = password;
      }
    
      getPassword() {
        return "비밀번호는 보안상 제공할 수 없습니다.";
      }
    }

    7. 결론

    자바스크립트에서 접근 제어자(Access Modifiers)를 활용하면 보안 강화, 코드 가독성 향상, 유지보수 편의성 증가 등의 효과를 얻을 수 있습니다.

    특히, ES6+에서 도입된 #private 접근 제어자를 적극 활용하여 데이터를 보호하는 것이 중요합니다! 🚀

    728x90
Designed by Tistory.