기간 (2024 / 03.18 ~ 03.23)
작성 (2024 / 03.29)
문제 : diff 알고리즘이 무엇인지 잘 몰랐다.
알고리즘 공부를 해본적이 아직 없어서인가 수도코드를 따라 해보니 되기는 했으나 그 개념까지는 완전히 내것으로 이해를 못했던 것 같다.
시도 : 공홈, 블로그 찾아보기
해결 : diffing = 비교
이미 만들어진 VDOM을 통해 기존과는 어떤 변경점이 생겼는지를 알아가는 과정
Diffing Algorithm 이란?
In React, displaying 1000 elements would require in the order of one billion comparisons. This is far too expensive. Instead, React implements a heuristic O(n) algorithm based on two assumptions:
1. Two elements of different types will produce different trees.
2. The developer can hint at which child elements may be stable across different renders with a key prop.
간단히 말해 모든걸 순회 하면서 차이점을 찾는 것이다
이 때, 리액트의 diffing 알고리즘은 heuristics알고리즘을 이용한 순회를 하게되고 변경된 결과를 업데이트 한다. 다음은 두 가지 돔 트리를 비교하는 과정에서 나올수 있는 케이스들이다.
루트 노드가 아예 다른 경우
이 경우는 처음부터 다르기 때문에, 이전에 있던 state도 모두 지우고 새로운 트리를 구축한다. 부모가 바뀌니 자식도 전부 다시 리랜더링 하는 것이다.
타입은 같지만 속성이 다른 경우
속성(스타일)만 달라지는 경우에는 두 속성을 비교하여 바뀐 부분만 변화 시킨다.
자식 요소가 바뀌는 경우
알게된 것 : 리액트의 VDOM과 diff의 원리
heuristics 알고리즘
컴퓨터로 어떤 문제를 해결하기 위한 명확한 절차가 없거나 또는 있다할지라도 그것이 방대한 시간과 비용을 필요로 하는 경우에, 일반적으로 경험적 지식을 도입하여 순차적이며 체계적으로 그 해결방법을 산출해 가는 방법.
문제 : 개념 이해는 되었으나, 코드로 개발함에 있어 완전한 이해가 덜 된 것 같다.
시도 : 책이며 블로그 등 찾아보기
해결 : 리액트를 자주 쓰지않으니 개념이 이해가 더딘것 같다.
알게된 것 : 간단한 hook을 구현해보면서 느낀건 클로져의 개념이 중요하다는 것이다.
그리고 그 클로져를 쓰는데 아직 미숙한 부분이 있기에 과제를 진행하면서 애먹었던것 같다..
클로져에 대한것도 다시 제대로 정리를 해보아야겠다.
과제 3개 전부 제출 (X)
과제를 다 못했다... A는 풀었으나 B는 중간까지밖에 못했고, C는 보지도 못했다..
리액트 기본기 다지기 (remind)
리액트의 작동원리에 대해 다시 해봐야겠다.
회고를 너무 늦게 썻다. 3주차 내용과 헷갈린다...