결론은 NO.
동적 프로퍼티 할당이 성능을 저하시키지는 않는다.
그 이유는 자바스크립트 엔진이 성능 최적화를 위해 Hidden Class를 사용하기 때문이다.
자바스크립트 엔진 성능 최적화 - Hidden Class
자바스크립트는 동적 타입 언어이기 때문에 객체를 생성할 때 메모리를 얼마나 할당해야 하는지 모른다.
따라서 속성이 추가될 때마다 랜덤한 주소에 메모리를 할당하고 그 속성을 다루기 위해 딕셔너리 랜덤한 메모리에 접근해야 한다.
또한 객체의 속성들이 언제 바뀔지 모르기 때문에 Name-Value 쌍을 항상 유지해야 한다. 이러한 방식은 자바스크립트가 다른 언어에 비해 느려질 수 밖에 없는 한계를 가지게 만든다.
V8 엔진에서는 이를 최적화 시키기 위해 런타임에 내부적으로 숨겨진 클래스를 만들어 사용한다.
객체를 만들고 속성을 추가할 때마다 새로운 클래스가 만들어지며, 다음에 같은 생성자를 사용하여 다시 객체를 만든다면 이미 만들어 두었던 히든 클래스를 사용하게 된다.
새로운 속성이 추가된다면 새로운 히든 클래스를 만들거나 이미 만들어진 히든 클래스를 사용한다. 이렇게 만들어진 히든클래스에는 각 속성의 정적인 Offset이 저장되며 속성의 위치 정보를 해석할 필요가 없어지기 때문에 정적 타입 언어와 같은 성능을 낼 수 있다.
객체가 생성될 때는 반드시 히든 클래스가 생성된다.
객체에 새로운 프로퍼티를 생성할 때, 참조하는 히든 클래스가 변경된다.
이때 새로운 히든 클래스는 생성된 프로퍼티의 오프셋 값을 추가하는 것이 아니라, “전환 정보”가 더해진다.
- 전환 정보 : “new property를 추가하면 new클래스로 전환된다” 라는 정보
전환 정보를 이용하여 히든 클래스를 쓸데없이 늘리지 않으면서 오프셋을 효율적으로 관리할 수 있다.
히든 클래스라는 개념은 겉으로 드러나지 않지만, 프로퍼티 값을 참조할 때 발생하는 속도 저하를 막기 위한 하나의 장치이다.
히든 클래스를 바탕으로 인라인 캐싱이라는 또다른 최적화 처리가 진행된다.
[ 참고 자료 ]
'Javascript' 카테고리의 다른 글
[ Javascript ] 문자열을 숫자로 형변환하는 3가지 방법 (0) | 2024.03.28 |
---|---|
[ Javascript ] 첨부파일 다운로드 | Blob (0) | 2024.03.28 |
디버깅에 사용할 수 있는 다양한 console API (0) | 2024.03.27 |
[ Javascript ] fill 배열 메서드를 이용해 초기값 채워넣기 (0) | 2024.03.27 |
[ Javascript ] in 연산자 사용 시 주의해야 할 점 (0) | 2024.03.27 |