λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ 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 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 이유 λ™μΌν•œ 반볡 μž‘μ—…μ„ μˆ˜ν–‰ν•  μ‹œ, μ—¬λŸ¬λ²ˆ 호좜 κ°€λŠ₯ -> μ½”λ“œμ˜ μž¬μ‚¬μš© κ°€λŠ₯ μ—¬λŸ¬ 번 μž‘μ„± μ‹œ μˆ˜μ •ν•˜λ €λ©΄ κ±Έλ¦¬λŠ” μ‹œκ°„ & 였λ₯˜ κ°€λŠ₯μ„± 증가 -> μœ μ§€λ³΄μˆ˜μ˜ νŽΈμ˜μ„±κ³Ό μ½”λ“œμ˜ 신뒰성을 높이기 μœ„ν•΄ ν•¨μˆ˜..

728x90
λ°˜μ‘ν˜•