11_μμ κ°κ³Ό κ°μ²΄μ λΉκ΅
μλ°μ€ν¬λ¦½νΈμμ μ 곡νλ λ°μ΄ν° νμ
μ
ν¬κ² μμ νμ
(premitive type) κ³Ό κ°μ²΄ νμ
(obejct/reperence type) μΌλ‘ κ΅¬λΆ νλλ°, λ μ¬μ΄λ μ°¨μ΄μ μ΄ μ‘΄μ¬νλ€.
- μμ νμ
κ°μ λ³κ²½ λΆκ°λ₯ ν κ° μ΄κ³ ,
κ°μ²΄(μ°Έμ‘°) νμ κ°μ λ³κ²½ κ°λ₯ν κ° μ΄λ€. - μμ νμ
κ°μ λ³μμ ν λΉνλ©΄ λ³μ(ν보λ λ©λͺ¨λ¦¬ 곡κ°) μλ μ€μ κ°μ΄ μ μ₯
κ°μ²΄(μ°Έμ‘°) νμ κ°μ λ³μ(ν보λ λ©λͺ¨λ¦¬ 곡κ°)μλ μ°Έμ‘° κ°μ΄ μ μ₯ - μμ νμ
κ°μ κ°λ λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉνλ©΄ μλ³Έμ μμ κ°μ΄ 볡μ¬λμ΄ μ λ¬
κ°μ²΄ νμ κ°μ κ°λ λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉνλ©΄ μλ³Έμ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ μ λ¬
11.1 μμ νμ κ°
11.1.1 λ³κ²½ λΆκ°λ₯ν κ°
μμ νμ μλ³κ²½ λΆκ°λ₯ν κ°μΌλ‘ μ½κΈ° μ μ©(read only) κ°μ΄λ€.
JavaScriptμμ μμ κ°(primitive, λλ μμ μλ£ν)μ΄λ κ°μ²΄κ° μλλ©΄μ λ©μλλ κ°μ§μ§ μλ λ°μ΄ν°μ λλ€. μμ κ°μλ 7μ’ λ₯, string, number (en-US), bigint (en-US), boolean, undefined, symbol, κ·Έλ¦¬κ³ nullμ΄ μ‘΄μ¬ν©λλ€. ( μΆμ² : MDN )
- μμ κ° μ체λ₯Ό λ³κ²½ λΆκ°λ₯νλ€λ κ²μ΄μ§, λ³μ κ°μ λ³κ²½ ν μ μλ€λ κ²μ΄ μλμ μ μ!
// const ν€μλλ₯Ό μ¬μ© ν΄ μ μΈν λ³μλ μ¬ν λΉμ΄ κΈμ§λλ€. μμλ μ¬ν λΉμ΄ κΈμ§λ λ³μμΌ λΏμ΄λ€.
const o = {};
// const ν€μλλ₯Ό μ¬μ©ν΄ μ μΈν λ³μμ ν λΉν μμ κ°(μμ)μ λ³κ²½ν μ μλ€.
// νμ§λ§ const ν€μλλ₯Ό μ¬μ©ν΄ μ μΈν λ³μμ ν λΉν κ°μ²΄λ λ³κ²½ν μ μλ€.
o.a = 1;
console.log(o); // {a: 1}
μμ κ°μ ν λΉν λ³μμ μλ‘μ΄ μμ κ°μ μ¬ν λΉ νλ©΄,
- λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λμ΄ μλ μ¬ν λΉ μ΄μ μ μμ κ°μ λ³κ²½νλ κ²μ΄ μλλΌ,
- μλ‘μ΄ λ©λͺ¨λ¦¬ 곡κ°μ ν보 νκ³ μ¬ν λΉν μμ κ°μ μ μ₯ν ν,
- λ³μκ° μ°Έμ‘°νλ λ©λͺ¨λ¦¬ 곡κ°μ μ£Όμκ° λ³κ²½λ μ΄μ λ, λ³μμ ν λΉλ μμ κ°μ΄ λ³κ²½ λΆκ°λ₯ν κ°μ΄κΈ° λλ¬Έ
- λ³μλ μλ‘κ² μ¬ν λΉν μμ κ°μ κ°λ¦¬ν¨λ€.
- μ΄λ¬ν νΉμ±μ λΆλ³μ±μ΄λΌκ³ νλ€
- λΆλ³μ±μ κ°λ μμ κ°μ ν λΉν λ³μλ μ¬ν λΉ μ΄μΈμ κ°μ λ³κ²½ ν μ μλ λ°©λ²μ΄ μλ€.
11.1.2 λ¬Έμμ΄κ³Ό λΆλ³μ±
λ¬Έμμ΄μ μ μ¬ λ°°μ΄ κ°μ²΄λ‘μ λ°°μ΄κ³Ό μ μ¬νκ² κ° λ¬Έμ₯μ μ κ·Ό ν μ μμΌλ, λ³κ²½ λΆκ°λ₯ ν κ°μ΄κΈ° λλ¬Έμ μΌλΆ λ¬Έμλ₯Ό λ³κ²½ν΄λ λ°μλμ§ μλλ€. μμ νμ μ λ¬Έμμ΄μ μ½κΈ° μ μ©μ΄κΈ° λλ¬Έμ΄λ€.
μμ κ°μ μ μ₯νλ €λ©΄ λ¨Όμ ν보ν΄μΌ νλ λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό κ²°μ ν΄μΌ νλ€.
- μ΄λ₯Ό μν΄ μμ νμ λ³λ‘ λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°κ° 미리 μ ν΄μ Έ μλ€.
- ECMAScript μ¬μμ
- λ¬Έμμ΄ νμ (2λ°μ΄νΈ) μ μ«μ νμ (8λ°μ΄νΈ)
- μ΄μΈμ μμ νμ μ ν¬κΈ°λ₯Ό λͺ νν κ·μ νκ³ μμ§ μλ€.
var str = 'string';
// λ¬Έμμ΄μ μ μ¬ λ°°μ΄μ΄λ―λ‘ λ°°μ΄κ³Ό μ μ¬νκ² μΈλ±μ€λ₯Ό μ¬μ©ν΄ κ° λ¬Έμμ μ κ·Όν μ μλ€.
// νμ§λ§ λ¬Έμμ΄μ μμκ°μ΄λ―λ‘ λ³κ²½ν μ μλ€. μ΄λ μλ¬κ° λ°μνμ§ μλλ€.
str[0] = 's';
console.log(str); // string
11.1.3 κ°μ μν μ λ¬
λ³μμ μμ κ°μ ν λΉνλ©΄, ν λΉλ°λ λ³μμλ ν λΉλλ λ³μμ μμ κ°μ΄ 볡μ¬λμ΄ μ λ¬ λλ€.
var score = 90;
var copy = score;
console.log(score); // 90
console.log(copy); // 90
score = 100
console.log(score); // 100
console.log(copy); // 100
score λ³μμ copy λ³μλ μ«μ κ° 100μ κ°λλ€λ μ μμλ λμΌνμ§λ§,
score λ³μμ copy λ³μμ κ° 100μ λ€λ₯Έ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λ λ³κ°μ κ°μ΄λ€.
μ¦, κ°μ μν μ λ¬μ μ¬μ€ κ°μ μ λ¬νλ κ²μ΄ μλλΌ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ λ¬νλ€.
μ€μν κ²μ
- λ³μμ μμ κ°μ κ°λ λ³μλ₯Ό ν λΉνλ©΄, ( μμ κ°μ΄ )
- λ³μ ν λΉ μμ μ΄λ , λ λ³μ μ€ μ΄λ νλμ λ³μμ κ°μ μ¬ν λΉ νλ μμ μ΄λ
- λ λ³μμ μμ κ°μ μλ‘ λ€λ₯Έ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λ λ³κ°μ κ° μ΄ λμ΄
- μ΄λ νμͺ½μμ μ¬ν λΉμ ν΅ν΄ κ°μ λ³κ²½νλλΌλ μλ‘ κ°μν μ μλ€.
11.2 κ°μ²΄
- νλ‘νΌν°μ κ°μκ° μ ν΄μ Έ μμ§ μμ λμ μΌλ‘ μΆκ°λκ³ μμ ν μ μκ³
- νλ‘νΌν°μ κ°μλ μ μ½μ΄ μλ€.
- μμ κ°κ³Ό κ°μ΄ ν보ν΄μΌ ν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό μ¬μ μ μ ν΄ λ μ μκ³
볡ν©μ μΈ μλ£κ΅¬μ‘°λΌμ ,μμ κ°κ³Όλ λ€λ₯Έ λ°©μμΌλ‘ λμνλλ‘ μ€κ³λμ΄ μλ€. - κ°μ²΄λ₯Ό λ³κ²½ν λ λ§λ€ 볡μ¬ν΄μ μμ± ν λ³κ²½νλ©΄ λΉμ©μ΄ λ§μ΄ λ λ€.
- μμ κ°μ²λΌ μ΄μ κ°μ 볡μ¬ν΄μ μλ‘κ° μμ±νλ€λ©΄
- λͺ ννκ³ μ λ’°μ±μ΄ ν보λκ² μ§λ§
- κ°μ²΄λ ν¬κΈ°κ° λ§€μ° ν΄ μλ μκ³
- μμ κ°μ²λΌ ν¬κΈ°κ° μΌμ νμ§λ μμΌλ©°
- νλ‘νΌν° κ°μ΄ κ°μ²΄μΌ μλ μλ€.
λ°λΌμ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©νκΈ° μν΄, κ·Έλ¦¬κ³ κ°μ²΄λ₯Ό 볡μ¬ν΄ μμ±νλ λΉμ©μ μ μ½νμ¬ μ±λ₯μ ν₯μμν€κΈ° μν΄
-> κ°μ²΄λ λ³κ²½ κ°λ₯ν κ°μΌλ‘ μ€κ³λμ΄ μλ€.
11.2.1 λ³κ²½ κ°λ₯ν κ°
κ°μ²΄(μ°Έμ‘°) νμ μ κ°μ λ³κ²½ κ°λ₯ν κ° μ΄λ€.
- κ°μ²΄λ₯Ό ν λΉν λ³μλ μ¬ν λΉ μμ΄ κ°μ²΄λ₯Ό μ§μ λ³κ²½ ν μ μλ€.
- μ¦, μ¬ν λΉ μμ΄ νλ‘νΌν°λ₯Ό λμ μΌλ‘ μΆκ° ν μ μκ³
- κ°μ κ°±μ ν μ μμΌλ©°, μ체λ₯Ό μμ ν μ μλ€.
μμ 볡μ¬μ κΉμ 볡μ¬
κ°μ²΄λ₯Ό νλ‘νΌν° κ°μΌλ‘ κ°λ κ°μ²΄μΈ κ²½μ°
- μμ λ³΅μ¬ λ ν λ¨κ³ κΉμ§λ§ 볡μ¬νλ κ²μ λ§νκ³ -> μ°Έμ‘° κ°μ 볡μ¬
- κΉμ λ³΅μ¬ λ κ°μ²΄μ μ€μ²©λμ΄ μλ κ°μ²΄ κΉμ§ 볡μ¬νλ κ²μ λ§νλ€.
-> κ°μ²΄μ μ€μ²©λμ΄ μλ κ°μ²΄κΉμ§ λͺ¨λ 볡μ¬ν΄μ μμ κ°μ²λΌ μμ ν 볡μ¬λ³Έμ λ§λλ 볡μ¬
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
const v = 1;
// "κΉμ 볡μ¬"λΌκ³ λΆλ₯΄κΈ°λ νλ€.
const c1 = v;
console.log(c1 === v); // true
const o = { x: 1 };
// "μμ 볡μ¬"λΌκ³ λΆλ₯΄κΈ°λ νλ€.
const c2 = o;
console.log(c2 === o); // true
μμ 볡μ¬μ κΉμ 볡μ¬λ‘ μμ±ν κ°μ²΄λ μλ³Έκ³Όλ λ€λ₯Έ κ°μ²΄λ€.
-> μλ³Έκ³Ό 볡μ¬λ³Έμ μ°Έμ‘° κ°μ΄ λ€λ₯Έ λ³κ°μ κ°μ²΄λ€.
11.2.2 μ°Έμ‘°μ μν μ λ¬
κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ³μ(μλ³Έ person) μ λ€λ₯Έ λ³μ(μ¬λ³Έ copy)μ ν λΉνλ©΄, μλ³Έμ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ μ λ¬λλ κ²
var person = {
name: 'Lee'
};
// μ°Έμ‘°κ°μ 볡μ¬(μμ 볡μ¬)
var copy = person;
μμ μ½λμμ personκ³Ό copy λͺ¨λ λμΌν κ°μ²΄λ₯Ό κ°λ¦¬ν€λλ°
μ΄λ λ κ°μ μλ³μκ° νλμ κ°μ²΄λ₯Ό 곡μ νλ€λκ²μ μλ―Ένλ€.
μ 리
κ°μ μν μ λ¬ κ³Ό μ°Έμ‘°μ μν μ λ¬ μ
- μλ³μκ° κΈ°μ΅νλ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λμ΄ μλ κ°μ 볡μ¬ν΄μ μ λ¬νλ€λ λ©΄μμ λμΌνμ§λ§,
- μλ³μκ° κΈ°μ΅νλ λ©λͺ¨λ¦¬ 곡κ°(λ³μ)μ μ μ₯λμ΄ μλ κ°μ΄ μμ κ°μ΄λ μ°Έμ‘° κ°μ΄λμ μ°¨μ΄κ° μλ€.
'π Book-Talk > λͺ¨λ JS Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_μ€μ½ν (0) | 2022.11.11 |
---|---|
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_ν¨μ (0) | 2022.11.11 |
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_κ°μ²΄ 리ν°λ΄ (0) | 2022.11.11 |
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_νμ λ³ν (0) | 2022.11.11 |
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_μ μ΄λ¬Έ (0) | 2022.11.10 |