Skip to content

Commit

Permalink
πŸ“ 백광인 2024-03-04
Browse files Browse the repository at this point in the history
  • Loading branch information
RookieAND committed Mar 4, 2024
1 parent 6d34e1b commit 1ed5a8f
Showing 1 changed file with 72 additions and 0 deletions.
72 changes: 72 additions & 0 deletions docs/RookieAND/dil/2024-03-04.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# βœ’οΈ λ¦¬μ•‘νŠΈ κ°œλ°œμ„ μœ„ν•΄ κΌ­ μ•Œμ•„μ•Ό ν•  μžλ°”μŠ€ν¬λ¦½νŠΈ

### ✏️ JS 의 동등성 비ꡐ

- useEffect λ₯Ό μ‚¬μš©ν•  λ•Œ, 첫번째 인자둜 넣은 setup ν•¨μˆ˜ 내에 μ‘΄μž¬ν•˜λŠ” Reactive ν•œ 값은 λ°˜λ“œμ‹œ deps 에 λ„£μ–΄μ•Ό ν•œλ‹€.
- Reactive ν•˜μ§€ μ•Šμ€ 값은 μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ λ¦¬λ Œλ”λ§μ΄ λ˜μ–΄λ„ **μ ˆλŒ€ λ³€ν•˜μ§€ μ•ŠλŠ” κ°’** 이닀.
- λ°˜λŒ€λ‘œ Reactive ν•œ 값은 맀 λ Œλ”λ§λ§ˆλ‹€ 값이 λ‹¬λΌμ§ˆ 수 μžˆμŒμ„ μ˜λ―Έν•œλ‹€.
- μ΄λ•Œ 각 배열에 μ‘΄μž¬ν•˜λŠ” 값듀을 μˆœνšŒν•˜λ©΄μ„œ 동등 비ꡐλ₯Ό μ‹œν–‰ν•˜κ³  λ§Œμ•½ 값이 λ³€κ²½λ˜μ—ˆλ‹€λ©΄ setup ν•¨μˆ˜κ°€ μ‹€ν–‰λœλ‹€.
- React 의 props λŠ” λ¦¬λ Œλ”λ§μ„ μœ λ°œμ‹œν‚€λŠ” μš”μ†Œμ΄λ©°, 이전과 ν˜„μž¬μ˜ props λ₯Ό λΉ„κ΅ν•˜λŠ” 과정도 동등 비ꡐ가 λ‹΄λ‹Ήν•œλ‹€.

> React μ—μ„œλŠ” 동등 비ꡐλ₯Ό μ–΄λ–€ μ‹μœΌλ‘œ μ§„ν–‰ν•˜λŠ”κ°€?
- 기본적으둜 React μ—μ„œλŠ” `Object.is` λ©”μ„œλ“œλ‘œ 두 κ°’μ˜ 동등 비ꡐλ₯Ό μ‹œν–‰ν•˜λ©°, μ°Έμ‘°ν˜• νƒ€μž…μ˜ 경우 같은 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•œλ‹€λ©΄ κ°™λ‹€κ³  νŒλ‹¨ν•œλ‹€.
- μ΄λ ‡κ²Œ 두 객체의 λ‚΄λΆ€ 데이터λ₯Ό μƒμ„Ένžˆ μ‘°νšŒν•˜μ§€ μ•Šκ³  참쑰된 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ§Œμ„ νŒλ³„ν•˜λŠ” 동등 비ꡐ 방식이 **"얕은 비ꡐ"** 이닀.

### ✏️ JS 의 데이터 νƒ€μž…

- JS 의 데이터 νƒ€μž…μ€ 크게 μ›μ‹œ νƒ€μž…κ³Ό 객체 νƒ€μž…μœΌλ‘œ λ‚˜λ‰œλ‹€.

- μ›μ‹œ νƒ€μž…μ€ 객체 νƒ€μž…μ΄ μ•„λ‹Œ λ‚˜λ¨Έμ§€ νƒ€μž…μ„ μ˜λ―Έν•œλ‹€.
- boolean, string, number, null, undefined, BigInt, Symbol 둜 이루어져 μžˆλ‹€.

> typeof null === 'object'
- JS κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ ν”νžˆ λ§ˆμ£Όν•  수 μžˆλŠ” ꢁ금증이 λ°”λ‘œ ν•΄λ‹Ή 비ꡐ문이닀.
- μ΄λŠ” JS κ°€ 초기 μ„€κ³„λ˜μ—ˆμ„ λ•Œ 생긴 κ²°ν•¨μœΌλ‘œ, 이전 μ½”λ“œμ™€μ˜ ν˜Έν™˜μ„± 문제둜 μ•„μ§κΉŒμ§€ 고쳐지지 λͺ»ν–ˆλ‹€.
- `undefined` λŠ” 아직 값이 ν• λ‹Ήλ˜μ§€ μ•Šμ€ μƒνƒœμ΄λ©°, `null` 은 λͺ…μ‹œμ μœΌλ‘œ 값이 λΉ„μ—ˆμŒμ„ μ˜λ―Έν•œλ‹€. (값은 값이닀.)

> Number vs BigInt
- Number λŠ” 일반적으둜 `-2^53 - 1 ~ 2^53 - 1` 사이λ₯Ό ν‘œν˜„ν•  수 μžˆλ‹€.
- κ·Έ 이상 μˆ«μžκ°€ 컀질 경우 값이 달라도 true λ₯Ό λ°˜ν™˜ν•œλ‹€.
- ν•˜μ§€λ§Œ BigInt 의 경우 number κ°€ ν‘œν˜„ν•  수 μžˆμ—ˆλ˜ ν•œκ³„λ₯Ό λ„˜μ–΄μ„€ 수 μžˆλ‹€.

### ✏️ 값을 μ €μž₯ν•˜λŠ” λ°©μ‹μ˜ 차이

- μ›μ‹œ νƒ€μž…μ˜ 경우 값을 λ³΅μ‚¬ν•˜λ”λΌλ„ 이λ₯Ό μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό ν• λ‹Ή λ°›μ•„ μ±„μš°κΈ° λ•Œλ¬Έμ— μ£Όμ†ŒλŠ” λ‹€λ₯΄λ‹€.
- ν•˜μ§€λ§Œ μ°Έμ‘° νƒ€μž… (Object) 의 경우 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•˜λŠ” ν˜•μ‹μœΌλ‘œ 값을 λ„˜κΈ°κΈ° λ•Œλ¬Έμ— 차이가 μžˆλ‹€.

### ✏️ Object.is

- `Object.is` λŠ” ES6 μ—μ„œ μƒˆλ‘­κ²Œ μ •μ˜λœ 동등 비ꡐ 연산이며, 기쑴의 비ꡐ μ—°μ‚°μžμ™€μ˜ 차이점은 μ•„λž˜μ™€ κ°™λ‹€.

- `==` 과 `Object.is` 의 차이
- `==` 의 경우 μ–‘μͺ½μ΄ λ™λ“±ν•œ νƒ€μž…μ΄ μ•„λ‹ˆλΌλ©΄ 이λ₯Ό μΊμŠ€νŒ…ν•œλ‹€.
- ν•˜μ§€λ§Œ `Object.is` 의 경우 νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ false λ₯Ό λ°˜ν™˜ν•œλ‹€.

- `===` 과 `Object.is` 의 차이
- `Object.is` λŠ” `+0` κ³Ό `-0` 을 λ‹€λ₯΄λ‹€κ³  νŒλ‹¨ν•˜μ§€λ§Œ `===` λŠ” 그렇지 μ•Šλ‹€.
- `Object.is` λŠ” `Number.NaN` (ν˜Ήμ€ κ·Έ μ™Έ NaN 이 λ‚˜μ˜¬ λ§Œν•œ μΌ€μ΄μŠ€) κ³Ό `NaN` 을 κ°™λ‹€κ³  νŒλ‹¨ν•˜μ§€λ§Œ `===` λŠ” 그렇지 μ•Šλ‹€. (NaN === NaN 은 무쑰건 false λ‹€.)

- μ°Έμ‘°ν˜• νƒ€μž…μ˜ 경우 두 객체가 같은 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•œλ‹€λ©΄ `true` λ₯Ό λ°˜ν™˜ν•œλ‹€.

> Object.is 쑰금 더 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κΈ°
```js
function is(a, b) {
return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);
}
```
- Object.is λŠ” ES6 μŠ€νŽ™μ΄κΈ° λ•Œλ¬Έμ— ES5 이전 버전을 μ§€μ›ν•˜κΈ° μœ„ν•΄ Polyfill 된 μœ ν‹Έ ν•¨μˆ˜λ₯Ό React λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•œλ‹€.
- 이λ₯Ό 쑰금 더 μžμ„Ένžˆ λœ―μ–΄λ³΄λ©΄ μ•„λž˜μ™€ 같은 λ‘œμ§μ„ κ±°μΉœλ‹€.

1. `x === y` κ°€ μ„±λ¦½ν•œλ‹€λ©΄, `x !== 0 || 1 / x === 1 / y` 식도 성립해야 ν•œλ‹€.
1-1. `x !== 0` 인 경우
- x κ°€ 0이 μ•„λ‹ˆλΌλ©΄ y 도 0이 μ•„λ‹ˆλ©°, x === y μ΄λ―€λ‘œ x 와 y κ°€ NaN 인 경우 μ™Έμ—λŠ” 항상 참이닀.
1-2. `x === 0` 인 경우 `1 / x === 1 / y` 이어야 ν•œλ‹€.
- λ§Œμ•½ x κ°€ `+0` 이라면 1 / x λŠ” `Infinity` 이고 `-0` 라면 `-Infinity` 이닀. λ”°λΌμ„œ x 와 y 의 λΆ€ν˜Έκ°€ λ‹€λ₯΄λ©΄ false λ₯Ό λ°˜ν™˜ν•œλ‹€.
- μ—„κ²©ν•œ λΉ„κ΅μ˜ 경우 두 μΌ€μ΄μŠ€λ₯Ό κ°™λ‹€κ³  보기 λ•Œλ¬Έμ— 이λ₯Ό κ΅¬λ³„ν•˜κΈ° μœ„ν•œ 비ꡐ식이닀.
2. `x !== x && y !== y` 인 경우
- μ—„κ²©ν•œ λΉ„κ΅μ˜ 경우 `x !== x` λ₯Ό μ„±λ¦½ν•˜λŠ” 쑰건은 x κ°€ NaN 인 경우 외에 μ—†λ‹€.
- λ”°λΌμ„œ `x` 와 `y` κ°€ λ‘˜ λ‹€ NaN 일 경우 true λ₯Ό λ°˜ν™˜ν•˜κ³ , κ·Έ μ™Έμ—λŠ” false λ₯Ό λ°˜ν™˜ν•œλ‹€.

0 comments on commit 1ed5a8f

Please sign in to comment.