브라우저의 DOM은 구조적으로 복잡하고, 이를 직접 조작하는 작업은 성능 비용이 상당히 높다.
이를 개선하여 웹 애플리케이션의 성능을 최적화하기 위해 Virtual DOM이 등장했다.
DOM 노드 트리를 복제한 자바스크립트 객체
class, style 등 속성 ⭕️
DOM api 메서드 ❌
상태 변경이 발생할 때마다 전체 UI를 Virtual DOM에 반영하고, 이를 이전 상태와 비교하여 필요한 부분에 한해서 최소한의 DOM 업데이트를 수행하는 것이다. (⇒ 재조정)
Virtual DOM을 업데이트하고 비교하는 일은 실제 DOM을 조작하지 않고 메모리 상에서 업데이트와 비교가 이뤄지기 때문에 가볍고 빠르게 수행된다.
<div>와 <span>), React는 비교를 수행하지 않고 해당 요소와 자식들을 모두 새로 생성한다. → 비효율적으로 보일 수 있지만, 실제로는 타입이 다른 경우가 보통 완전히 다른 컴포넌트로 교체되는 경우가 많아 효율적이다.