관리 메뉴

λͺ©λ‘πŸ“š Language & CS knowledge/JavaScript (λͺ¨λ˜μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive) (39)

Daehyunii's Dev-blog

var/let/const ν‚€μ›Œλ“œ

λ³€μˆ˜ μ„ μ–Έμ˜ μ‹€ν–‰ μ‹œμ κ³Ό λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ… μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 λ³€μˆ˜ 선언을 λ‹€μŒκ³Ό 같은 2단계에 거쳐 μˆ˜ν–‰ν•©λ‹ˆλ‹€. μ„ μ–Έ 단계 : λ³€μˆ˜ 이름을 등둝(μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½)ν•΄μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 λ³€μˆ˜μ˜ 쑴재λ₯Ό μ•Œλ¦½λ‹ˆλ‹€. μ΄ˆκΈ°ν™” 단계 : 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜κ³  μ•”λ¬΅μ μœΌλ‘œ undefinedλ₯Ό ν• λ‹Ήν•΄ μ΄ˆκΈ°ν™” ν•©λ‹ˆλ‹€. (const μ œμ™Έ) console.log(score); // undefined var score = 'Hello World' console.log(score); // 'Hello World' var hoisting = '선언문이 μŠ€μ½”ν”„μ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” 것을 μžλ°”μŠ€ν¬λ¦½νŠΈλ§Œμ˜ κ³ μœ ν•œ νŠΉμ§•μΈ ν˜Έμ΄μŠ€νŒ… 이라고 ν•©λ‹ˆλ‹€' var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜μ˜ νŠΉμ§• 1. λ³€..

48μž₯ λͺ¨λ“ˆ

48.1 λͺ¨λ“ˆμ˜ 일반적 의미 λͺ¨λ“ˆμ΄λž€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” κ°œλ³„μ  μš”μ†Œλ‘œμ„œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ 쑰각을 λ§ν•œλ‹€. 일반적으둜 λͺ¨λ“ˆμ€ κΈ°λŠ₯을 κΈ°μ€€μœΌλ‘œ 파일 λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•œλ‹€. μ΄λ•Œ λͺ¨λ“ˆμ΄ μ„±λ¦½ν•˜λ €λ©΄ λͺ¨λ“ˆμ€ μžμ‹ λ§Œμ˜ 파일 μŠ€μ½”ν”„(λͺ¨λ“ˆ μŠ€μ½”ν”„)λ₯Ό κ°€μ§ˆ 수 μžˆμ–΄μ•Ό ν•œλ‹€. μžμ‹ λ§Œμ˜ 파일 μŠ€μ½”ν”„λ₯Ό κ°–λŠ” λͺ¨λ“ˆμ˜ μžμ‚°μ€ 기본적으둜 λΉ„κ³΅κ°œ μƒνƒœλ‹€. μžμ‹ λ§Œμ˜ 파일 μŠ€μ½”ν”„λ₯Ό κ°–λŠ” λͺ¨λ“ˆμ˜ λͺ¨λ“  μžμ‚°μ€ μΊ‘μŠν™”λ˜μ–΄ λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œ μ ‘κ·Όν•  수 μ—†λ‹€. 즉, λͺ¨λ“ˆμ€ κ°œλ³„μ  μ‘΄μž¬λ‘œμ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λΆ„λ¦¬λ˜μ–΄ μ‘΄μž¬ν•œλ‹€. ν•˜μ§€λ§Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ™„μ „νžˆ λΆ„λ¦¬λ˜μ–΄ κ°œλ³„μ μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” λͺ¨λ“ˆμ€ μž¬μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ 쑴재의 μ˜λ―Έκ°€ μ—†λ‹€. λ”°λΌμ„œ λͺ¨λ“ˆμ€ κ³΅κ°œκ°€ ν•„μš”ν•œ μžμ‚°μ— ν•œμ •ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ 선택적 κ³΅κ°œκ°€ κ°€λŠ₯ν•˜λ‹€. 이λ₯Ό export라 ν•œλ‹€. 곡개된 λͺ¨λ“ˆμ˜..

46μž₯ μ œλ„ˆλ ˆμ΄ν„°μ™€ async/await(β€»λ‹¨μˆœ κ°œλ…λ§Œ 정리)

46.1 μ œλ„ˆλ ˆμ΄ν„°λž€? ES6μ—μ„œ λ„μž…λœ μ œλ„ˆλ ˆμ΄ν„°λŠ” μ½”λ“œ λΈ”λ‘μ˜ 싀행을 μΌμ‹œ μ€‘μ§€ν–ˆλ‹€κ°€ ν•„μš”ν•œ μ‹œμ μ— μž¬κ°œν•  수 μžˆλŠ” νŠΉμˆ˜ν•œ ν•¨μˆ˜λ‹€. 일반 ν•¨μˆ˜μ™€μ˜ 차이점 1. μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” ν•¨μˆ˜ ν˜ΈμΆœμžμ—κ²Œ ν•¨μˆ˜ μ‹€ν–‰μ˜ μ œμ–΄κΆŒμ„ 양도할 수 μžˆλ‹€. 2. μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” ν•¨μˆ˜ ν˜ΈμΆœμžμ™€ ν•¨μˆ˜μ˜ μƒνƒœλ₯Ό 주고받을 수 μžˆλ‹€. 3. μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ μ œλ„ˆλ ˆμ΄ν„° 객체λ₯Ό λ°˜ν™˜ν•œλ‹€. 46.2 μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜μ˜ μ •μ˜ μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” function* ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œλ‹€. 그리고 ν•˜λ‚˜ μ΄μƒμ˜ yield ν‘œν˜„μ‹μ„ ν¬ν•¨ν•œλ‹€. 이것을 μ œμ™Έν•˜λ©΄ 일반 ν•¨μˆ˜ μ •μ˜ν•˜λŠ” 방법과 λ™μΌν•˜λ‹€. μ—μŠ€ν„°λ¦¬μŠ€ν¬(*)의 μœ„μΉ˜λŠ” function ν‚€μ›Œλ“œμ™€ ν•¨μˆ˜ 이름 사이라면 어디든지 상관없닀. // μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜ μ„ μ–Έλ¬Έ function* genDecFu..

45μž₯ ν”„λ‘œλ―ΈμŠ€(β€»λ‹¨μˆœ κ°œλ…λ§Œ 정리)

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 비동기 처리λ₯Ό μœ„ν•œ ν•˜λ‚˜μ˜ νŒ¨ν„΄μœΌλ‘œ 콜백 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€. ν•˜μ§€λ§Œ 전톑적인 콜백 νŒ¨ν„΄μ€ 콜백 ν—¬λ‘œ 인해 가독성이 λ‚˜μ˜κ³  비동기 처리 쀑 λ°œμƒν•œ μ—λŸ¬μ˜ μ²˜λ¦¬κ°€ κ³€λž€ν•˜λ©° μ—¬λŸ¬ 개의 비동기 처리λ₯Ό ν•œλ²ˆμ— μ²˜λ¦¬ν•˜λŠ” 데도 ν•œκ³„κ°€ μžˆλ‹€. ES6μ—μ„œλŠ” 비동기 처리λ₯Ό μœ„ν•œ 또 λ‹€λ₯Έ νŒ¨ν„΄μœΌλ‘œ ν”„λ‘œλ―ΈμŠ€λ₯Ό λ„μž…ν–ˆλ‹€. ν”„λ‘œλ―ΈμŠ€λŠ” 전톡적인 콜백 νŒ¨ν„΄μ΄ 가진 단점을 λ³΄μ™„ν•˜λ©° 비동기 처리 μ‹œμ μ„ λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€. 45.2 ν”„λ‘œλ―ΈμŠ€μ˜ 생성 Promise μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚¬μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν•˜λ©΄ ν”„λ‘œλ―ΈμŠ€ 객체λ₯Ό μƒμ„±ν•œλ‹€. ES6μ—μ„œ λ„μž…λœ PromiseλŠ” 호슀트 객체가 μ•„λ‹Œ ECMAscript 사양에 μ •μ˜λœ ν‘œμ€€ 빌트인 객체닀. Promise μƒμ„±μž ν•¨μˆ˜λŠ” 비동기 처리λ₯Ό μˆ˜ν–‰ν•  콜백 ν•¨μˆ˜λ₯Ό 인..

44μž₯ REST API(β€»λ‹¨μˆœ κ°œλ…λ§Œ 정리)

RESTλŠ” HTTP/1.0κ³Ό 1.1의 μŠ€νŽ™ μž‘μ„±μ— μ°Έμ—¬ν–ˆκ³  μ•„νŒŒμΉ˜ HTTP μ„œλ²„ ν”„λ‘œμ νŠΈμ˜ 곡동 μ„€μ§‘μžμΈ 둜이 ν•„λ”©μ˜ 2000λ…„ λ…Όλ¬Έμ—μ„œ 처음 μ†Œκ°œλ˜μ—ˆλ‹€. λ°œν‘œ λ‹Ήμ‹œμ˜ 웹이 HTTPλ₯Ό μ œλŒ€λ‘œ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κ³  μžˆλŠ” 상황을 보고 HTTP의 μž₯점을 μ΅œλŒ€ν•œ ν™œμš©ν•  수 μžˆλŠ” μ•„ν‚€ν…μ²˜λ‘œμ„œ RESTλ₯Ό μ†Œκ°œν–ˆκ³  μ΄λŠ” HTTP ν”„λ‘œν† μ½œμ„ μ˜λ„μ— 맞게 λ””μžμΈν•˜λ„λ‘ μœ λ„ν•˜κ³  μžˆλ‹€. REST의 κΈ°λ³Έ 원칙을 μ„±μ‹€νžˆ 지킨 μ„œλΉ„μŠ€ λ””μžμΈμ„ "RESTful"이라고 ν‘œν˜„ν•œλ‹€. 즉, RESTλŠ” HTTPλ₯Ό 기반으둜 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ˜ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜λŠ” 방식을 κ·œμ •ν•œ μ•„ν‚€ν…μ²˜κ³ , REST APIλŠ” RESTλ₯Ό 기반으둜 μ„œλΉ„μŠ€ APIλ₯Ό κ΅¬ν˜„ν•œ 것을 μ˜λ―Έν•œλ‹€. 44.1 REST API ꡬ성 REST APIλŠ” μžμ›, ν–‰μœ„, ν‘œν˜„μ˜ 3가지 μš”μ†Œλ‘œ ..

42μž₯ 비동기 ν”„λ‘œκ·Έλž˜λ°

42.1 동기 μ²˜λ¦¬μ™€ 비동기 처리 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ ν•¨μˆ˜ μ½”λ“œκ°€ ν‰κ°€λ˜μ–΄ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λœλ‹€. μ΄λ•Œ μƒμ„±λœ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ(콜 μŠ€νƒ)에 ν‘Έμ‹œλ˜κ³  ν•¨μˆ˜μ½”λ“œκ°€ μ‹€ν–‰λœλ‹€. ν•¨μˆ˜ μ½”λ“œμ˜ 싀행이 μ’…λ£Œν•˜λ©΄ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—μ„œ νŒλ˜μ–΄ μ œκ±°λœλ‹€. 2022.07.20 - [μ–Έμ–΄ 곡뢀 및 정리/μžλ°”μŠ€ν¬λ¦½νŠΈ[λͺ¨λ˜μžλ°”μŠ€ν¬λ¦½νŠΈ]] - 23μž₯ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 23μž₯ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ™μž‘ 원리λ₯Ό λ‹΄κ³  μžˆλŠ” 핡심 κ°œλ…μ΄λ‹€. 이 κ°œλ…μ„ λͺ…ν™•ν•˜κ²Œ μ΄ν•΄ν•˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μŠ€μ½”ν”„ 기반으둜 μ‹λ³„μžμ™€ μ‹λ³„μžμ— λ°”μΈλ”©λœ 값을 κ΄€λ¦¬ν•˜λŠ” 방식과 호 pinetree93.tistory.com μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 단 ν•˜λ‚˜μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ„ κ°–λŠ”λ‹€. μ΄λŠ” ν•œ λ²ˆμ— ..

39μž₯ DOM(λ…Έλ“œλ“€λ‘œ κ΅¬μ„±λœ 트리 자료ꡬ쑰)

λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ 엔진은 HTML λ¬Έμ„œλ₯Ό νŒŒμ‹±ν•˜μ—¬ λΈŒλΌμš°μ €κ°€ 이해할 수 μžˆλŠ” 자료ꡬ쑰인 DOM을 μƒμ„±ν•œλ‹€. DOM은 HTML λ¬Έμ„œμ˜ 계측적 ꡬ쑰와 정보λ₯Ό ν‘œν˜„ν•˜λ©° 이λ₯Ό μ œμ–΄ν•  수 μžˆλŠ” API, 즉 ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜λŠ” 트리 μžλ£Œκ΅¬μ‘°λ‹€. 39.1 λ…Έλ“œ 39.1.1 HTML μš”μ†Œμ™€ λ…Έλ“œ 객체 HTML μš”μ†ŒλŠ” HTML λ¬Έμ„œλ₯Ό κ΅¬μ„±ν•˜λŠ” κ°œλ³„μ μΈ μš”μ†Œλ₯Ό μ˜λ―Έν•œλ‹€. HTML μš”μ†ŒλŠ” λ Œλ”λ§ 엔진에 μ˜ν•΄ νŒŒμ‹±λ˜μ–΄ DOM을 κ΅¬μ„±ν•˜λŠ” μš”μ†Œ λ…Έλ“œ 객체둜 λ³€ν™˜λœλ‹€. μ΄λ•Œ HTML μš”μ†Œμ˜ μ–΄νŠΈλ¦¬λ·°νŠΈλŠ” μ–΄νŠΈλ¦¬λ·°νŠΈ λ…Έλ“œλ‘œ, HTML μš”μ†Œμ˜ ν…μŠ€νŠΈ μ»¨ν…μΈ λŠ” ν…μŠ€νŠΈ λ…Έλ“œλ‘œ λ³€ν™˜λœλ‹€. Hello(μ½˜ν…μΈ )(μ’…λ£Œνƒœκ·Έ) HTML λ¬Έμ„œλŠ” HTML μš”μ†Œλ“€μ˜ μ§‘ν•©μœΌλ‘œ 이뀄지며, HTML μš”μ†ŒλŠ” 쀑첩 관계λ₯Ό κ°–λŠ”λ‹€. 즉, HTML μš”μ†Œμ˜ 콘..