λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 33가지 κ°œλ…

 

GitHub - yjs03057/33-js-concepts: λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 33가지 κ°œλ…

λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 33가지 κ°œλ…. Contribute to yjs03057/33-js-concepts development by creating an account on GitHub.

github.com

Javascript의 λ³€μˆ˜ νƒ€μž…

Javascript의 λ³€μˆ˜ νƒ€μž…μ—λŠ” 크게 Primitive type(μ›μ‹œ νƒ€μž…)κ³Ό Reference Type(μ°Έμ‘° νƒ€μž…)으둜 λ‚˜λˆ„μ–΄μ Έ μžˆμŠ΅λ‹ˆλ‹€.
μ›μ‹œ νƒ€μž…(Primitive type)의 λ³€μˆ˜λ“€μ€ 데이터 볡사가 일어날 λ•Œ λ©”λͺ¨λ¦¬ 곡간을 μƒˆλ‘œ ν™•λ³΄ν•˜μ—¬ 독립적인 값을 μ €μž₯ν•˜λ©°, μ°Έμ‘° νƒ€μž…(Reference Type)은 λ©”λͺ¨λ¦¬μ— 직접 접근이 μ•„λ‹Œ λ©”λͺ¨λ¦¬μ˜ μœ„μΉ˜(μ£Όμ†Œ)에 λŒ€ν•œ 간접적인 μ°Έμ‘°λ₯Ό 톡해 λ©”λͺ¨λ¦¬μ— μ ‘κ·Όν•˜λŠ” 데이터 νƒ€μž…μž…λ‹ˆλ‹€.

κ°’ νƒ€μž…(Value Type)

Javascriptμ—μ„œ μ›μ‹œ νƒ€μž… (String, Number, BigInt, Boolean, undefined, ES6λΆ€ν„° μΆ”κ°€λœ Symbol) 은 λ³€μˆ˜μ— 할당될 λ•Œ, λ©”λͺ¨λ¦¬μ˜ κ³ μ • 크기둜 μ›μ‹œ 값을 μ €μž₯ν•˜κ³  ν•΄λ‹Ή μ €μž₯된 값을 λ³€μˆ˜κ°€ μ§μ ‘μ μœΌλ‘œ κ°€λ¦¬ν‚€λŠ” ν˜•νƒœλ₯Ό λ±λ‹ˆλ‹€.
λ˜ν•œ, 값이 μ ˆλŒ€ λ³€ν•˜μ§€ μ•ŠλŠ” λΆˆλ³€μ„±μ„ κ°–κ³  있기 λ•Œλ¬Έμ— λ•Œλ¬Έμ— μž¬ν• λ‹Ή μ‹œ κΈ°μ‘΄ 값이 λ³€ν•˜λŠ” κ²ƒμ²˜λŸΌ 보일지 λͺ°λΌλ„ 사싀 μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬μ— μž¬ν• λ‹Ήν•œ 값이 μ €μž₯되고 λ³€μˆ˜κ°€ κ°€λ¦¬ν‚€λŠ” λ©”λͺ¨λ¦¬κ°€ λ‹¬λΌμ‘Œμ„ λΏμž…λ‹ˆλ‹€.

 

<예제 1>

let a = 100;
a = 50;

κ°’νƒ€μž… 예제 1

aλž€ λ³€μˆ˜μ— 100μ΄λž€ 값을 ν• λ‹Ήν•˜κ³  2번째 λΌμΈμ—μ„œ 50으둜 μž¬ν• λ‹Ήμ„ ν•΄μ€€ μ˜ˆμ‹œμž…λ‹ˆλ‹€.
첫 라인이 μ‹€ν–‰λ˜λ©΄ λ©”λͺ¨λ¦¬μ— Numberνƒ€μž…μ˜ 100μ΄λž€ 값이 μƒμ„±λ˜κ³  μ‹λ³„μž aλŠ” λ©”λͺ¨λ¦¬μ— μƒμ„±λœ 100의 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
κ·Έ ν›„ 두 번째 라인이 μ‹€ν–‰λ˜λ©΄ 이전 λ©”λͺ¨λ¦¬μ— μƒμ„±λœ 100μ΄λž€ 값이 50으둜 μˆ˜μ •λ˜λŠ” 것이 μ•„λ‹Œ, μƒˆλ‘œμš΄ Numberνƒ€μž…μ˜ 50μ΄λž€ 값을 μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬μ— μƒμ„±ν•˜κ³  aκ°€ κ°€λ¦¬ν‚€λ˜ λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œ 값이 λ°”λ€ŒλŠ” κ²ƒμž…λ‹ˆλ‹€.

즉, λ©”λͺ¨λ¦¬μ—λŠ” 100κ³Ό 50μ΄λž€ 값이 λͺ¨λ‘ μ‘΄μž¬ν•˜κ³  있으며, μ•žμ—μ„œ λ§ν–ˆλ“―μ΄ μ›μ‹œ νƒ€μž…μ€ λΆˆλ³€μ„±μ„ κ°–κ³  있기 λ•Œλ¬Έμ— 기쑴에 λ©”λͺ¨λ¦¬μ— μƒμ„±λœ 값듀은 κ·Έ μžμ²΄κ°€ 변경될 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
κ·Έμ € μ‹λ³„μžμ™€ μ—°κ²°λΌμžˆλŠ” λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œκ°€ λ°”λ€Œμ—ˆκΈ°μ— 우리 λˆˆμ—λŠ” 값이 μž¬ν• λ‹Ή 된 κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

<예제 2>

let a = 100;
let b = a;
a = 50;

console.log(b); // 100

κ°’νƒ€μž… 예제 2

μƒˆλ‘œμš΄ λ³€μˆ˜ b에 aλ₯Ό ν• λ‹Ήν•˜κ²Œ 되면 λ³€μˆ˜ b의 κ³΅κ°„μ—λŠ” a의 값을 값을 ν†΅μ§Έλ‘œ λ³΅μ‚¬ν•˜μ—¬ λ³€μˆ˜μ˜ λ©”λͺ¨λ¦¬μ— λ‹΄κ²Œ λ©λ‹ˆλ‹€.
그렇기에 λ³€μˆ˜ aκ°€ 50으둜 μž¬ν• λ‹Ή λ˜λ”λΌλ„ bλŠ” μ „ν˜€ 영ν–₯을 받지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ°Έμ‘° νƒ€μž…(Reference Type)

μ°Έμ‘° νƒ€μž…μ€ λ³€μˆ˜μ— ν• λ‹Ήν•  λ•Œ κ°’ νƒ€μž…μ²˜λŸΌ 값을 μ €μž₯ν•˜λŠ” 것이 μ•„λ‹Œ μ£Όμ†Œλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
λ³€μˆ˜λŠ” μ£Όμ†Œλ₯Ό μ €μž₯ν•˜κ³ , μ£Όμ†ŒλŠ” νŠΉλ³„ν•œ 동적인 데이터 보관함에 λ³΄κ΄€λ©λ‹ˆλ‹€.
이 보관함은 νž™(Heap)μž…λ‹ˆλ‹€. λ§Œμ•½, 값을 μž¬ν• λ‹Ή ν•  경우 μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•œ λͺ¨λ“  값이 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€.
즉, 값이 κ³΅μœ λ˜λŠ” νŠΉμ„±μ„ μ§€λ‹ˆκ³  μžˆμŠ΅λ‹ˆλ‹€.

  • Javascript에선 μ›μ‹œ μžλ£Œν˜•μ΄ μ•„λ‹Œ λͺ¨λ“  것은 μ°Έμ‘° μžλ£Œν˜•μž…λ‹ˆλ‹€.
  • μ°Έμ‘°ν˜•μ€ μ›μ‹œν˜• λ°μ΄ν„°μ˜ μ§‘ν•©μž…λ‹ˆλ‹€.
    λ°°μ—΄([])κ³Ό 객체({}), ν•¨μˆ˜(function(){})κ°€ λŒ€ν‘œμ μž…λ‹ˆλ‹€.
  • μ°Έμ‘° μžλ£Œν˜•μ€ 기쑴에 κ³ μ •λœ 크기의 보관함이 μ•„λ‹™λ‹ˆλ‹€.
    μ°Έμ‘° μžλ£Œν˜•μ„ λ³€μˆ˜μ— ν• λ‹Ήν•  λ•ŒλŠ” λ³€μˆ˜μ— 값이 μ•„λ‹Œ μ£Όμ†Œλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  • λ™μ μœΌλ‘œ 크기가 λ³€ν•˜λŠ” 데이터λ₯Ό λ³΄κ΄€ν•˜κΈ° μœ„ν•΄ λ³€μˆ˜κ°€ μ•„λ‹Œ λ‹€λ₯Έ 곳에 데이터λ₯Ό μ €μž₯ν•˜κ³  λ³€μˆ˜μ—λŠ” κ·Έ μ£Όμ†Œλ§Œ ν• λ‹Ήλ©λ‹ˆλ‹€.
  • λ°°μ—΄(Array) - [0,1,2,3,4]
  • 객체(Object) - {name : 'goong', age : 26}

즉, λ³€μˆ˜μ—λŠ” ν•˜λ‚˜μ˜ κ°’ ν˜Ήμ€ μ£Όμ†Œλ§Œ μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

<예제>

let obj = {
  a: 1,
  b: 2,
  c: 3
};

let newObj = obj;

newObj.a = 100; // a에 κ°’ 100을 μž¬ν• λ‹Ή

console.log(obj.a); // 100
console.log(newObj.a); // 100
// 두 κ°μ²΄λŠ” λ™μΌν•œ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•˜κΈ° λ•Œλ¬Έμ— a값이 λ°”λ€Œκ²Œ 되고 λ°˜ν™˜λ˜λŠ” a의 값이 λ‘˜ λ‹€ 변경됨.

Summary

  • κ°’ νƒ€μž…(Value Type)
    • 값에 μ˜ν•œ 전달
    • μ›μ‹œ νƒ€μž… 값을 κ·ΈλŒ€λ‘œ λ³΅μ‚¬ν•˜λ©° 데이터λ₯Ό 바꿔도 λ‹€λ₯Έ 데이터에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŒ
  • μ°Έμ‘° νƒ€μž…(Reference Type)
    • 참쑰에 μ˜ν•œ 전달
    • μ›μ‹œ νƒ€μž…μ„ μ œμ™Έν•œ λͺ¨λ“  μ°Έμ‘° νƒ€μž…
    • 객체의 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν•˜λ©° 데이터λ₯Ό λ°”κΎΈλ©΄ μ°Έμ‘°ν•˜λŠ” λͺ¨λ‘μ—κ²Œ 영ν–₯을 λ―ΈμΉ¨

References

 

[Java Script] μ›μ‹œνƒ€μž…κ³Ό μ°Έμ‘°νƒ€μž… πŸ‘€

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œμ˜ λ³΅μ‚¬λŠ” 얕은 볡사(shallow)와 κΉŠμ€λ³΅μ‚¬ (deep)으둜 λ‚˜λ‰œλ‹€. λ¨Όμ € μ›μ‹œ νƒ€μž…(Primitive type)의 λ³€μˆ˜λ“€μ€ 데이터 볡사가 일어날 λ•Œ λ©”λͺ¨λ¦¬ 곡간을 μƒˆλ‘œ ν™•λ³΄ν•˜μ—¬ 독립적인 값을 μ €μž₯

velog.io

 

JavaScript μ›μ‹œνƒ€μž… & μ°Έμ‘°νƒ€μž…(Primitive & Reference)

JavsScript μ›μ‹œνƒ€μž… & μ°Έμ‘°νƒ€μž…(Primitive & Reference)  : κΈ°λ³Έμžλ£Œν˜•μ— λŒ€ν•΄μ„œ 이전에 μ •λ¦¬ν–ˆλ˜ 뢀뢄에 λŒ€ν•΄μ„œ μΆ”κ°€ 정리λ₯Ό ν•˜κ² μŠ΅λ‹ˆλ‹€. μžλ£Œν˜•μ€ 크게 μ›μ‹œνƒ€μž…κ³Ό μ°Έμ‘°νƒ€μž…μœΌλ‘œ λ‚˜λ‰©λ‹ˆλ‹€. 2020/12/13 - [J

comp-jae.tistory.com

 

λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€!