Skip to content

Commit

Permalink
상범 7장 정리.md (#42)
Browse files Browse the repository at this point in the history
  • Loading branch information
sangbooom authored May 22, 2024
1 parent 1439e75 commit 0172c09
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions 챕터_7/상범.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 7장 - 신뢰할 수 없는 코드를 쓰면서 불변성 지키기

방어적 복사 : 안전하지 않은 코드(서드파티 or 레거시 코드)를 사용하기 전 / 후에 데이터를 복사해서 사용

## 깊은 복사는 얕은 복사보다 비싸다

![image](https://github.com/muhandojeon/Grokking-Simplicity/assets/43921054/53396dcf-78eb-4151-8ab3-43bf6573cb2a)

![image](https://github.com/muhandojeon/Grokking-Simplicity/assets/43921054/94bcc75b-09a7-4885-afff-b015f2927de2)


tanstack/query 에서 구조적 공유(structural share)는 어떻게 동작될까?

- 해당 코드 : https://github.com/TanStack/query/blob/2aca521a882e54b01ee6a070cb4a38f38bfa4bcf/packages/query-core/src/utils.ts#L210-L253
- 코드 해석:

**입력으로 `a``b` 두 매개변수를 받으며, 이 두 매개변수가 완전히 동일할 경우 `a`를 반환**

**만약, `a``b`가 배열이거나 객체인 경우, 각 항목 또는 속성을 순회하며 다음을 수행:**

- **배열 또는 객체의 모든 항목(또는 속성)을 비교**
- **동일한 항목은 `a`에서 가져옴**
- **`a`와 `b` 사이에 동일하지 않은 항목이 있다면, 그 항목에 대해 재귀적으로 `replaceEqualDeep` 함수를 호출하여 깊은 비교를 수행**
- **만약 `a`와 `b`의 크기가 같고, 모든 항목이 동일하다면 원본 `a`를 반환**
- **그렇지 않다면, 변경된 사본을 반환**

**이 코드의 핵심은, 깊은 동일성(deep equality) 검사를 통해 불필요한 데이터 복사를 방지하고, 가능한 경우 원본 데이터 구조를 재사용하여 메모리 사용을 최적화하는 것.
⇒ 큰 JSON 구조에서 데이터를 효율적으로 다루기 위함일 듯, 최적화 굿**

0 comments on commit 0172c09

Please sign in to comment.