π μμ νμ ? κ°μ²΄ νμ ?
μλ°μ€ν¬λ¦½νΈκ° μ 곡νλ 7κ°μ§ λ°μ΄ν° νμ λ€μ ν¬κ²
μμ νμ primitive typeκ³Ό κ°μ²΄ νμ object/reference typeμΌλ‘ ꡬλΆν μ μλ€.
π μμ νμ κ³Ό κ°μ²΄ νμ νΉμ§
π‘ μμ νμ primitive type νΉμ§
01 μμ κ°μ "λ³κ²½ λΆκ°λ₯"ν κ°μ΄λ€. --> immutable value --> λ°μ΄ν°μ μ λ’°μ±μ 보μ₯νλ€.
02 μμ κ°μ λ³μμ ν λΉνλ©΄, λ³μ (ν보λ λ©λͺ¨λ¦¬ 곡κ°) μλ μ€μ κ°μ΄ μ μ₯λλ€.
μμ κ°μ΄ λ³νμ§ μλ 건 μ¬μ€μ΄μ§λ§, λ³μμ μ μ₯λ μμ κ°μ μ¬ν λΉμ ν΅ν΄ μλ‘μ΄ κ°μ μ€ μ μλ€.
κ·Έλ¬λ μ΄ κ²½μ°λ μλ λ³μμ ν λΉλ μμ κ°μ μλ‘μ΄ κ°μΌλ‘ κ΅μ²΄νλ κ²μ΄ μλλΌ,
λ³μκ° μ°Έμ‘°νλ λ©λͺ¨λ¦¬ 곡κ°μ μ£Όμλ₯Ό λ³κ²½ν΄ μλ‘κ² ν λΉλ κ°μ μ μ₯νλ λ°©μμΌλ‘ λμνλ€.
--> μ΄λ¬ν νΉμ±μ 'λΆλ³μ±'immutabilityλΌ νλ€.
--> μμ κ°μ ν λΉν λ³μλ μ¬ν λΉ μ΄μΈμ λ³μ κ°μ λ³κ²½ν μ μλ λ°©λ²μ μλ€.
const ν€μλλ₯Ό μ¬μ©ν΄ μ μΈν λ³μλ μ¬ν λΉμ΄ κΈμ§λλ€. μμλ μ¬ν λΉμ΄ κΈμ§λ λ³μμΌ λΏμ΄λ€.
const o = {};
// const ν€μλλ₯Ό μ¬μ©ν΄ μ μΈν λ³μμ ν λΉν μμ κ°μ λ³κ²½ν μ μλ€.
// νμ§λ§ !! const ν€μλλ₯Ό μ¬μ©ν΄ μ μΈν λ³μμ μ°Έμ‘° κ°(ex.κ°μ²΄)μ λ³κ²½ν μ μλ€.
o.a = 1;
console.log(o); // {a: 1}
π μλ°μ€ν¬λ¦½νΈμ λ¬Έμμ΄ νΉμ§
λ¬Έμμ΄μ 0κ° μ΄μμ 'λ¬Έμ'λ‘ μ΄λ€μ§ μ§ν©μ λ§νλ€.
1κ°μ λ¬Έμλ 2λ°μ΄νΈ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λκΈ° λλ¬Έμ,
λͺ κ°μ λ¬Έμλ‘ μ΄λ€μ‘λλμ λ°λΌ νμν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°κ° κ²°μ λλ€.
μ΄ κ°μ μ΄μ λ‘ Cμλ νλμ λ¬Έμλ₯Ό μν λ°μ΄ν° νμ ( char ) λ§ μμ λΏ λ¬Έμμ΄ νμ μ μ‘΄μ¬νμ§ μλλ€.
Cμμλ λ¬Έμμ΄μ λ¬Έμμ λ°°μ΄λ‘ μ²λ¦¬νκ³ , μλ°μμλ λ¬Έμμ΄μ String κ°μ²΄λ‘ μ²λ¦¬νλ€.
μλ°μ€ν¬λ¦½νΈλ κ°λ°μμ νΈμλ₯Ό μν΄ λ¬Έμμ΄ νμ μ μμ νμ μΌλ‘ μ 곡νλ€.
μλ°μ€ν¬λ¦½νΈμ λ¬Έμμ΄μ μ μ¬ λ°°μ΄ κ°μ²΄μ΄λ©΄μ μ΄ν°λ¬λΈμ΄λ€.
// μ μ¬ λ°°μ΄ κ°μ²΄
// --> λ§μΉ λ°°μ΄μ²λΌ μΈλ±μ€λ‘ νλ‘νΌν° κ°μ μ κ·Όν μ μλ€.
// --> length νλ‘νΌν°λ₯Ό κ°λλ€.
var str = 'string'
// λ¬Έμμ΄μ μ μ¬ λ°°μ΄μ΄λ―λ‘, λ°°μ΄κ³Ό μ μ¬νκ² μΈλ±μ€λ₯Ό μ¬μ©ν΄ κ° λ¬Έμμ μ κ·Όν μ μλ€.
console.log(str[0]); // s
// λ¬Έμμ΄μ μμ κ°μΈλ°, κ°μ²΄μ²λΌ λμνλ€.
console.log(str.length); // 6
console.log(str.toUpperCase()); // STRING
π‘ κ°μ²΄ νμ object/reference type νΉμ§
01 κ°μ²΄(μ°Έμ‘°) νμ μ κ°μ "λ³κ²½ κ°λ₯"ν κ°μ΄λ€. --> mutable value
02 κ°μ²΄(μ°Έμ‘°) νμ μ κ°μ λ³μμ ν λΉνλ©΄, λ³μ (ν보λ λ©λͺ¨λ¦¬ 곡κ°) μλ μ°Έμ‘° κ°μ΄ μ μ₯λλ€.
κ°μ²΄λ₯Ό ν λΉν λ³μλ μ¬ν λΉμμ΄ κ°μ²΄λ₯Ό μ§μ λ³κ²½ν μ μλ€.
μ¦, μ¬ν λΉμμ΄ νλ‘νΌν°λ₯Ό λμ μΌλ‘ μΆκ°ν μλ μκ³ , νλ‘νΌν° κ°μ κ°±μ ν μλ μμΌλ©°, νλ‘νΌν° μ체λ₯Ό μμ ν μλ μλ€.
// ν λΉμ΄ μ΄λ€μ§λ μμ μ κ°μ²΄ 리ν°λ΄μ΄ ν΄μλκ³ , κ·Έ κ²°κ³Ό κ°μ²΄κ° μμ±λλ€.
var person = {
name: 'Lee'
};
// person λ³μμ μ μ₯λμ΄ μλ μ°Έμ‘° κ°μΌλ‘ μ€μ κ°μ²΄μ μ κ·Όνλ€.
console.log(person); // {name: "Lee"}
κ°μ²΄λ₯Ό λ³κ²½ν λλ§λ€ μμ κ°μ²λΌ μ΄μ κ°μ 볡μ¬ν΄μ μλ‘κ² μμ±νλ€λ©΄, λͺ ννκ³ μ λ’°μ±μ΄ ν보λκ² μ§λ§
κ°μ²΄λ ν¬κΈ°κ° λ§€μ° ν΄ μλμκ³ , μμ κ°μ²λΌ ν¬κΈ°κ° μΌμ νμ§λ μμΌλ©°, νλ‘νΌν° κ°μ΄ κ°μ²΄μΌ μλ μμ΄μ
볡μ¬ν΄μ μμ±νλ λΉμ©μ΄ λ§μ΄ λ λ€. λ€μ λ§ν΄, λ©λͺ¨λ¦¬μ ν¨μ¨μ μλΉκ° μ΄λ ΅κ³ μ±λ₯μ΄ λλΉ μ§λ€.
λ°λΌμ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©νκΈ° μν΄,
κ°μ²΄λ₯Ό 볡μ¬νκ³ μμ±νλ λΉμ©μ μ μ½νμ¬ μ±λ₯μ ν₯μμν€κΈ° μν΄,
κ°μ²΄λ λ³κ²½ κ°λ₯ν κ°μΌλ‘ μ€κ³λμ΄ μλ€.
λ©λͺ¨λ¦¬μ μ¬μ©μ ν¨μ¨μ±κ³Ό μ±λ₯μ μν΄ κ΅¬μ‘°μ μΈ λ¨μ μ κ°μν μ€κ³λΌκ³ ν μ μλ€.
κ°μ²΄λ μ΄λ¬ν ꡬ쑰μ λ¨μ μ λ°λ₯Έ λΆμμ©μ΄ (λΉμ°ν) μλ€.
μμ κ°κ³Ό λ€λ₯΄κ², μ¬λ¬ κ°μ μλ³μκ° νλμ κ°μ²΄λ₯Ό 곡μ (μ°Έμ‘° κ° κ³΅μ )ν μ μλ€λ κ²μ΄λ€.
const person = {
name: 'Lee'
};
// μ°Έμ‘° κ°(μ£Όμ κ°)μ 볡μ¬
const copy = person;
console.log(copy === person) // true
μλ³Έ personκ³Ό μ¬λ³Έ copyλ μ μ₯λ λ©λͺ¨λ¦¬ μ£Όμλ λ€λ₯΄μ§λ§, λμΌν μ°Έμ‘° κ°μ κ°λλ€.
λ€μ λ§ν΄ μλ³Έ personκ³Ό μ¬λ³Έ copy λͺ¨λ λμΌν κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€. --> 2κ°μ μλ³μκ° νλμ κ°μ²΄λ₯Ό 곡μ νλ€.
λ°λΌμ μλ³Έ λλ μ¬λ³Έ μ€ μ΄λ νμͺ½μμ κ°μ²΄λ₯Ό λ³κ²½νλ©΄ μλ‘ μν₯μ μ£Όκ³ λ°λλ€.
π μμ λ³΅μ¬ vs κΉμ 볡μ¬
// κ°μ²΄λ₯Ό νλ‘νΌν° κ°μΌλ‘ κ°λ κ°μ²΄μ κ²½μ°
const o = {x:{y:1}};
// μμ λ³΅μ¬ : ν λ¨κ³κΉμ§λ§ λ³΅μ¬ (μ€μ²©λ κ°μ²΄λ μ°Έμ‘° κ°μ 볡μ¬)
const c1 = {...o};
console.log(c1 === o); // false
console.log(c1.x === o.x); // true
// lodashμ cloneDeepμ μ¬μ©ν κΉμ 볡μ¬
// "npm install lodash"λ‘ lodashλ₯Ό μ€μΉν ν, Node.js νκ²½μμ μ€ν
const _ = require('lodash');
// κΉμ λ³΅μ¬ : μ€μ²©λ κ°μ²΄κΉμ§ λͺ¨λ λ³΅μ¬ -> μμ κ°μ²λΌ μμ ν 볡μ¬λ³Έ(μ€μ κ° λ³΅μ¬)μ λ§λ¦.
const c2 = _.cloneDeep(o);
console.log(c2 === o); // false
console.log(c2.x === o.x); // false
π (νμ) μ°Έκ³ μλ£
'Front-end > JS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ°μ€ν¬λ¦½νΈ λ¬Έμ κ°μ²΄ λͺ¨λΈ DOM (Document Object Model) (0) | 2021.08.14 |
---|---|
μλ°μ€ν¬λ¦½νΈ λ°°μ΄ Array (0) | 2021.08.13 |
μλ°μ€ν¬λ¦½νΈ λ¬Έμμ΄ String (0) | 2021.07.24 |
μλ°μ€ν¬λ¦½νΈ μ μ΄λ¬Έ Control flow statement (0) | 2021.07.23 |
μλ°μ€ν¬λ¦½νΈ ν¨μ Function (0) | 2021.07.22 |
λκΈ