기술면접 준비 중 리액트는 효율적인 알고리즘을 사용해 이전 가상 돔과 현재 가상 돔의 변경 사항을 비교한다고 읽었다. 이게 뭘 가리키고 어떻게 동작하는지 궁금해졌다.
React는 Reconciliation이라고 불리는 과정에서
O(n) 복잡도를 가진 휴리스틱 알고리즘을 사용한다.
❓ 휴리스틱 알고리즘 : 불충분한 시간이나 정보로 인하여 합리적인 판단을 할 수 없거나, 체계적이면서 합리적인 판단이 굳이 필요하지 않은 상황에서,
빠른 의사결정을 할 수 있도록 고안된 컴퓨터 알고리즘
🐡 나무위키 - 휴리스틱 알고리즘
1. 다른 타입의 엘리먼트는 다른 트리를 만든다
🖥️ jsx
// Before
<div>
<Counter />
</div>
// After
<span>
<Counter />
</span>
이 경우 React는 이전 div와 그 자식들을 모두 제거하고,
새로운 span 트리를 처음부터 만든다.
2. 개발자가 key prop을 통해 여러 렌더링 사이에서 유지될 자식 엘리먼트를 표시할 수 있다.
🖥️ jsx
// Before
<ul>
<li>first</li>
<li>second</li>
</ul>
// After
<ul>
<li>second</li>
<li>first</li>
</ul>
1. 엘리먼트 타입 비교
2. DOM 노드 속성 처리
3. 자식 재귀 처리
4. 리스트 항목 비교 (key 활용)
🖥️ jsx
// key를 사용한 효율적인 비교
<ul>
<li key="1">first</li>
<li key="2">second</li>
</ul>
key를 통해 기존 트리와 새로운 트리의 자식들이 일치하는지 확인
순서가 변경된 경우에도 key를 통해 효율적으로 처리