μ μ λ³μμ 무λΆλ³ν μ¬μ©μ μννλ―λ‘,
- μ Όμ λ³μλ₯Ό λ°λμ μ¬μ©ν΄μΌ ν μ΄μ λ₯Ό μ°Ύμ§ λͺ»νλ€λ©΄, μ§μ λ³μλ₯Ό μ¬μ© κΆμ₯
14.1 λ³μμ μλͺ μ£ΌκΈ°
λ³μλ μ μΈμ μν΄ μμ±λκ³ , ν λΉμ ν΅ν΄ κ°μ κ°μ§λ©° μΈμ κ° μλ©Ένλ€. μ¦, λ³μλ μλͺ μ£ΌκΈ°(life cycle)κ° μλ€.
- λ³μμ μλͺ μ£ΌκΈ°κ° μλ€λ©΄ νλ² μ μΈλ λ³μλ νλ‘κ·Έλ¨μ μ’ λ£νμ§ μλ ν μμν λ©λͺ¨λ¦¬ 곡κ°μ μ μ νκ² λλ€.
14.1.1 μ§μ λ³μμ μλͺ μ£ΌκΈ°
λ³μλ μμ μ΄ μ μΈλ μμΉμμ μμ±λκ³ μλ©Ένλ€.
μ μ λ³μμ μλͺ
μ£ΌκΈ°λ μ ν리μΌμ΄μ
μ μλͺ
μ£ΌκΈ°μ κ°μ§λ§,
ν¨μ λ΄λΆμμ μ μΈλ μ§μ λ³μλ ν¨μκ° νΈμΆλλ©΄ μμ±λκ³ ν¨μκ° μ’
λ£νλ©΄ μλ©Ένλ€.
μ¦, μ§μ λ³μμ μλͺ μ£ΌκΈ°λ ν¨μμ μλͺ μ£ΌκΈ°μ μΌμΉνλ€. λ³μλ
- νλμ κ°μ μ μ₯νκΈ° μν΄ ν보ν λ©λͺ¨λ¦¬ κ³΅κ° μ체 λλ
- κ·Έ λ©λͺ¨λ¦¬ 곡κ°μ μλ³νκΈ° μν΄ λΆμΈ μ΄λ¦μ΄λ€.
λ°λΌμ λ³μμ μλͺ μ£ΌκΈ°λ
- λ©λͺ¨λ¦¬ 곡κ°μ΄ ν보(allocate)λ μμ λΆν°
- λ©λͺ¨λ¦¬ 곡κ°μ΄ ν΄μ (release)λμ΄
- κ°μ© λ©λͺ¨λ¦¬ ν(memory pool)μ λ°νλλ μμ κΉμ§λ€.
λν νΈμ΄μ€ν μ
- μ€μ½ν λ¨μλ‘ λμνλ©°,
- μ μ λ³μμ νΈμ΄μ€ν
μ
- μ μ λ³μμ μ μΈμ΄ μ μ μ€μ½νμ μ λλ‘ λμ΄ μ¬λ €μ§ κ² μ²λΌ λμ, μ μ λ³μλ μ μ μ 체μμ μ ν¨
- μ§μ λ³μμ νΈμ΄μ€ν
μ
- μ§μ λ³μμ μ μΈμ΄ μ§μ μ€μ½νμ μ λλ‘ λμ΄ μ¬λ €μ§ κ² μ²λΌ λμ, μ§μ λ³μλ ν¨μ μ 체μμ μ ν¨
- μ μ λ³μμ νΈμ΄μ€ν
μ
β μ¦, νΈμ΄μ€ν μ λ³μ μ μΈμ΄ μ€μ½νμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ μλ°μ€ν¬λ¦½νΈ κ³ μ μ νΉμ§μ μλ―Ένλ€.
14.1.2 μ μ λ³μμ μλͺ μ£ΌκΈ°
var ν€μλλ‘ μ μΈν μ μ λ³μμ μλͺ μ£ΌκΈ°λ μ μ κ°μ²΄μ μλͺ μ£ΌκΈ°μ μΌμΉνλ€.
μ μ κ°μ²΄(global object)λ?
μ½λκ° μ€νλκΈ° μ΄μ λ¨κ³μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ΄λ€ κ°μ²΄λ³΄λ€λ λ¨Όμ μμ±λλ νΉμν κ°μ²΄μ΄λ€.μ μ κ°μ²΄λ ν΄λΌμ΄μΈνΈ μ¬μ΄λ νκ²½(λΈλΌμ°μ )μμλ window,μλ² μ¬μ΄λ νκ²½(Node.js)μμλ global κ°μ²΄λ₯Ό μλ―Ένλ€.
14.2 μ μ λ³μμ λ¬Έμ μ
1. μ묡μ κ²°ν©
μ μ λ³μλ₯Ό μ μΈν μλλ μ μ, μ¦ μ½λ μ΄λμλ μ°Έμ‘°νκ³ ν λΉν μ μλ λ³μλ₯Ό μ¬μ©νκ² λ€λ κ²μΈλ°,
μ΄λ λͺ¨λ μ½λκ° μ μ λ³μλ₯Ό μ°Έμ‘°νκ³ λ³κ²½ν μ μλ μ묡μ κ²°ν©μ νμ©νλ κ²μ΄λ€.
λ³μμ μ ν¨ λ²μκ° ν¬λ©΄ ν΄μλ‘ μ½λμ κ°λ
μ±μ λλΉ μ§κ³ μλμΉ μκ² μνκ° λ³κ²½λ μ μλ μνμ±λ λμμ§λ€.
2. κΈ΄ μλͺ μ£ΌκΈ°
μ μ λ³μλ μλͺ
μ£ΌκΈ°κ° κΈΈλ€. λ°λΌμ λ©λͺ¨λ¦¬ 리μμ€λ μ€λ κΈ°κ° μλΉνκ³ , μ μ λ³μμ μνλ₯Ό λ³κ²½ν μ μλ μκ°λ κΈΈκ³ κΈ°νλ λ§λ€.
λμ±μ΄ var ν€μλλ λ³μμ μ€λ³΅ μ μΈμ νμ©, μλͺ
μ£ΌκΈ°κ° κΈ΄ μ μ λ³μλ λ³μ μ΄λ¦μ΄ μ€λ³΅λ κ°λ₯μ±μ΄ μκ³ , μ΄λ κ² λλ©΄ μλμΉ μμ μ¬ν λΉμ΄ μ΄λ€μ§λ€.
3. μ€μ½ν μ²΄μΈ μμμ μ’ μ μ μ‘΄μ¬
λ³μλ₯Ό κ²μν λ μ μ λ³μκ° κ°μ₯ λ§μ§λ§μ κ²μλλ€λ κ². μ¦, μ μ λ³μμ κ²μ μλκ° κ°μ₯ λ리λ€.
4. λ€μμ€νμ΄μ€ μ€μΌ
μλ°μ€ν¬λ¦½νΈμ κ°μ₯ ν° λ¬Έμ μ μ€ νλλ νμΌμ΄ λΆλ¦¬λμ΄ μλ€ ν΄λ νλμ μ μ μ€μ½νλ₯Ό 곡μ νλ€λ κ².
λ°λΌμ λ€λ₯Έ νμΌ λ΄μμ λμΌν μ΄λ¦μΌλ‘ λͺ
λͺ
λ μ μ λ³μλ μ μ ν¨μκ° κ°μ μ€μ½νμ μ‘΄μ¬ν κ²½μ° μμμΉ λͺ»ν κ²°κ³Όλ₯Ό κ°μ Έμ¬ μ μλ€.
14.3 μ μ λ³μμ μ¬μ©μ μ΅μ νλ λ°©λ²
μ΄λ¬ν λ¬Έμ μ λ€λ‘ μ μ λ³μμ 무λΆλ³ν μ¬μ©μ μννλ€.
μ μ λ³μλ₯Ό λ°λμ μ¬μ©ν΄μΌ ν μ΄μ λ₯Ό μ°Ύμ§ λͺ»νλ€λ©΄ μ§μ λ³μλ₯Ό μ¬μ©ν΄μΌ νλ€.
λ³μμ μ€μ½νλ μ’μμλ‘ μ’λ€.
14.3.1 μ¦μ μ€ν ν¨μ
ν¨μ μ μμ λμμ νΈμΆλλ μ¦μ μ€ν ν¨μλ λ¨ νλ²λ§ νΈμΆλλ€.
λͺ¨λ μ½λλ₯Ό μ¦μ μ€ν ν¨μλ‘ κ°μΈλ©΄ λͺ¨λ λ³μλ μ¦μ μ€ν ν¨μμ μ§μ λ³μκ° λλ€.
(function () {
var foo = 10; // μ¦μ μ€ν ν¨μμ μ§μ λ³μ
// ...
}());
console.log(foo); // ReferenceError: foo is not defined
μ΄ λ°©λ²μ μ¬μ©νλ©΄ μ μ λ³μλ₯Ό μμ±νμ§ μμΌλ―λ‘ λΌμ΄λΈλ¬λ¦¬ λ±μ μμ£Ό μ¬μ©λλ€.
14.3.2 λ€μμ€νμ΄μ€ κ°μ²΄
μ μμ λ€μμ€νμ΄μ€ μν μ λ΄λΉν κ°μ²΄λ₯Ό μμ±νκ³ μ μ λ³μμ²λΌ μ¬μ©νκ³ μΆμ λ³μλ₯Ό νλ‘νΌν°λ‘ μΆκ°νλ λ°©λ²μ΄λ€.
var MYAPP = {}; // μ μ λ€μμ€νμ΄μ€ κ°μ²΄
MYAPP.name = 'april';
console.log(MYAPP.name); // april
14.3.3 λͺ¨λ ν¨ν΄
λͺ¨λ ν¨ν΄μ ν΄λμ€λ₯Ό λͺ¨λ°©ν΄μ κ΄λ ¨μ΄ μλ λ³μμ ν¨μλ₯Ό λͺ¨μ μ¦μ μ€ν ν¨μλ‘ κ°μΈ νλμ λͺ¨λμ λ§λ λ€. μ΄λ¬ν λͺ¨λ ν¨ν΄μ ν΄λ‘μ κΈ°λ°μΌλ‘ λμλλ€.
λͺ¨λ ν¨ν΄μ κ°μ₯ ν° νΉμ§μ μ μ λ³μμ μ΅μ λ λ¬Όλ‘ μΊ‘μ νκΉμ§ ꡬνν μ μλ€λ κ²μ΄λ€.
μΊ‘μν(encapsulation)
κ°μ²΄μ μν(state)λ₯Ό λνλ΄λ νλ‘νΌν°μ νλ‘νΌν°λ₯Ό μ°Έμ‘°νκ³ μ‘°μν μ μλ λμ(behavior)μΈ λ©μλλ₯Ό νλλ‘ λ¬Άλ κ²μ λ§νλ€.
- μΊ‘μνλ κ°μ²΄μ νΉμ νλ‘νΌν°λ λ©μλλ₯Ό κ°μΆ λͺ©μ μΌλ‘ μ¬μ©νκΈ°λ νλλ°
- μ΄λ₯Ό μ 보 μλ(infomation hiding)μ΄λΌ νλ€.
14.3.4 ES6 λͺ¨λ
ES6 λͺ¨λμ μ¬μ©νλ©΄ λλ μ μ λ³μλ₯Ό μ¬μ©ν μ μλ€. ES6 λͺ¨λμ νμΌ μ체μ λ μμ μΈ λͺ¨λ μ€μ½νλ₯Ό μ 곡νλ€.
- λ°λΌμ λͺ¨λ λ΄μμ var ν€μλλ‘ μ μΈν λ³μλ λλ μ μ λ³μκ° μλλ©° window κ°μ²΄μ νλ‘νΌν°λ μλλ€.
- λͺ¨λ λΈλΌμ°μ μμλ ES6 λͺ¨λμ μ¬μ©ν μ μλλ°,
- script νκ·Έμ type='module' μ΄νΈλ¦¬λ·°νΈλ₯Ό μΆκ°νλ©΄ λ‘λλ μλ°μ€ν¬λ¦½νΈ νμΌμ λͺ¨λλ‘μ λμνλ€. λͺ¨λμ νμΌ νμ₯μλ mjsλ₯Ό κΆμ₯νλ€.
<script type='module' scr='lib.mjs'></script>
<script type='module' scr='app.mjs'></script>
'π Book-Talk > λͺ¨λ JS Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_μμ±μ ν¨μμ μν κ°μ²΄ μμ± (0) | 2022.11.15 |
---|---|
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_let, const ν€μλμ λΈλ‘ λ 벨 μ€μ½ν (0) | 2022.11.15 |
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_μ€μ½ν (0) | 2022.11.11 |
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_ν¨μ (0) | 2022.11.11 |
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_μμ κ°κ³Ό κ°μ²΄μ λΉκ΅ (0) | 2022.11.11 |