질문 118 · 실전 면접 답변
public·protected·private와 #필드는 무엇이 다른가요?
이렇게 답해 보세요 (핵심 답변)
TypeScript의 public, protected, private는 컴파일 단계에서 클래스 멤버의 접근 범위를 검사하는 키워드입니다. public은 어디서나, protected는 해당 클래스와 파생 클래스에서, private는 선언된 클래스 내부에서만 접근을 허용합니다. 다만 이들은 컴파일 후 JavaScript 출력에서는 사라지는 타입 수준 제약인 반면, JavaScript 표준인 #필드(#value)는 런타임 엔진 차원에서 외부 접근을 문법 오류로 막는 실제 private 필드입니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 컴파일 타임에만 잘못된 API 사용을 막고 싶다면 private로 충분하지만, 배포 후 런타임이나 디버거·외부 스크립트에서도 숨겨야 한다면 #필드를 선택합니다.
- TypeScript에서 private이나 protected 멤버가 있는 클래스는 다른 객체가 똑같은 모양을 가졌더라도 같은 클래스 계층에서 나온 경우에만 타입 호환을 허용합니다.
면접에서 자주 하는 실수
TypeScript의 private 키워드만 붙여 두고 런타임에서도 Object.keys나 대괄호 접근으로부터 완벽히 숨겨진다고 오해하지 않아야 합니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 118번을 바탕으로 질문과 답변을 새로 정리했습니다.