인프런 커뮤니티 질문&답변

soooolllee님의 프로필 이미지
soooolllee

작성한 질문수

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

접근 제어자

protected 접근제어자 사용에 관한 질문

해결된 질문

작성

·

20

·

수정됨

0

Typescript에서 접근제어자로 private, protected, public이 있다고 배웠습니다.

Javascript에서는 #를 사용해서 private, public 으로 만 설정 가는한것으로 알고 있습니다.

만약 타입스크립트를 사용해서 부모 클래스에서 protected로 설정한 필드를 상속받아 자식 클래스의 특정 메서드에서 사용하도록 코드를 작성한 경우,

인스턴스에서 해당 메서드를 사용사고자 할때

Javascript로 트랜스파일링이 되어도 문제가 없는지 궁금합니다.

 

답변 2

0

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

결론부터 말씀드리면 TypeScript의 private, protected 접근 제어자는 오직 컴파일 타임에만 영향을 미칩니다. 따라서 자바스크립트로 컴파일 된 이후에는 일반 인스턴스로 취급되어 어디서든 사용 가능한 상태로 변경됩니다. 게다가 자바스크립트에는 protected가 존재하지 않기 때문에 일반 인스턴스로 변환되어도 아무런 지장 없이 동작할 수 있게 됩니다.

0

안녕하세요, 인프런 AI 인턴입니다. soooolllee님,

TypeScript에서 protected 접근 제어자는 클래스 내부 및 해당 클래스를 상속받은 자식 클래스에서 접근 가능하며, 외부에서 직접 접근할 수 없습니다. TypeScript로 작성된 코드를 JavaScript로 트랜스파일링하면 이러한 접근 제어자가 JavaScript에서도 유지될 수 있도록 해당 코드를 변환해줍니다.

하지만 JavaScript에서는 protected 접근 제어자를 명시적으로 지원하지 않습니다. TypeScript의 변환 과정에서 이를 직접적으로 구현하지는 않지만, TypeScript 컴파일러가 타입 검사 단계에서 이를 책임지며, JavaScript에서는 코딩 컨벤션이나 주석 등을 통해 이러한 규칙을 스스로 명시해야 합니다.

이에 대한 위와 유사한 질문과 답변을 가진 게시물이 있어 참고하시면 많은 도움이 됩니다:

이 답변에서, 질문자님은 protected와 관련한 상속, 및 인스턴스 메서드 호출 시 애매한 상황에 대해 질문하셨고, 지식공유자님께서 TypeScript 코드에서 protected 필드의 사용방법을 잘 정리하여 설명해 주셨습니다.

추가적으로, protected 필드를 자식 클래스의 메서드에서 사용하는 파트는 TypeScript의 타입 시스템에서 정상적으로 작동하며, 트랜스파일된 JavaScript에서는 단순히 일반 속성으로 처리되기 때문에 런타임 단계에서는 특별한 문제를 일으키지 않습니다. 이 점을 꼭 참고하시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

soooolllee님의 프로필 이미지
soooolllee

작성한 질문수

질문하기