πΎ μμ νμ (primitive type)
- λ³μμ ν λΉμ λ©λͺ¨λ¦¬ 곡κ°μ κ° μμ²΄κ° μ μ₯λλ€.
- μμ κ°μ κ°λ λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉνλ©΄ μμ κ° μμ²΄κ° λ³΅μ¬λμ΄ μ λ¬λλ€. (pass-by-value)
→ μλ³Έμ λ³κ²½ν΄λ 볡μ¬λ³Έμ μν₯μ λ―ΈμΉμ§ μλλ€. - μμ κ°μ Immutable value(λ³κ²½ λΆκ°λ₯ν κ°). μ¦, ν λ² μμ±λ μμ μλ£νμ μ½κΈ° μ μ©(read only) κ°μ΄λ€.
→ λ³μμ λ€λ₯Έ κ°μ μ¬ν λΉμ μλ‘μ΄ μμκ°μ΄ μμ±λλ©°, λ³μκ° λ€λ₯Έ λ©λͺ¨λ¦¬ 곡κ°μ μ°Έμ‘°νλ€. κ·Έλ¦¬κ³ κΈ°μ‘΄μ μ¬μ©νμ§ μλ κ°μ μλμΌλ‘ λ©λͺ¨λ¦¬μμ μμ λλ€. (JavaScriptμ κ°λΉμ§ μ½λ ν°(garbage collector) μλ)
πΎ κ°μ²΄ νμ (object/reference type)
- λ³μμ ν λΉμ μ μ₯ 곡κ°μ μ°Έμ‘°ν μ μλ μ£Όμκ°(address)μ΄ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λλ€.
→ μ΄λ μ°Έμ‘° μλ£νμ μ μ₯νλ 곡κ°μ ν(heap)μ΄λΌκ³ νλ€. - μ°Έμ‘° κ°μ κ°λ λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉνλ©΄ μ£Όμκ°μ΄ 볡μ¬λμ΄ μ λ¬λλ€. (Pass-by-reference)
→ κ°μ μ£Όμλ₯Ό μ°Έμ‘°νκΈ° λλ¬Έμ μλ³Έμ λ³κ²½νλ©΄ 볡μ¬λ³Έλ μν₯μ λ°λλ€. κ·Έλ κΈ° λλ¬Έμ λ λ³μλ κ°μ μ£Όμλ₯Ό μ°Έμ‘°νκ³ μμ λΏ κ° μμ²΄κ° λ³΅μ¬λμλ€κ³ ν μ μλ€. - μ°Έμ‘° κ°μ Mutable value(λ³κ²½ κ°λ₯ν κ°)
πΎ MORE π₯³
1. λ¬Έμμ΄μ immutableν κ°μ΄κΈ° λλ¬Έμ μμ±λ λ¬Έμμ΄μ μΌλΆ λ¬Έμλ₯Ό λ³κ²½ν μ μλ€.
• λ¬Έμμ΄μ ν λ² μμ±λλ©΄, λ³κ²½ν μ μλ€.
let str = "Hello";
str = "JavaScript";
→ 첫λ²μ§Έ κ΅¬λ¬Έμ΄ μ€νλλ©΄ λ©λͺ¨λ¦¬μ λ¬Έμμ΄ "Hello"κ° μμ±λκ³ μλ³μ strμ λ©λͺ¨λ¦¬μ μμ±λ λ¬Έμμ΄ "Hello"μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό κ°λ¦¬ν¨λ€. λλ²μ§Έ κ΅¬λ¬Έμ΄ μ€νλλ©΄ μ΄μ μ μμ±λ λ¬Έμμ΄ "Hello"λ₯Ό μμ νλ κ²μ΄ μλλΌ μλ‘μ΄ λ¬Έμμ΄ "JavaScript"λ₯Ό λ©λͺ¨λ¦¬μ μμ±νκ³ μλ³μ strμ μ΄κ²μ κ°λ¦¬ν¨λ€. μ΄λ λ¬Έμμ΄ "Hello"μ "JavaScript"λ λͺ¨λ λ©λͺ¨λ¦¬μ μ‘΄μ¬νκ³ μλ€. λ³μ strμ λ¬Έμμ΄ "Hello"λ₯Ό κ°λ¦¬ν€κ³ μλ€κ° λ¬Έμμ΄ "JavaScript"λ₯Ό κ°λ¦¬ν€λλ‘ λ³κ²½λμμ λΏμ΄λ€.
• λ¬Έμμ΄μ λ°°μ΄μ²λΌ μΈλ±μ€λ₯Ό ν΅ν΄ μ κ·Όν μ μλ μ μ¬λ°°μ΄μ΄λ€.
let str = "JavaScript";
for (let i = 0; i < str.length; i++) {
console.log(str[i]);
}
str[6] = 's';
console.log(str); // JavaScript
→ str[6] = 's'
μ²λΌ μ΄λ―Έ μμ±λ λ¬Έμμ μΌλΆλ₯Ό λ³κ²½ν μ μλ€. (read only κ°μ΄λ©°, immutable νλ€.)
• μλ‘μ΄ λ¬Έμμ΄μ μ¬ν λΉ νλ κ²μ κ°λ₯νλ€.
let str = "JavaScript";
console.log(str) // JavaScript
str = "Hello, world";
console.log(str) // Hello, world
str = str.toUpperCase();
console.log(str) // HELLO, WORLD
2. Pass-by-referenceμ Pass-by-value
• Pass-by-reference
κ°μ²΄ νμ μ κ°μ²΄μ λͺ¨λ μ°μ°μ΄ μ€μ κ°μ΄ μλ μ°Έμ‘°κ°μΌλ‘ μ²λ¦¬λλ€. κ°μ²΄ νμ μ νλ‘νΌν°λ₯Ό λ³κ²½, μΆκ°, μμ κ° κ°λ₯ν mutableν κ°μ΄λ€. λμ μΌλ‘ λ³νν μ μμΌλ―λ‘ μ΄λ μ λμ λ©λͺ¨λ¦¬ 곡κ°μ ν보ν΄μΌ νλμ§ μμΈ‘ν μ μκΈ° λλ¬Έμ λ°νμμ λ©λͺ¨λ¦¬ 곡κ°μ ν보νκ³ λ©λͺ¨λ¦¬μ ν μμ(Heap Segment)μ μ μ₯λλ€.
λ³μ aμ bλ₯Ό ν λΉμ κ°μ²΄λ 볡μ¬λμ§ μκ³ , μ°Έμ‘°(Reference) λ°©μμΌλ‘ μ λ¬λλ€.
// Pass-by-reference
let obj = { num: 100 }
let copy = obj;
console.log(obj.num, copy.num) // 100 100
console.log(obj === copy) // true
copy.num = 200;
console.log(obj.num, copy.num) // 200 200
console.log(obj === copy) // true
→ λ³μ objλ κ°μ²΄ μμ²΄κ° μλ μμ±λ κ°μ²΄μ μ°Έμ‘°κ°μ μ μ₯νκ³ μκΈ° λλ¬Έμ λ³μ copyμλ κ°μ μ°Έμ‘°κ°μ΄ μ μ₯λλ€. λ°λΌμ μ°Έμ‘°νκ³ μλ κ°μ²΄μ num κ°μ΄ λ³κ²½λλ©΄ λ³μ obj, copy λͺ¨λ λ³κ²½λ κ°μ μ°Έμ‘°νκ² λλ€.
let obj = { num: 100 };
let obj2 = { num: 100 };
console.log (obj === obj2) // false
→ objμ obj2λ λ΄μ©μ κ°μ§λ§ λ³κ°μ κ°μ²΄λ₯Ό μμ±νμ¬ μ°Έμ‘°κ°μ ν λΉνκΈ° λλ¬Έμ λ λ³μμ μ°Έμ‘°κ°μ κ°μ§ μλ€.
• Pass-by-value
μμ νμ μ κ°(value)μΌλ‘ μ λ¬λλ€. μ¦, 볡μ¬λμ΄ μ λ¬λλ©° μ΄λ₯Ό pass-by-value(κ°μ μν μ λ¬)λΌ νλ€.
// Pass-by-value
let a = 1;
let b = a;
console.log(a, b); // 1 1
console.log(a === b); // true
a = 10;
console.log(a, b); // 10 1
console.log(a === b); // false
→ λ³μ aλ μμ νμ μΈ μ«μ νμ 1μ μ μ₯νκ³ μμΌλ©°, μμ νμ μ κ°μ΄ 볡μ¬λμ΄ λ³μμ μ μ₯λλ€. κ·Έλ κΈ° λλ¬Έμ λ³μ bμ λ³μ aλ₯Ό ν λΉν κ²½μ°, λ³μ aμ κ° 1μ΄ λ³΅μ¬λμ΄ λ³μ bμ μ μ₯λλ€.
μλ£μΆμ²: poiemaweb
βοΈ κ³΅λΆνλ©° μ 리ν λ΄μ©μ λλ€. μλͺ»λ μ 보λ λ 곡μ ν λ΄μ©μ΄ μμΌλ©΄ λκΈλ‘ μλ €μ£ΌμΈμ!
μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€ π
'Frontend Dev > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λν΄νΈ 맀κ°λ³μμ λλ¨Έμ§ λ§€κ°λ³μ (with arguments κ°μ²΄) (0) | 2023.05.07 |
---|---|
ν¨μμ 맀κ°λ³μ(parameter)μ μΈμ(argument μ λ¬μΈμ) (0) | 2023.05.07 |
μλ°μ€ν¬λ¦½νΈμ μλ£ν (data type) (0) | 2023.05.02 |
μλ°μ€ν¬λ¦½νΈ ES6 νμ΄ν ν¨μ κΈ°λ³Έ (0) | 2023.05.02 |
μλ°μ€ν¬λ¦½νΈ λ°ν(return)λ¬Έ μ¬μ©νκΈ° (0) | 2023.04.23 |