"'이거 내 거' 말하는 4가지 방법. 3개가 TypeScript 전용; 하나가 JavaScript."
4개 modifier
public(default): 어디서나 접근 가능. Default 라서 명시 거의 안 써.protected: 이 class 와 subclass 에서 접근 가능, 외부 안 됨.private(TypeScript): TypeScript-only privacy — compile-시점 강제. Runtime 엔 property 가obj['name']통해 접근 가능한 일반 property.#private(JavaScript): 진짜 private 문법. 숨겨진 slot 통한 runtime-강제. 외부 접근 시도가 parse 시점 SyntaxError 또는 runtime TypeError.
어느 거 써
새 TypeScript 코드엔: 진짜 private 필드, 특히 민감한 거 (auth token, internal handle, raw 메모리) 엔 #private 선호. 우회 못 함.
기존 코드엔: private 괜찮음 — compile-시점 contract 가 대부분 정당한 접근 실수 잡음. 더 강한 보장 원할 때 #private 로 migration 기계적.
상속 체인엔: subclass 가 필요한데 외부 caller 가 보면 안 되는 필드/method 엔 protected. Framework base class 의 흔한 패턴.
작동하는 default: 대부분 필드가
private (또는 #private) 여야. 대부분 method 가 public 이어야. protected 가 드문 중간 ground. 어디서나 public default 는 너무 leaky; 어디서나 private default 는 너무 제한적.