πŸ“š 데이터 νƒ€μž… 두 가지

μ›μ‹œ νƒ€μž… (Primitive) μ°Έμ‘° νƒ€μž… (Reference)
number array
string object
boolean function
null RegExp
undefined  
symbol  

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„  두 κ°€μ§€μ˜ 데이터 νƒ€μž…μ΄ μ‘΄μž¬ν•œλ‹€.

μ›μ‹œ νƒ€μž…μ€ λ°μ΄ν„°μ˜ κ°€μž₯ μž‘μ€ λ‹¨μœ„λ‘œ 더 이상 μͺΌκ°œμ§ˆ 수 μ—†κ³ , ν•˜λ‚˜μ˜ λ°μ΄ν„°λ§Œμ„ 가진닀.

μ°Έμ‘° νƒ€μž…μ€ μ›μ‹œ νƒ€μž…μ„ λͺ¨μ•„λ‘” μ§‘ν•©μœΌλ‘œ μ›μ‹œ νƒ€μž…μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€λŠ” λͺ¨λ‘ μ°Έμ‘° νƒ€μž…μ΄λ‹€.

 

κ·Έλ ‡λ‹€λ©΄ λΆˆλ³€μ„±κ³Ό 가변성은 λ¬΄μ—‡μΌκΉŒ?

μ›μ‹œ νƒ€μž…μ€ λΆˆλ³€μ„±μ„ 띠고, μ°Έμ‘° νƒ€μž…μ€ 가변성을 띀닀.

μ•„λž˜μ—μ„œ μ•Œμ•„λ³΄μž.

 

 

 

 

 

πŸ“š λΆˆλ³€μ„±

λΆˆλ³€μ„±μ„ μ–˜κΈ°ν•˜κΈ° 전에 λ°μ΄ν„°μ˜ μ €μž₯ 방식을 μ‚΄νŽ΄λ³΄μž.

let a = 1;

λ³€μˆ˜ aλ₯Ό μ„ μ–Έν•˜κ³  1을 ν• λ‹Ήν–ˆλ‹€.

μ΄λ•Œ λ©”λͺ¨λ¦¬μ—λŠ” μ–΄λ–€ 일이 λ°œμƒν• κΉŒ?

 

aλ₯Ό μœ„ν•œ μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή 받은 ν›„ κ°’ 1을 μ €μž₯ν•  것이닀.

 

 

 

let a = 1;
a = 2;

이제 a에 μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜λ©΄ μ–΄λ–»κ²Œ 될까?

 

2λŠ” μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬μ— μ €μž₯되고, aλŠ” μƒˆλ‘­κ²Œ ν• λ‹Ή 받은 λ©”λͺ¨λ¦¬λ₯Ό κ°€λ¦¬ν‚€κ²Œ λœλ‹€.

a에 2λ₯Ό ν• λ‹Ήν•œλ‹€κ³  ν•΄μ„œ λ¨Όμ € ν• λ‹Ήλ˜μ—ˆλ˜ 1이 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

즉 이처럼 ν•œ 번 μƒμ„±λœ 값을 λ³€κ²½ν•  수 μ—†λŠ” 것을 λΆˆλ³€μ„±μ΄λΌκ³  ν•œλ‹€.

그럼 λͺ¨λ“  데이터가 λΆˆλ³€μ„±μΈ 걸까?

이제 가변성을 λ λŠ” 데이터 νƒ€μž…μ„ μ•Œμ•„λ³΄μž.

 

 

 

 

 

πŸ“šκ°€λ³€μ„±

가변성을 μ–˜κΈ°ν•˜κΈ° 전에 였브젝트 λ¨Όμ € μ‚΄νŽ΄λ³΄μž.

const obj = {
	name: haesa,
	age: 22,
};

λ³€μˆ˜ obj에 nameκ³Ό ageλ₯Ό key둜 가지고 μžˆλŠ” 였브젝트λ₯Ό ν• λ‹Ήν–ˆλ‹€.

λ©”λͺ¨λ¦¬μ—λŠ” μ–΄λ–€ 일이 λ°œμƒν• κΉŒ?

objμ—λŠ” 였브젝트의 κ°’ κ·Έ μžμ²΄κ°€ ν• λ‹Ήλ˜λŠ”κ²Œ μ•„λ‹ˆλΌ μ˜€λΈŒμ νŠΈκ°€ μ €μž₯된 λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œ, 즉 참쑰값이 ν• λ‹Ήλœλ‹€.

 

 

 

const obj = {
	name: haesa,
	age: 22,
};

const obj2 = obj;

 

μƒˆλ‘œμš΄ λ³€μˆ˜ obj2λ₯Ό μ„ μ–Έν•˜κ³  objλ₯Ό ν• λ‹Ήν•˜λ©΄ μ–΄λ–»κ²Œ 될까?

obj2μ—λŠ” objκ°€ 가지고 μžˆλŠ” 참쑰값이 λ³΅μ‚¬λœλ‹€.

 

μ—¬κΈ°μ„œ 였브젝트 μžμ²΄κ°€ λ³΅μ‚¬λœ ν›„, μƒˆλ‘œ μƒμ„±λœ 였브젝트의 μ£Όμ†Œκ°’μ΄ ν• λ‹Ήλ˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ 얕은 볡사λ₯Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

얕은 볡사(Shallow Copy)λŠ” 이전 κ²Œμ‹œκΈ€μ— μ •λ¦¬ν•΄λ’€μœΌλ‹ˆ μ°Έκ³ ν•˜λ©΄ 쒋을 것 κ°™λ‹€.

https://pd6156.tistory.com/252

 

→ μœ„ μ˜ˆμ œλ“€μ—μ„œ μ•Œμ•„λ΄€λ“―μ΄ λ³€μˆ˜μ— 였브젝트λ₯Ό ν• λ‹Ήν•˜λ©΄ 였브젝트의 값이 μ•„λ‹Œ κ·Έ 참쑰값이 ν• λ‹Ήλœλ‹€λŠ” κ±Έ μ•Œμ•„λ‘μž.

 

 

 

obj.age = 20;

이제 obj.age에 μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•΄λ³΄μž.

λ©”λͺ¨λ¦¬λŠ” μ–΄λ–»κ²Œ λ³€κ²½λ κΉŒ?

 

였브젝트의 ν”„λ‘œνΌν‹°μ— μƒˆλ‘œμš΄ 값이 ν• λ‹Ήλ˜λŠ” 경우, λ³€μˆ˜κ°€ 가진 μ°Έμ‘°κ°’μœΌλ‘œ μ˜€λΈŒμ νŠΈμ— μ ‘κ·Όν•œ ν›„ ν”„λ‘œνΌν‹°λ₯Ό λ³€κ²½ν•˜κ²Œ λœλ‹€.

μ›μ‹œ νƒ€μž…κ³ΌλŠ” 달리 μ°Έμ‘° νƒ€μž…μ€ 처음 μƒμ„±λœ 데이터가 λ³€κ²½λ˜μ—ˆλ‹€.

이와 같은 μ„±μ§ˆ λ•Œλ¬Έμ— μ°Έμ‘°ν˜• λ°μ΄ν„°λŠ” 가변성을 띠게 λœλ‹€.

 

 

 

 

 

'JS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JS] ES6+ 문법 정리  (0) 2022.07.01
[JS] Shallow Copy  (1) 2022.06.27
[JS] Getter와 Setter  (0) 2022.06.23
[JS] ν•¨μˆ˜μ™€ λ©”λͺ¨λ¦¬  (0) 2022.06.19
λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€!