Javascript 곡뢀

11. μ›μ‹œ νƒ€μž…κ³Ό 객체 νƒ€μž…μ˜ 차이(μ½œμŠ€νƒκ³Ό νž™)

tnqlscho 95 2023. 7. 13. 23:48

πŸ‘€  μ›μ‹œ νƒ€μž…κ³Ό 객체 νƒ€μž…μ˜ 차이

μ›μ‹œ νƒ€μž…μ€ 값을 콜 μŠ€νƒμ— μ €μž₯

객체 νƒ€μž…μ€ 값을 νž™μ— μ €μž₯

 

객체 νƒ€μž…μ€ μ½œμŠ€νƒμ˜ value에 κ°μ²΄κ°€ μ•„λ‹Œ νž™μ— μ €μž₯된 λ©”λͺ¨λ¦¬μ£Όμ†Œλ₯Ό μ €μž₯ν•œλ‹€.


μ’€ 더 μ‰½κ²Œ ν’€κΈ° (24.01 μΆ”κ°€)

 

λΉ„νŠΈ(bit)λŠ” 0κ³Ό 1둜 ν‘œν˜„ν•  수 있고 고유의 μ‹λ³„μžλ‘œ μœ„μΉ˜λ₯Ό μ•Œ 수 μžˆλ‹€.

쒀더 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ λΉ„νŠΈλ₯Ό μ λ‹Ήν•œ 묢음으둜 κ΄€λ¦¬ν•œκ²Œ λ°”μ΄νŠΈ(byte).

 

1λ°”μ΄νŠΈμ—λŠ” 8개의 λΉ„νŠΈλ‘œ λ¬Άμ—¬μžˆλ‹€.

그리고 1λΉ„νŠΈλŠ” 0,1 λ‘κ°€μ§€λ‘œ ν‘œν˜„ν•  수 있기 λ•Œλ¬Έμ—

256개(2의 8승)값을 ν‘œν˜„ν•  수 μžˆλ‹€.

 

λͺ¨λ“  λ°μ΄ν„°λŠ” μ΄λ ‡κ²Œ λ°”μ΄νŠΈ λ‹¨μœ„μ˜ μ‹λ³„μžμΈ λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°’μ„ ν†΅ν•΄μ„œ κ΅¬λΆ„ν•˜κ³  μ—°κ²°ν•œλ‹€.

 

μ›μ‹œ νƒ€μž… : number, string, boolean, undefined, null, symbol

μ°Έμ‘° νƒ€μž… : array, function, data, RegExp, Map, WeekMap, Set, WeekSet

 

곡톡점:

두 νƒ€μž… λ‹€ λ³€μˆ˜μ˜ 값에 ν• λ‹Ήν•œ 값이 μ €μž₯된 데이터 κ³΅κ°„μ˜ μ£Όμ†Œκ°’μ„ λ³΅μ œν•œλ‹€.

 

λ‹€λ₯Έμ :

μ›μ‹œ νƒ€μž…μ€ ν• λ‹Ήλœ 값이 μ €μž₯된 데이터 κ³΅κ°„μ˜ μ£Όμ†Œκ°’μ„ λ°”λ‘œ λ³΅μ œν•˜λŠ” 것이고,

μ°Έμ‘° νƒ€μž…μ€ ν• λ‹Ήλœ ν”„λ‘œνΌν‹° 값듀이 μ €μž₯된 데이터 κ³΅κ°„μ˜ μ£Όμ†Œκ°’λ“€μ„ λ¬ΆμŒμ„ λ°”λΌλ³΄λŠ” μ£Όμ†Œκ°’μ„ λ³΅μ œν•˜λŠ” 것.


πŸ‘€  μ›μ‹œ νƒ€μž…κ³Ό 객체 νƒ€μž…μ˜ 차이 μ˜ˆμ‹œ - λΆˆλ³€κ°’κ³Ό κ°€λ³€κ°’

let age = 35;
let oldAge = age;
age = 36;

console.log(age); //35
console.log(oldAge); //36

const me = {
	name : ‘Kyle’,
	age : 35
};

const friend = me;
friend.age = 33;

console.log(friend); //{ name : ‘Kyle’, age : 33 }
console.log(me); //{ name : ‘Kyle’, age : 33 }

Age와 oldAgeλ₯Ό μ›μ‹œνƒ€μž… Number둜 ν• λ‹Ήμ„ ν–ˆλ‹€λ©΄, 그리고 같은 숫자 35λ₯Ό 할당을 ν–ˆλ‹€λ©΄!

이미 λ³€μˆ˜ ageμ—μ„œ 35κ°€ 별도 λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯λ˜μ–΄ 있기 λ•Œλ¬Έμ— κ·Έ 값을 μž¬ν™œμš©ν•΄μ„œ

oldAge에 age와 같은 λ©”λͺ¨λ¦¬μ£Όμ†Œλ₯Ό λ³€μˆ˜κ°’μœΌλ‘œ μ €μž₯ν•œλ‹€.

κ·Έλž˜μ„œ 두 λ³€μˆ˜ μ „λΆ€ κ°™μ€ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°€μ§€κ³ μžˆλ‹€.

κ·Έλž˜μ„œ κ·Έ λ©”λͺ¨λ¦¬μ•ˆμ— λ“€μ–΄μžˆλŠ” value35κ°€ μ°νžŒλ‹€.

 

λ§Œμ•½ μ΄λ•Œ age의 valueλ₯Ό 36으둜 λ³€κ²½ν•˜κ²Œ 되면

λ³„λ„μ˜ 데이터 λ©”λͺ¨λ¦¬ 곡간에 36의 값이 μ—†κΈ°λ•Œλ¬Έμ— 0002의 곡간을 λ§Œλ“€μ–΄μ„œ 36을 μ €μž₯ν•œλ‹€.

κ·Έλž˜μ„œ λ³€μˆ˜ age값에 μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬μ£Όμ†Œ 0002λ₯Ό ν• λ‹Ήν•œλ‹€.

μ΄λ•ŒλŠ” 값이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— μ„œλ‘œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 바라보고 μžˆλ‹€λŠ”κ²ƒμ„ 확인할 수 μžˆλ‹€.

 

λ”°λΌμ„œ λ³€μˆ˜μ˜ 할당값을 λ³€κ²½ν–ˆμ„λ•Œ 기쑴에 바라보고 있던 μ£Όμ†Œμ˜ 값을 λ³€κ²½ν•˜λŠ”κ²Œ μ•„λ‹Œ

데이터 곡간에 λ³€κ²½ν•œ 값이 μžˆλŠ”μ§€ 찾은 ν›„ 있으면 κ·Έ μ£Όμ†Œκ°’μœΌλ‘œ λ³€μˆ˜μ˜ 값에 μ €μž₯ν•˜κ³ 

μ—†μœΌλ©΄ λ‹€λ₯Έ 데이터 곡간에 할당값을 μ €μž₯ν•˜κ³  κ·Έ μ£Όμ†Œκ°’μ„ λ³€μˆ˜μ˜ 값에 μ €μž₯ν•˜κΈ° λ•Œλ¬Έ

에 λΆˆλ³€μ„±μ„ κ°–λŠ”λ‹€κ³  ν•œλ‹€.

μ΄λ ‡κ²Œ μ›μ‹œ νƒ€μž…μ€ λΆˆλ³€μ„±μ„ κ°–λŠ”λ‹€!

 

객체 νƒ€μž…μœΌλ‘œ μ„ μ–Έν•˜λ©΄ μ›μ‹œν˜•κ³ΌλŠ” 쑰금 λ‹€λ₯΄λ‹€.

 

객체의 λ³€μˆ˜(ν”„λ‘œνΌν‹°) μ˜μ—­μ΄ λ”°λ‘œ μ‘΄μž¬ν•œλ‹€.

 

meλΌλŠ” λ³€μˆ˜μ— name,age ν•­λͺ©μ΄ λ‹΄κΈ΄ 객체λ₯Ό μ„ μ–Έν•΄μ„œ μ €μž₯을 ν•΄μ£ΌλŠ”λ°

μ½œμŠ€νƒμ˜ valueμ—λŠ” 객체λ₯Ό μ €μž₯ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ νž™μ— μ €μž₯λ˜μ–΄ μžˆλŠ” 객체의 μ£Όμ†Œκ°’μ„ μ €μž₯ν•œλ‹€.

(보톡 객체듀은 νž™μ— μ €μž₯을 ν•œλ‹€.)

그리고 κ·Έ μ£Όμ†Œλ₯Ό λ©”λͺ¨λ¦¬μ£Όμ†Œμ— μ—°κ²°μ‹œμΌœμ„œ μ½œμŠ€νƒμ—μ„œλŠ” νž™μ˜ ν•΄λ‹Ή κ°μ²΄μ£Όμ†Œλ₯Ό λ°”λΌλ³΄λŠ”κ²ƒ.

λ§Œμ•½μ— me객체의 age값을 33으둜 λ°”κΎΈλ©΄ μ–΄λ–»κ²Œ 될까?

me의 ageκ°’λ§Œ 33으둜 변경해도 me와 friend μ „λΆ€ 같은 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 바라보고

μžˆκΈ°λ•Œλ¬Έμ— 두 λ³€μˆ˜μ˜ 객체 λͺ¨λ‘ age값이 33으둜 λ³€ν•˜κ²Œλœλ‹€.

이것이 λ°”λ‘œ 객체의 얕은 볡사!

 

μœ„μ˜ 그림처럼 얕은 λ³΅μ‚¬(Shallow Copy)λž€ 객체λ₯Ό 볡사할 λ•Œ

원본 κ°’κ³Ό λ³΅μ‚¬λœ 값이 같은 μ°Έμ‘°(=λ©”λͺ¨λ¦¬ μ£Όμ†Œ)λ₯Ό κ°€λ¦¬ν‚€λŠ” 것이닀.

얕은 λ³΅μ‚¬μ˜ μ£Όμ˜ν•  점은 μ›λ³Έμ˜ λΆˆλ³€μ„±μ„ μ§€μΌœμ€˜μ•Ό λœλ‹€λŠ”κ²ƒ!!(μ€‘μš”)

λΆˆλ³€μ„±μ„ μ§€μΌœμ£Όμ§€ λͺ»ν•˜λ©΄  λ‹€λ₯Έ 순수 ν•¨μˆ˜μ—λ„ 영ν–₯을 λ―ΈμΉœλ‹€.

 

λ°˜λŒ€λ‘œ 객체의 κΉŠμ€ λ³΅μ‚¬λŠ” μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간을 확보해 μ™„μ „νžˆ λ³΅μ‚¬ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

κ·Έλž˜μ„œ λ³΅μ‚¬ν•œ 객체의 값을 변경해도 μ›λ³Έκ³ΌλŠ” λ‹€λ₯Έ λ©”λͺ¨λ¦¬ 곡간을 바라보고 μžˆκΈ°λ•Œλ¬Έμ—

μ›λ³Έκ°μ²΄λŠ” λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

 

객체의 얕은 λ³΅μ‚¬λŠ” Object.assign()을 μ‚¬μš©ν•˜κ³ 

객체의 κΉŠμ€ λ³΅μ‚¬λŠ” lodash JS라이브러리의 clonedeep을 μ‚¬μš©ν•˜λŠ”κ²ƒλ„ 방법쀑 ν•˜λ‚˜!