작성
·
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