자바스크립트 클래스의 접근제어자

camille·2026년 2월 11일

자바스크립트의 접근 제어자 개념

자바스크립트에서 접근 제어자(Access Modifier) 는 클래스 멤버의 접근 범위를 제어하기 위한 개념입니다.
다만, 자바스크립트는 오랫동안 명시적인 접근 제어자를 제공하지 않았기 때문에 일부는 문법이 아닌 관습에 의존해 사용해 왔습니다.


Public

Public은 별도의 키워드를 사용하지 않았을 때 기본적으로 적용되는 접근 수준입니다.
클래스 내부뿐 아니라 외부에서도 자유롭게 접근할 수 있습니다.

class Person {
  constructor() {
    this.name = "John"; // Public
  }
}

const p = new Person();
console.log(p.name); // 접근 가능

Private

Private은 멤버 앞에 # 키워드를 붙여 선언하며, 클래스 내부에서만 접근 가능합니다.

class Person {
  #secret = "hidden";

  getSecret() {
    return this.#secret;
  }
}
  • 클래스 외부 접근 ❌

  • 상속받은 클래스에서도 접근 ❌

  • 언어 차원에서 강제되는 진짜 Private

Protected (관습적 사용)

자바스크립트는 Protected 접근 제어자를 공식적으로 지원하지 않습니다.
대신 관습적으로 _ 접두어를 사용해 “외부에서 사용하지 말자”는 의미를 전달합니다.

class Person {
  _secret = "hidden";
}

클래스 외부 접근 가능 (문법적으로는 ❗)

상속 클래스에서 접근 가능

개발자 간 약속일 뿐, 강제성은 없음

타입스크립트에서의 접근 제어자 차이점 🤔

타입스크립트는 자바스크립트의 한계를 보완하여 명시적인 접근 제어자 키워드를 제공합니다.

1️⃣ 명확한 접근 제어자 키워드 제공
타입스크립트에서는 다음과 같은 키워드를 사용할 수 있습니다.

public

private

protected

class Foo {
  public a: string;      // 외부 접근 O / 상속 접근 O
  private b: number;     // 외부 접근 X / 상속 접근 X
  protected c: boolean;  // 외부 접근 X / 상속 접근 O

  constructor(a: string, b: number, c: boolean) {
    this.a = a;
    this.b = b;
    this.c = c;
  }
}

public은 생략 가능하지만, 의도를 명시적으로 표현할 수 있음

private은 # 없이도 Private을 표현 가능

protected는 언어 차원에서 상속 접근을 허용하면서 외부 접근을 차단

⚠️ 타입스크립트의 접근 제어자는 컴파일 타임에서만 체크되며,
자바스크립트로 변환되면 런타임 강제성은 없습니다.

2️⃣ 파라미터 프로퍼티 (Parameter Properties)
타입스크립트는 생성자 매개변수에 접근 제어자를 선언하면,
해당 값이 자동으로 클래스 멤버로 선언되고 초기화되는 기능을 제공합니다.

class Foo {
  constructor(
    public a: string,
    private b: number,
    protected c: boolean
  ) {
    // 별도의 멤버 선언 및 초기화 코드 불필요
  }
}

이 기능을 사용하면

중복 코드 제거

클래스 정의가 훨씬 간결해짐

접근 제어자 의도가 생성자에서 바로 드러남

정리

자바스크립트

  • Public: 기본

  • Private: # 키워드

  • Protected: 언어 지원 ❌ (관습적 _ 사용)

타입스크립트

  • public, private, protected 키워드 제공

  • 컴파일 타임에서 접근 제어를 명확히 체크

  • 파라미터 프로퍼티로 코드 간결성 향상

타입스크립트의 접근 제어자는 캡슐화와 유지보수성을 크게 향상시키며,
대규모 프로젝트일수록 그 장점이 더욱 두드러집니다.

0개의 댓글