λ μ λͺ©λ‘/λͺ¨λ₯λ€ Modern JS Deep Dive (36) μΈλ€μΌν 리μ€νΈν [λͺ¨λ₯λ€] λ²μΈ ) μ°λ¦¬λ μ νλ‘ν νμ μ λν΄μ μμμΌν κΉ? 16μ₯ ~ 18μ₯ μ μ½μΌλ©° κ°μ²΄κ° JS μ κΈ°λ°μ΄λΌ μ€μν κ±° μκ² λλ°, μ°λ¦¬κ° μ€μ§μ μΌλ‘ μ΄λμ νλ‘ν νμ μ μΈ μ μλ€λκ±°μ§..? λ΄λΆ ꡬ쑰λ₯Ό μ΄λμ μ¨λ¨Ήμ§..? λ±μ μλ¬Έμ΄ λ€μλ€. μλ¬Έμ΄ λ€κΈ΄ νμΌλ, λ€μμ μλ €μ£Όμ§ μμκΉ? & μ°μ μ€ν°ν° μ§λλΆν° λκ°μ! λΌλ μκ°μ μ°Ύμλ³Ό μκ°μ μνμλ€. λͺ¨λ₯λ€ μ€ν°λ μ€λ λμ μ¬λΌμ¨ μ§λ¬Έ κ·Έλ₯΄κ²μ© μ΄λ κ² μμ¬μ΄ λΆλΆμ λν΄ μ΄μΌκΈ°κ° λμλ€. GPT νν λ¬Όμ΄λ³ΌκΉλ μκ°μ΄ λΆνλ― λ€μλ€. μλ°μ€ν¬λ¦½νΈμμ νλ‘ν νμ (Prototype)μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ λ§€μ° μ€μν κ°λ μ€ νλμ λλ€. μλ°μ€ν¬λ¦½νΈλ κ°μ²΄μ§ν₯ μΈμ΄μ΄λ©°, λͺ¨λ κ°μ²΄λ νλ‘ν νμ μ κ°μ§λλ€. μ΄ νλ‘ν νμ μ ν΄λΉ κ°μ²΄μ κΈ°λ₯κ³Ό μμ±μ μ μν©λλ€. νλ‘ν νμ μ κ°μ²΄ κ°μ μμμ ꡬννλ.. [λͺ¨λ₯λ€] 18μ₯ ν¨μμ μΌκΈ κ°μ²΄ π 18.1 μΌκΈ κ°μ²΄ 1. 무λͺ μ 리ν°λ΄λ‘ μμ±ν μ μλ€. μ¦, λ°νμμ μμ±μ΄ κ°λ₯νλ€. 2. λ³μλ μλ£κ΅¬μ‘°(κ°μ²΄, λ°°μ΄ λ±)μ μ μ₯ν μ μλ€. 3. ν¨μμ 맀κ°λ³μμ μ λ¬ν μ μλ€. 4. ν¨μμ λ°νκ°μΌλ‘ μ¬μ©ν μ μλ€. JS μ ν¨μλ μ΄ λͺ¨λ 쑰건μ λ§μ‘±νλ―λ‘ μΌκΈ κ°μ²΄λ€. ν¨μκ° μΌκΈ κ°μ²΄ -> ν¨μμ κ°μ²΄λ₯Ό λμΌνκ² μ¬μ©ν μ μλ€λ μλ―Έ. ν¨μλ₯Ό κ°μΌλ‘ λμΌνκ² μ·¨κΈν μλ μλ€. -> ν¨μλ κ°μ μ¬μ©ν μ μλ κ³³μ΄λΌλ©΄ μ΄λλ 리ν°λ΄λ‘ μ μν μ μμΌλ©°, -> λ°νμμ ν¨μ κ°μ²΄λ‘ νκ°λλ€. μΌκΈκ°μ²΄ ν¨μμ κ°μ₯ ν° νΉμ§ : μΌλ° κ°μ²΄μ κ°μ΄ ν¨μμ 맀κ°λ³μμ μ λ¬ν μ μμΌλ©°, ν¨μμ λ°νκ°μΌλ‘λ μ¬μ©ν μ μλ€λ κ². π18.2 ν¨μ κ°μ²΄μ νλ‘νΌν° ν¨μλ μΌλ° κ°μ²΄μ λ€λ₯΄.. [λͺ¨λ₯λ€] 17μ₯ μμ±μ ν¨μμ μν κ°μ²΄ μμ± -> μμ±μ ν¨μλ₯Ό μ¬μ©ν΄ κ°μ²΄λ₯Ό μμ±νλ λ°©μμ μμλ³Έλ€. π» 17.1 Object μμ±μ ν¨μ new μ°μ°μμ ν¨κ» Obj μμ±μ ν¨μλ₯Ό νΈμΆνλ©΄ λΉ κ°μ²΄λ₯Ό μμ±, λ°ννλ€. μ΄νμ νλ‘νΌν°, λ©μλλ₯Ό μΆκ°ν΄μ κ°μ²΄λ₯Ό μμ±ν μ μλ€. μμ±μ ν¨μ : new μ°μ°μμ ν¨κ» νΈμΆν΄ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νλ ν¨μ. μΈμ€ν΄μ€ : μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄ const person = new Object(); person.name = 'Lee'; person.sayHello = function () { console.log("Hello" + this.name) }; JS λ Object μμ±μ ν¨μ μΈμ String, Number, ... λ±λ± μ λΉνΈμΈ μμ±μ ν¨μλ₯Ό μ 곡νλ€. π» 17.2 μμ±μ ν¨.. [λͺ¨λ₯λ€] 16μ₯ νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈ π± 16.1 λ΄λΆ μ¬λ‘―κ³Ό λ΄λΆ λ©μλ λ΄λΆ μ¬λ‘―, λ΄λΆ λ©μλ => JS μμ§μ ꡬν μκ³ λ¦¬μ¦μ μ€λͺ νκΈ° μν μμ¬ νλ‘νΌν°μ μμ¬ λ©μλ [[ ... ]] μ΄λ κ² κ°μΌ μ΄λ¦λ€μ. μλ€λ ECMAScript μ¬μμ μ μλ λλ‘ κ΅¬νλκ³ , JS μμ§μμ μ€μ λ‘ λμνκΈ΄ νμ§λ§, κ°λ°μκ° μ§μ μ κ·Όν μ μλλ‘ μΈλΆλ‘ 곡κ°λ κ°μ²΄μ νλ‘νΌν°λ μλλ€. μ¦, λ΄λΆ μ¬λ‘―κ³Ό λ΄λΆ λ©μλλ JS μμ§μ λ΄λΆ μ‘°μ§ => μμΉμ μΌλ‘ μ§μ μ κ·Όνκ±°λ νΈμΆν μ μλ λ°©λ²μ μ 곡νμ§ μλλ€. νμ§λ§, μΌλΆ λ΄λΆ μ¬λ‘―κ³Ό λ΄λΆ λ©μλμ νν΄ κ°μ μ μΌλ‘ μ κ·Όν μ μλ μλ¨μ μ 곡νκΈ°λ ν¨. λͺ¨λ κ°μ²΄λ [[Prototype]] μ΄λ λ΄λΆ μ¬λ‘―μ κ°μ§κ³ , __proro__ λ₯Ό ν΅ν΄ κ°μ μ μΌλ‘ μ κ·Όμ΄ κ°λ₯νλ€. π± 16.2 νλ‘.. [λͺ¨λ₯λ€] 15μ₯ let, const ν€μλμ λΈλ‘ λ 벨 μ€μ½ν 15.1 var ν€μλλ‘ μ μΈν λ³μμ λ¬Έμ μ 15.1.1 λ³μ μ€λ³΅ μ μΈ νμ© λμΌν μ΄λ¦μ λ³μ μ μΈμ΄ κ°λ₯ν¨. 15.1.2 ν¨μ λ 벨 μ€μ½ν μ€λ‘μ§ ν¨μμ μ½λ λΈλ‘λ§μ μ§μ μ€μ½νλ‘ μ ν¨. -> μΈλΆμμ var ν€μλλ‘ μ μΈν λ³μ : λͺ¨λ μ μ λ³μκ° λ¨. 15.1.3 λ³μ νΈμ΄μ€ν λ³μ νΈμ΄μ€ν μ μν΄ vay ν€μλλ‘ μ μΈν λ³μλ λ³μ μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°ν μ μλ€. 15.2 let ν€μλ 15.2.1 λ³μ μ€λ³΅ μ μΈ κΈμ§ μ€λ³΅μΌλ‘ μ μΈ μλ¨. 15.2.2 λΈλ‘ λ 벨 μ€μ½ν λͺ¨λ μ½λ λΈλ‘μ μ§μ μ€μ½νλ‘ μΈμ νλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό λ°λ₯Έλ€. 15.2.3 λ³μ νΈμ΄μ€ν λ³μ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ λμνλ€. μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°νλ©΄, ReferenceError λ°μν¨. let μΌλ‘ μ .. [λͺ¨λ₯λ€] 14μ₯ μ μ λ³μμ λ¬Έμ μ 14.1 λ³μμ μλͺ μ£ΌκΈ° 14.1.1 μ§μ λ³μμ μλͺ μ£ΌκΈ° λ³μμ μλͺ μ£ΌκΈ° - λ³μλ μ μΈμ μν΄ μμ±λκ³ ν λΉμ ν΅ν΄ κ°μ κ°κ² λλ©° μΈμ κ° μλ©Έν¨. - λ³μλ μμ μ΄ μ μΈλ μμΉμμ μμ±λκ³ μλ©Έν¨. - λ³μ μ μΈμ λ°νμμ΄ μλλΌ, λ°νμ μ΄μ λ¨κ³μμ μ€νλ¨. (μ μλ³μ νμ ) - μ§μ λ³μλ ν¨μκ° νΈμΆ λ λ μ μΈλ¨ -> μ§μλ³μμ μλͺ μ£ΌκΈ° === ν¨μμ μλͺ μ£ΌκΈ° - λ³μμ μλͺ μ£ΌκΈ° : λ©λͺ¨λ¦¬ 곡κ°μ΄ ν보λ μμ λΆν° λ©λͺ¨λ¦¬ 곡κ°μ΄ ν΄μ λμ΄ κ°μ© λ©λͺ¨λ¦¬ νμ λ°νλλ μμ κΉμ§ => λ³μλ μμ μ΄ λ±λ‘λ μ€μ½νκ° μλ©Έλ λκΉμ§ μ ν¨ν¨. - ν¨μ λ΄λΆμμ λ³μ μ μΈ μ΄μ μ λ³μλ₯Ό μ¬μ©νλ€λ©΄ -> ν¨μ λ΄μ λ³μλ₯Ό μ¬μ©νλ κ² λ§κ³ λμ undefined λ₯Ό κ°κ³ μμ. (νΈμ΄μ€ν -> μ€.. [λͺ¨λ₯λ€] 13μ₯ μ€μ½ν 13.1 μ€μ½νλ? μ€μ½ν : μλ³μκ° μ ν¨ν λ²μ var ν€μλ / const, let ν€μλλ λ€λ₯΄κ² λμν¨. π λͺ¨λ μλ³μλ μμ μ΄ μ€μΈλ μμΉμ μν΄ μ€μ½νκ° κ²°μ λλ€. μλ³μ κ²°μ : JS μμ§μ΄ μ€μ½νλ₯Ό ν΅ν΄ μ΄λ€ λ³μλ₯Ό μ°Έμ‘°ν κ²μΈμ§ κ²°μ νλ κ². => μ€μ½νλ JS μμ§μ΄ μλ³μλ₯Ό κ²μν λ μ¬μ©νλ κ·μΉμ΄κΈ°λ ν¨. π λ μ컬 νκ²½ : μ½λκ° μ΄λμ μ€νλλ©°, μ£Όλ³μ μ΄λ€ μ½λκ° μλμ§λ₯Ό μλ―Έ -> μ½λμ λ¬Έλ§₯μ λ μ컬 νκ²½μΌλ‘ μ΄λ€μ§. -> μ΄κ±Έ ꡬνν κ² : μ€ν 컨ν μ€νΈ μ€μ½ν λ΄μμ μλ³μλ μ μΌν΄μΌνμ§λ§, λ€λ₯Έ μ€μ½νμμλ λμΌν μ΄λ¦μ μλ³μλ₯Ό μ¬μ©ν μ μμ. π var ν€μλ μ¬μ©ν λ³μ : κ°μ μ€μ½ν λ΄μμ μ€λ³΅ μ μΈμ΄ κ°λ₯ => μλμΉ μκ² λ³μκ°μ΄ μ¬ν λΉ & λ³κ²½λλ.. [λͺ¨λ₯λ€] 12μ₯ ν¨μ 𫧠12.1 ν¨μλ? JSμμ κ°μ₯ μ€μν ν΅μ¬ κ°λ . λ€λ₯Έ ν΅μ¬ κ°λ (μ€μ½ν, μ€ν 컨ν μ€νΈ λ±..) κ³Ό κΉμ κ΄λ ¨μ΄ μμ. JS λ₯Ό μ΄ν΄νκΈ° μν ν΅μ¬ μ€μ ν΅μ¬ ν¨μλ μΌλ ¨μ κ³Όμ μ λ¬ΈμΌλ‘ ꡬν, μ½λ λΈλ‘μΌλ‘ κ°μΈμ νλμ μ€ν λ¨μλ‘ μ μν κ². μ λ ₯μ λ°μμ μΆλ ₯μ λ΄λ³΄λ. 맀κ°λ³μ : ν¨μ λ΄λΆλ‘ μ λ ₯μ μ λ¬λ°λ λ³μ μΈμ : μ λ ₯ λ°νκ°: μΆλ ₯ ν¨μλ ν¨μ μ μλ₯Ό ν΅ν΄ μμ±λ¨. ν¨μ νΈμΆ : ν¨μλ μ μλ§μΌλ‘ μ€νλλ κ²μ΄ μλλΌ, μ€νμ λͺ μμ μΌλ‘ μ§μν΄μΌν¨. 𫧠12.2 ν¨μλ₯Ό μ¬μ©νλ μ΄μ λμΌν λ°λ³΅ μμ μ μνν μ, μ¬λ¬λ² νΈμΆ κ°λ₯ -> μ½λμ μ¬μ¬μ© κ°λ₯ μ¬λ¬ λ² μμ± μ μμ νλ €λ©΄ 걸리λ μκ° & μ€λ₯ κ°λ₯μ± μ¦κ° -> μ μ§λ³΄μμ νΈμμ±κ³Ό μ½λμ μ λ’°μ±μ λμ΄κΈ° μν΄ ν¨μ.. μ΄μ 1 2 3 4 5 λ€μ