0Pricing
TypeScript Academy · 강의

public, private 및 protected 접근 제어자

접근 제어자로 클래스 구성원에 대한 접근을 제어합니다.

public, private 및 protected 접근 제어자은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

시작하기

TypeScript 접근 제한자는 클래스 멤버의 가시성을 제어합니다. 캡슐화를 강화하고 의도하지 않은 사용을 방지하는 데 도움이 됩니다.

공개: 어디에서나 접근 가능

공개가 기본값입니다. 공개 멤버는 클래스 내부, 하위 클래스, 외부 코드 등 어디에서나 접근할 수 있습니다.
class Car {
  public brand: string;
  constructor(brand: string) { this.brand = brand; }
}
const c = new Car('Toyota');
console.log(c.brand); // OK

비공개: 클래스 내부에서만 접근

비공개 멤버는 선언한 클래스 내부에서만 접근할 수 있습니다. 하위 클래스와 외부 코드는 접근할 수 없습니다.
class BankAccount {
  private balance: number = 0;
  deposit(n: number) { this.balance += n; }
}
const a = new BankAccount();
// a.balance; // Error!

보호됨: 클래스와 하위 클래스에서 접근

보호된 멤버는 선언한 클래스와 모든 하위 클래스 내부에서 접근할 수 있지만, 외부 코드에서는 접근할 수 없습니다.
class Animal {
  protected name: string;
  constructor(name: string) { this.name = name; }
}
class Dog extends Animal {
  bark() { console.log(this.name + ' says woof!'); } // OK
}

컴파일 시에만 적용되는 검사

TypeScript 접근 제한자는 컴파일 시에만 검사됩니다. JavaScript 출력에는 여전히 공개 속성이 있으며 런타임에 적용되는 제한은 없습니다.

#을 사용한 JavaScript 비공개 필드

JavaScript에는 런타임에 적용되는 네이티브 비공개 필드가 있으며 `#`으로 표시합니다. TypeScript는 자체 `private` 키워드와 함께 이 문법도 지원합니다.
class Counter {
  #count = 0; // runtime private (JavaScript)
  increment() { this.#count++; }
  get value() { return this.#count; }
}

readonly 제한자

readonly 속성은 생성 중에만 설정할 수 있습니다. 초기화 후에는 변경할 수 없습니다.
class User {
  readonly id: number;
  constructor(id: number) { this.id = id; }
}
const u = new User(1);
// u.id = 2; // Error!

제한자 조합하기

같은 속성에 접근 제한자와 readonly를 함께 사용할 수 있습니다.
class Config {
  constructor(
    public readonly host: string,
    private readonly port: number
  ) {}
}

생성자에서 private 사용하기

생성자를 비공개로 만들면 외부에서 인스턴스화할 수 없습니다. 대신 정적 팩터리 메서드를 사용하십시오.
class Singleton {
  private static instance: Singleton;
  private constructor() {}
  static getInstance(): Singleton {
    return this.instance ??= new Singleton();
  }
}

보호된 생성자

보호된 생성자는 직접 인스턴스화하는 것을 막지만, 하위 클래스가 super()를 통해 호출하는 것은 허용합니다.
class Base {
  protected constructor(public id: number) {}
}
class Derived extends Base {
  constructor(id: number) { super(id); }
}

접근 제한자는 런타임 오버헤드를 추가하지 않음

TypeScript는 모든 타입 정보를 제거하므로 접근 제한자는 컴파일된 JavaScript 출력의 크기나 성능에 전혀 영향을 주지 않습니다.

빠른 확인

클래스 멤버를 해당 클래스와 하위 클래스에서는 접근 가능하게 만들지만 외부 코드에서는 접근할 수 없게 만드는 접근 제한자는 무엇입니까?

복습

접근 가능한 멤버에는 공개(기본값)를, 캡슐화된 내부 구현에는 비공개를, 하위 클래스에서 사용할 멤버에는 보호된 접근 제한자를 사용하십시오. 생성 후 변경되지 않게 하려면 readonly를 추가하십시오.

자주 묻는 질문

“public, private 및 protected 접근 제어자” 강의는 무료인가요?

네 — “public, private 및 protected 접근 제어자” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“public, private 및 protected 접근 제어자”에서 뭘 배우나요?

접근 제어자로 클래스 구성원에 대한 접근을 제어합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“public, private 및 protected 접근 제어자” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. TypeScript 클래스 및 생성자
  2. public, private 및 protected 접근 제어자
  3. readonly 속성 및 매개변수 속성
  4. 클래스로 인터페이스 구현하기
← TypeScript Academy(으)로 돌아가기