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

슬프구나님의 프로필 이미지
슬프구나

작성한 질문수

Typescript with Vue 실전 프로젝트

@Component로 컴포넌트 만들기

@Decoratort 관련하여 설명 좀 더 부탁드립니다.

작성

·

174

1

데코레이터는 그냥 함수라고 하셨는데,

 

예제소스에 보면, 생성자 함수를 받아서 속성을 추가 못하게 막았다고 하는데, 어떤원리인지 좀 궁금합니다.

 

Greeter 클래스에

@sealed 데코레이터가 있는데,

그러면, sealed 함수에 인자로 Greeter가 넘어가나요?

답변 2

1

성도희님의 프로필 이미지
성도희
지식공유자

안녕하세요. ChangHyeon Bae님! 

클래스 데코레이터에 대해서 질문해주신것 같아요.
결론만 먼저 말씀드리면 
sealed 함수의 인자는 Greeter의 constructor(생성자 함수)가
넘어가게 됩니다.

강의에서는 가볍게 짚고 넘어갔던 부분이라 좀더 자세히 설명을 드려보자면
먼저 클래스 데코레이터는 클래스 생성자에 관여합니다.
런타임시에 호출되며, 이때 데코레이터가 사용된 클래스의 생성자 (constructor)를 파라미터로 받습니다.

강의에서 보여드린 코드로 다시 설명을 드리면,

1. 런타임시에 Greeter 클래스 코드를 읽어들일때, 
2. 이 때, sealed 함수가 호출되고, sealed의 constructor 파라미터는 Greeter의 constructor 함수입니다. 이 함수 내부에서 constructor를 수정할 수 있습니다.


따라서 sealed라는 데코레이터는
Greeter의 constructor(생성자) 함수를 Object.seal이라는 기능을 이용해서 객체를 밀봉하여
속성을 추가할 수 없고, 삭제도 할수 없는 안전한 함수로 만들었습니다.

이해가 좀 되셨을까요? ㅎㅎ

다른 궁금한점이 또 있으시면 편하게 질문 남겨주세요!

0

슬프구나님의 프로필 이미지
슬프구나
질문자

아.. 저는 Greeter 클래스가 넘어가는줄 알았는데,

해당 클래스에 선언된 생성자를 넘겨주는군요. 감사합니다!

슬프구나님의 프로필 이미지
슬프구나

작성한 질문수

질문하기