λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ Modern JS Deep Dive

[λͺ¨λ”₯λ‹€] 11μž₯ μ›μ‹œ κ°’κ³Ό 객체의 비ꡐ

728x90

 

 

μ›μ‹œκ°’ 객체
- λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’
- λ³€μˆ˜μ— μ‹€μ œ κ°’ μ €μž₯
- λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ή : μ›μ‹œ 값이 λ³΅μ‚¬λ˜μ–΄ 전달 (값에 μ˜ν•œ 전달)
- λ³€κ²½ κ°€λŠ₯ν•œ κ°’
- λ³€μˆ˜μ— μ°Έμ‘° κ°’ μ €μž₯
- λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ή : μ°Έμ‘° 값이 λ³΅μ‚¬λ˜μ–΄ 전달 (참쑰에 μ˜ν•œ 전달)

 

 

πŸ₯ͺ 11. 1 μ›μ‹œ κ°’

 

11.1.1 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’

 

μ›μ‹œ νƒ€μž…μ˜ κ°’. λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’. 

ν•œλ²ˆ μƒμ„±λ˜λ©΄ λ³€κ²½ν•  수 μ—†μŒ. 

πŸ“Œ 변경을 ν•  수 μ—†λ‹€λŠ” 건 λ³€μˆ˜κ°€ μ•„λ‹ˆλΌ 값에 λŒ€ν•œ 것. 

 

λ³€μˆ˜λŠ” μ–Έμ œλ“  μž¬ν• λ‹Ή κ°€λŠ₯. 

κ·Έ 쀑 μƒμˆ˜λŠ” μž¬ν• λ‹Ή λΆˆκ°€λŠ₯. 

ν•˜μ§€λ§Œ μƒμˆ˜μ™€ λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 값을 λ™μΌμ‹œ ❌

μƒμˆ˜μ— 객체λ₯Ό ν• λ‹Ήν•˜λ©΄ μž¬ν• λ‹Ήμ€ ❌ κ°’(λ‚΄μš©) 변경은 κ°€λŠ₯

 

μ›μ‹œ 값을 μž¬ν• λ‹Ή -> μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간 확보 -> μž¬ν• λ‹Ήν•œ μ›μ‹œκ°’ μ €μž₯ -> λ³€μˆ˜κ°€ μ°Έμ‘°ν•˜λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ λ°”λ€œ. 

(이전 값은 μ•ˆμ“°μ΄λ‹ˆκΉŒ λ‚˜μ€‘μ— GCκ°€ μ—†μ•¨κ±°μž„)

 

πŸ“Œ λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œκ°€ λ³€κ²½λœ 이유

: μ›μ‹œ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 값이기 λ•Œλ¬Έ. === κ°’μ˜ λΆˆλ³€μ„± λ•Œλ¬Έ

: μ›μ‹œ 값은 μž¬ν• λ‹Ή 외에 λ³€μˆ˜ 값을 λ³€κ²½ν•  수 μžˆλŠ” 방법이 μ—†λ‹€. 

 

 

11.1.2 λ¬Έμžμ—΄κ³Ό λΆˆλ³€μ„±

 

λ¬Έμžμ—΄λ§Œ λͺ‡κ°œμ˜ 문자둜 μ΄λ€„μ‘ŒλŠλƒμ— 따라 -> λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 크기가 결정됨. (문자 1κ°œλ‹Ή 2λ°”μ΄νŠΈμž„.) 

μˆ«μžλŠ” 1도, 10000 도 λ™μΌν•œ 8λ°”μ΄νŠΈκ°€ ν•„μš”ν•¨. 

 

λ‹€λ₯Έ μ–Έμ–΄μ—λŠ” string νƒ€μž…μ΄ μ—†λŠ” κ²½μš°λ„ μžˆμ§€λ§Œ, JSλŠ” μ œκ³΅ν•˜κ³  λ³€κ²½λΆˆκ°€λŠ₯ ν•œ κ°’μž„. 

 

λ¬Έμžμ—΄μ€ μœ μ‚¬ λ°°μ—΄ 객체 & μ΄ν„°λŸ¬λΈ” => λ°°μ—΄κ³Ό μœ μ‚¬ν•˜κ²Œ 각 λ¬Έμžμ— μ ‘κ·Ό κ°€λŠ₯. 

 

πŸ“Œ μœ μ‚¬ λ°°μ—΄ 객체

- index 둜 ν”„λ‘œνΌν‹° 값에 μ ‘κ·Ό κ°€λŠ₯

- length ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ” 객체

-> for 문으둜 순회 κ°€λŠ₯

 

indexλ₯Ό 톡해 각 λ¬Έμžμ— 접근은 κ°€λŠ₯ν•˜μ§€λ§Œ, 변경은 μ•ˆλ¨. (μ•ˆλλ‹€κ³  μ•Œλ €μ£Όμ§€λ„ μ•ŠμŒ)

 

 

11.1.3 값에 μ˜ν•œ 전달

 

λ³€μˆ˜μ— λ³€μˆ˜ ν• λ‹Ή => λ³΅μ‚¬ν•œ μƒˆλ‘œμš΄ 값이 할당됨. 

λ³€μˆ˜μ™€ κ·Έ λ³€μˆ˜μ— ν• λ‹Ήλœ λ³€μˆ˜λŠ” 값은 κ°™μ§€λ§Œ, ===

λ‹€λ₯Έ λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된 λ³„κ°œμ˜ κ°’μž„. 

=> λ³€μˆ˜ -> λ³€μˆ˜λ‘œ ν• λ‹Ή ν›„, ν•˜λ‚˜μ˜ λ³€μˆ˜μ˜ 값을 λ³€κ²½ ν–ˆμ„ λ•Œ : 각각 μ•„λ¬΄λŸ° 영ν–₯도 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€

 

'값에 μ˜ν•œ 전달' μ΄λž€ μš©μ–΄λŠ” JS μš©μ–΄λŠ” μ•„λ‹ˆλΌμ„œ ν—·κ°ˆλ¦¬μ§€ 말것. 

(λ³€μˆ˜μ™€ 같은 μ‹λ³„μžλŠ” 값이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•˜κ³  μžˆλ‹€)

 

πŸ“Œ κ²°λ‘ 

λ³€μˆ˜μ— μ›μ‹œκ°’μ„ κ°–λŠ” λ³€μˆ˜λ₯Ό ν• λ‹Ήν•˜λ©΄ => 두 λ³€μˆ˜μ˜ μ›μ‹œ 값은 μ„œλ‘œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된 λ³„κ°œμ˜ 값이 λ˜μ–΄, 

μ–΄λŠ ν•œμͺ½μ—μ„œ μž¬ν• λ‹Ήμ„ 톡해 값을 λ³€κ²½ν•˜λ”λΌλ„ μ„œλ‘œ κ°„μ„­ν•  수 μ—†λ‹€.!

 

 

 

 

 

πŸ₯ͺ 11.2 객체

 

객체 : ν”„λ‘œνΌν‹°μ˜ κ°œμˆ˜κ°€ μ •ν•΄μ Έ μžˆμ§€ μ•ŠμœΌλ©°, λ™μ μœΌλ‘œ μΆ”κ°€λ˜κ³  μ‚­μ œν•  수 μžˆλ‹€.

=> 확보할 λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 크기λ₯Ό 사전에 μ •ν•΄λ‘˜ 수 μ—†μŒ. 

(μ›μ‹œ κ°’κ³ΌλŠ” λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ λ™μž‘ν•¨)

=> ν•΄μ‹œ λΌλŠ” 곳에 μ£Όμ†Œλ₯Ό μ €μž₯

 

11.2.1 λ³€κ²½ κ°€λŠ₯ν•œ κ°’

 

κ°μ²΄λŠ” λ³€κ²½ κ°€λŠ₯ν•œ 겂. 

객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜ -> λ©”λͺ¨λ¦¬ 곡간에 μ ‘κ·Όν•˜λ©΄ 참쑰값에 μ ‘κ·Όν•  수 있음.

μ°Έμ‘°κ°’ : μƒμ„±λœ 객체가 μ €μž₯된 λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œ κ·Έ 자체

 

값을 ν• λ‹Ήν•˜λ©΄ λ³€μˆ˜λŠ” ~ 값을 κ°–λŠ”λ‹€, 값이 ~λ‹€ 라고 μ–˜κΈ°ν•˜μ§€λ§Œ,

객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜λŠ” 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλ‹€, 객체λ₯Ό 가리킀고 μžˆλ‹€ 라고 ν‘œν˜„ 

 

πŸ“Œ 객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜λŠ” μž¬ν• λ‹Ή 없이 객체λ₯Ό 직접 λ³€κ²½ν•  수 μžˆλ‹€

즉, ν”„λ‘œνΌν‹°λ₯Ό λ™μ μœΌλ‘œ μΆ”κ°€, κ°±μ‹ , μ‚­μ œ κ°€λŠ₯

(객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜μ˜ 참쑰값이 λ³€κ²½λ˜μ§€ μ•ŠμŒ. )

 

이유: λ©”λͺ¨λ¦¬μ˜ νš¨μœ¨μ„±κ³Ό μ„±λŠ₯을 μœ„ν•¨. 

 

단점 : μ›μ‹œκ°’κ³ΌλŠ” λ‹€λ₯΄κ²Œ μ—¬λŸ¬ 개의 μ‹λ³„μžκ°€ ν•˜λ‚˜μ˜ 객체λ₯Ό κ³΅μœ ν•  수 μžˆλ‹€λŠ” 것. 

 

πŸ“Œ 얕은 볡사 Shallow Copy & κΉŠμ€ 볡사 Deep Copy

얕은 볡사 Shallow Copy κΉŠμ€ 볡사 Deep Copy
- 객체에 μ€‘μ²©λœ 객체의 경우 참쑰값을 볡사 (λ©”λͺ¨λ¦¬ μ£Όμ†Œ)
- 객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜λ₯Ό λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” 것
- 객체에 μ€‘μ²©λœ κ°μ²΄κΉŒμ§€ λͺ¨λ‘ 볡사, μ›μ‹œ κ°’μ²˜λŸΌ μ™„μ „ν•œ 볡사본 λ§Œλ“¦
- μ›μ‹œκ°’μ„ ν• λ‹Ήν•œ λ³€μˆ˜λ₯Ό λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” 것

 

(λ°°μ—΄ 등을 가곡할 λ•Œ μ£Όμ˜ν•΄μ•Όν•¨.)

 

 

11.2.2 참쑰에 μ˜ν•œ 전달

 

참쑰에 μ˜ν•œ 전달 : 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” λ³€μˆ˜λ₯Ό λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ή -> μ°Έμ‘° 값이 λ³΅μ‚¬λ˜μ–΄ 전달됨

 

=> μ €μž₯된 λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” λ‹€λ₯΄μ§€λ§Œ λ™μΌν•œ μ°Έμ‘° 값이 λ“€μ–΄μžˆμŒ. 

=> 두 개의 μ‹λ³„μžκ°€ ν•˜λ‚˜μ˜ 객체λ₯Ό κ³΅μœ ν•œλ‹€λŠ” 것

=> 원본, 사본 쀑 ν•œμͺ½μ—μ„œ 객체λ₯Ό λ³€κ²½ν•˜λ©΄ μ„œλ‘œ 영ν–₯을 μ£Όκ³  λ°›μŒ..!!

 

 

πŸ“Œ μ—„λ°€νžˆ λ§ν•˜λ©΄ 값에 μ˜ν•œ 전달이든 참쑰에 μ˜ν•œ 전달이든

κ°–κ³  μžˆλŠ” μ£Όμ†Œ 값이 λ³΅μ‚¬λ˜λŠ” 건 λ™μΌν•˜κΈ° 떄문에

JSμ—μ„œλŠ” 값에 μ˜ν•œ μ „λ‹¬λ§Œ μ‘΄μž¬ν•œλ‹€κ³  ν•  수 있음. 

 

 

 

ν€΄μ¦ˆ λ§žμ·„μœΌλ©΄ μ΄ν•΄ν•œκ±°μž„. 

 

728x90
λ°˜μ‘ν˜•