과제 체크포인트
배포 링크
https://hanghae-plus.github.io/front_6th_chapter1-3/
기본과제
equalities
- shallowEquals 구현 완료
- deepEquals 구현 완료
hooks
- useRef 구현 완료
- useMemo 구현 완료
- useCallback 구현 완료
- useDeepMemo 구현 완료
- useShallowState 구현 완료
- useAutoCallback 구현 완료
High Order Components
- memo 구현 완료
- deepMemo 구현 완료
심화 과제
hooks
- createObserver를 useSyncExternalStore에 사용하기 적합한 코드로 개선
- useShallowSelector 구현
- useStore 구현
- useRouter 구현
- useStorage 구현
context
- ToastContext, ModalContext 개선
과제 셀프회고
리액트에서 쓰이는 hooks에 대해 어떤 원리로 쓰이고 어떻게 만드는지 좀 더 자세히 알게된 거 같았다. 아직은 부족하지만 반복해서 공부하다보면 코드 리팩토링과 성능최적화를 좀 더 능숙하게 할 수 있을 거 같다
기술적 성장
어떤 hook을 어떤 상황에 필요하고 어떻게 써야하는 지에 대한 이해도를 바탕으로 좀 더 정교하고 세밀한 코딩이 가능해진 거 같다! 나만 그렇게 느껴지는 건진 몰라도;
자랑하고 싶은 코드
내가 자랑하고 싶은 코드는 깊은 비교 함수에서 배열 비교와 객체 비교 부분인데 왜 자랑하고 싶냐면 재귀함수라는 개념은 알고 있었고 알고리즘 공부할 때 깊은탐색 할 때만 써본 게 전부였었다 그래서 알고리즘용 함수라는 인식이 박혔었는데 이번 과제를 통해서 그 인식이 깨져버린 거 같다 이럴 때도 쓸 수 있는 거였다니
개선이 필요하다고 생각하는 코드
전체적으로 개선이 필요할 거 같긴 한데 현재 코드 흐름이 어떻게 되는 지 파악하는데 집중하고 있다
학습 효과 분석
아직은 잘 모르겠다 좀 더 공부를 해야 할 거 같다
과제 피드백
코드파악하는데 어려움이 있어 어느 부분을 피드백을 받아야 할지 감이 안오는 거 같다;
학습 갈무리
리액트의 렌더링이 어떻게 이루어지는지 정리해주세요.
state나 props가 변경되면 현재의 돔을 가상돔으로 만든 후 이전에 만든 가상돔과 비교하여(diffing) 바뀐 부분만 실제 DOM에 반영하여 렌더링이 이루어진다
메모이제이션에 대한 나의 생각을 적어주세요.
메모이제이션은 어차피 계산 결과는 똑같은데 렌더링 과정에서 불필요하게 계산이 이뤄지는 로직으로 인해 성능 저하를 유발하여 사용자 체감이 나빠지는 걸 방지하기 위해 꼭 필요한 과정이라고 생각한다 하지만 너무 남발해서 쓰게되면 코드도 복잡해지고 메모리 낭비도 심해질 거 같다
컨텍스트와 상태관리에 대한 나의 생각을 적어주세요.
리뷰 받고 싶은 내용
과제 피드백
안녕하세요 상수님, 수고하셨습니다! 이번 과제는 React의 내장 훅들을 직접 구현해보면서 프레임워크가 어떻게 상태를 관리하고 최적화하는지 깊이 이해하는 것이 목표였습니다. 해당 구현을 통해서 말로는 설명하기는 어렵더라도 구체적인 원리등을 깨닫게 되는 시간이었기를 바래요.
회고에서 재귀함수에 대한 새로운 인식을 얻으신 점이 재밌었습니다. "알고리즘용 함수라는 인식이 깨져버린 거 같다"고 했는데 그렇죠. 재귀는 상당히 자주 쓰이는 패턴입니다. 자기 스스로를 부르는 함수라는 개념이 어려운데 이번 기회에 잘 이해하게 된 것 같아서 좋네요.
"아직은 잘 모르겠다 좀 더 공부를 해야 할 거 같다"고 하셨지만, 분명 알게 된 것은 많을 거라고 생각해요. 개발자는 내가 알고 있는 것을 언어의 형태로 또 잘 표현하는 것이 중요한 능력인 만큼 회고에서 잘 모르겠다면 최대한 어떻게 뭘 모르겠는지를 구체적으로 적어보길 바래요!
수고하셨습니다. 기술적 깊이를 탐구하는 자세와 동료들의 피드백을 적극적으로 수용하는 태도가 정말 인상적입니다. 앞으로 진행될 클린코드 챕터에서도 이런 탐구 정신을 계속 발휘해 주시기 바랍니다. 화이팅입니다! :)