ECMAScript6(ES6)λ 7κ°μ λ°μ΄ν° νμ
(number, string, boolean, undefined, null, symbol, object)μ μ 곡νλ€.
μ΄λ ν¬κ² μμ νμ
(primitive type)
κ³Ό κ°μ²΄ νμ
(object/reference type)
μΌλ‘ ꡬλΆν μ μλ€.
μλ°μ€ν¬λ¦½νΈ μμ νμ (Primitive Type)
κ°μ λ³κ²½μ΄ λΆκ°λ₯ν κ°(Immutable Value)
- λ³μμ ν λΉλ κ°μ λ μ΄μ λ³κ²½μ΄ λ μ μλ€!! μ¬κΈ°μ μ€μν ν¬μΈνΈλ μμ κ° μ체λ₯Ό λ³κ²½ν μ μλ€λ κ²μ΄μ§ λ³μ κ°μ λ³κ²½ν μ μλ€λ κ²μ΄ μλλ€.
number, string, boolean, undefined, null, symbol
νμ μ΄ μ΄μ ν΄λΉλλ€.
μλ°μ€ν¬λ¦½νΈμ κ°μ²΄ νμ (Object Type)
κ°μ λ³κ²½μ΄ κ°λ₯ν κ°(Mutable Value)
- λ³μμ ν λΉλ κ°μ μμ ν μ μλ€!
object
νμ μ΄ μ΄μ ν΄λΉλλ€.
κ° μλ£νμ νΉμ§μ μ‘°κΈ λ κΉκ² μ΄ν΄νκΈ° μν΄ λ©λͺ¨λ¦¬ μΈ‘λ©΄μμ μκ°ν΄λ³΄μ.
λ³μμ κ°μ 볡μ¬ν λ, λ©λͺ¨λ¦¬μμλ μ΄λ€ μΌμ΄ μΌμ΄λ κΉ?
μ΄ κ°λ
μμ μ€μν ν¬μΈνΈλ λ³μμμ λ³μλ‘ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό λ겨μ€λ€λ μ
μ΄λ€.
μ΄ κ°λ μ κΈ°μ΄νμ¬ μλ°μ€ν¬λ¦½νΈμ μμ κ°κ³Ό κ°μ²΄μ νΉμ§μ 곡λΆν΄λ³΄μ.
μμ κ°, Immutable
var score = 80;
var copy = score;
console.log(score); // 80
console.log(copy); // 80
score = 100;
console.log(score); // 100
console.log(copy); // 80
copy = score
ꡬ문μ μ€νν λ λ€μ λ λ°©μμΌλ‘ ν΄μμ΄ κ°λ₯νλ€.
1. μλ‘μ΄ 80μ μμ±ν΄μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ λ¬. λ λ³μκ° κΈ°μ΅νλ λ©λͺ¨λ¦¬ μ£Όμκ° λ€λ₯΄λ€.
2. scoreμ κ°μΈ 80μ μ£Όμλ₯Ό κ·Έλλ‘ copyμ μ λ¬. λ λ³μκ° κΈ°μ΅νλ λ©λͺ¨λ¦¬ μ£Όμκ° κ°λ€. νμ΄μ¬μ μ΄ λ°©μμ μ μ©νλ€.
MDN λ¬Έμλ₯Ό νμΈν΄λ³΄λ©΄ μλ°μ€ν¬λ¦½νΈμ μμ κ°μ 1λ² λ°©μμ μ±ννκ³ μλ€λ κ²μ νμΈν μ μλ€.
μλ‘κ² μμ±λ μμ κ°μ μ£Όμλ₯Ό μ μ₯νκ³ μ΄ μ£Όμλ₯Ό ν΅ν΄ κ°μ μ κ·Όνκ² λλ€.
κ°μ²΄, Mutable
var person = {
name: 'Lee'
};
// μ°Έμ‘° κ°μ 볡μ¬(μμ 볡μ¬)
var copy = person
copy = person
ꡬ문μ μ€ννκ² λλ©΄ λ λ³μλ κ°μ μ£Όμμ μ μ₯λ κ°μ κ°λ¦¬ν¨λ€.
personμ copyμκ² μμ±λ κ°μ²΄μ μ£Όμ
λ₯Ό λ겨쀬기 λλ¬Έμ΄λ€.
κ²°κ³Όμ μΌλ‘ copyμ personμ κ°μ΄ λ³κ²½λ λ μλ‘κ° μλ‘μκ² μν₯μ μ£Όκ² λλ€.
λ§λ¬΄λ¦¬
μ΄ λ¨λ½μ ν΅μ¬μ μμ κ°
μ κ°μ 볡μ¬νμ¬ μ£Όμ κ°μ λ겨주기 λλ¬Έμ μλ‘ κ°μν μ μλ€λ μ
, κ°μ²΄
λ μ£Όμ κ°μ λ겨주기 λλ¬Έμ μλ‘ μν₯μ μ£Όκ³ λ°μ μ μλ€λ μ
μ΄λ€.
λ λ°μ΄ν° νμ μ μ°¨μ΄λ₯Ό λͺ νν μ΄ν΄νλ€λ©΄ λͺ©μ μ λ§κ² μ ννμ¬ μ°©μ€ μμ΄ κ°λ°μ μ§νν μ μμ κ² κ°λ€π₯
Reference
https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures#κΈ°λ³Έ_νμ
_primitive_value
https://developer.mozilla.org/ko/docs/Glossary/Primitive
https://www.geeksforgeeks.org/call-by-value-vs-call-by-reference-in-javascript/
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive 11μ₯ μμ κ°κ³Ό κ°μ²΄μ λΉκ΅
'Languages > JavaScript π' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JS] μλ°μ€ν¬λ¦½νΈ ν¨μλ₯Ό λ³μμ ν λΉν μ μλ μ΄μ (0) | 2021.12.07 |
---|---|
[JS] λ³μ νΈμ΄μ€ν (Hoisting)μ λνμ¬ (0) | 2020.02.19 |