πŸ’»DEV-STUDY/JavaScript

JavaScript 비동기 μ²˜λ¦¬μžλ°”μŠ€ν¬λ¦½νŠΈ 비동기 μ²˜λ¦¬μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‹±κΈ€ μŠ€λ ˆλ“œ 기반의 μ–Έμ–΄λ‘œ, ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μž‘μ—…λ§Œ μ²˜λ¦¬ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ 비동기 처리 방식을 톡해 병렬 μž‘μ—…μ΄ κ°€λŠ₯ν•΄ 보이게 λ§Œλ“€ 수 μžˆλ‹€. 주둜 I/O μž‘μ—…(λ„€νŠΈμ›Œν¬ μš”μ²­, 파일 읽기 λ“±)μ΄λ‚˜ 타이머와 같은 μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ—μ„œ μ‚¬μš©λœλ‹€.  λ™κΈ°μ (Synchronous) 처리 : ν•˜λ‚˜μ˜ μž‘μ—…μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ λ‹€μŒ μž‘μ—…μ„ μ‹œμž‘ν•˜μ§€ μ•ŠλŠ” 방식. 즉 μž‘μ—…μ΄ 순차적으둜 μ§„ν–‰λœλ‹€. console.log("Start");for (let i = 0; i μœ„ μ½”λ“œλŠ” `for`루프가 끝날 λ•Œ κΉŒμ§€ λ‹€λ₯Έ μž‘μ—…μ΄ μ‹€ν–‰λ˜μ§€ μ•Šκ³  κΈ°λ‹€λ¦°λ‹€. 즉, "End"κ°€ 좜λ ₯되기 μ „κΉŒμ§€ λͺ¨λ“  μž‘μ—…μ΄ 멈좘 μƒνƒœλ‘œ λŒ€κΈ°ν•˜κ²Œ λœλ‹€. CPUλ₯Ό λ…μ ν•˜κΈ° λ•Œλ¬Έμ—, κΈ΄ μž‘..
ν•„λ“œ + λ©”μ„œλ“œκ°μ²΄ = ν•„λ“œ + λ©”μ„œλ“œ (ν”„λ‘œνΌν‹° 집합)μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ κ°μ²΄λŠ” ν•„λ“œ(데이터)와 λ©”μ„œλ“œ(λ™μž‘)λ₯Ό ν¬ν•¨ν•œ ν”„λ‘œνΌν‹°λ“€μ˜ μ§‘ν•©μœΌλ‘œ μ •μ˜λœλ‹€.HTML (DOM) 객체: μš”μ†Œ(Element = 객체) = 속성(Attribute = ν”„λ‘œνΌν‹°) + Contentμš”μ†Œ: ``속성: ``λ©”μ„œλ“œ ν‘œν˜„λ²•: Default & Shortenμžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 객체의 λ©”μ„œλ“œλŠ” 두 가지 λ°©μ‹μœΌλ‘œ μ •μ˜ν•  수 μžˆλ‹€. 1.  Default(κΈ°λ³Έ) ν‘œν˜„λ²•var person = { name: "CheonSang", sayName: function() } console.log(this.name); }};`sayName` λ©”μ„œλ“œλŠ” `function` ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •μ˜λœλ‹€.2. Shorten(κ°„λž΅) ν‘œν˜„λ²• (ES..
λ©΄μ ‘ 단골 질문"this"λ©΄μ ‘ 단골 질문 쀑 ν•˜λ‚˜μΈ "ν•¨μˆ˜ λ‚΄ `this`와 λ©”μ„œλ“œ λ‚΄ `this`의 차이"에 λŒ€ν•΄ μ„€λͺ…ν•˜λ©΄μ„œ JSμ—μ„œ `this` 바인딩 방식에 λŒ€ν•΄ 쑰금 더 깊이 μ‚΄νŽ΄λ³΄κ² λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λŠ” 크게 일반 ν•¨μˆ˜μ™€ ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‘œ λ‚˜λˆŒ 수 있으며, 이 λ‘˜μ€ `this` 바인딩 λ°©μ‹μ—μ„œ 큰 차이가 μžˆλ‹€.일반 ν•¨μˆ˜λŠ” ν•¨μˆ˜λ‘œλ„ μ‚¬μš©λ  수 있고, λ©”μ„œλ“œλ‘œλ„ μ‚¬μš©λ  수 μžˆλ‹€.일반 ν•¨μˆ˜ ν‘œν˜„μ‹ λ‚΄ `this`: 동적 바인딩 (Dynamic  Scope)일반 ν•¨μˆ˜μ˜ `this`λŠ” ν•¨μˆ˜κ°€ 호좜될 λ•Œμ˜ μ»¨ν…μŠ€νŠΈμ— 따라 κ²°μ •λœλ‹€.즉, 동적 바인딩이 이루어지며 ν•¨μˆ˜κ°€ 호좜된 객체에 따라 `this`κ°€ 달라진닀. ν•¨μˆ˜: μ „μ—­μ—μ„œ 호좜된 ν•¨μˆ˜ λ‚΄ `this` → 무지성 window(global)function ..
function func() { }const func =  () => { };μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜ μž‘μ„± λ°©λ²•ν•¨μˆ˜ μž‘μ„±ν•˜λŠ” 방법을 총 3κ°€μ§€λ‘œ λΆ„λ₯˜ν–ˆλ‹€. 1. ν•¨μˆ˜ μ„ μ–Έλ¬Έ (Function Declaration)2. ν•¨μˆ˜ ν‘œν˜„μ‹ (Function Expression)3. ν™”μ‚΄ν‘œ ν•¨μˆ˜ (Arrow Function) κ·Έ 밖에 좔가적인 λ‚΄μš©μ€ ν¬μŠ€νŒ…μ— 담도둝 ν•  μ˜ˆμ •μ΄λ‹€. ν•¨μˆ˜ μ„ μ–Έλ¬Έ(Function Declaration)κ°€μž₯ 기본적인 ν•¨μˆ˜ μž‘μ„± λ°©λ²•μœΌλ‘œ, `function ν•¨μˆ˜λͺ…() { }`을 μ‚¬μš©ν•˜λ©° ν•¨μˆ˜ 선언문을 톡해 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³  μ–΄λ””μ„œλ“  호좜 κ°€λŠ₯ν•˜λ‹€.ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ μΌμ–΄λ‚œλ‹€. →ν•¨μˆ˜ μ„ μ–Έ 전에 호좜 κ°€λŠ₯.example() // ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ… function example() { console.log('..
Execution Contextμžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ½”λ“œκ°€ μž‘μ„±λœ μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ„ κ·ΈλŒ€λ‘œ μ‹€ν–‰ν•˜λŠ” κ²ƒμ΄μ•„λ‹ˆλΌ, 사싀상 ν•¨μˆ˜μ˜ μ‹€ν–‰ 방식과 λΉ„μŠ·ν•œ μ›λ¦¬λ‘œ μž‘λ™ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 슀크립트 νŒŒμΌμ„ ꡬ동할 λ•Œ 기본적으둜 두 가지 μ£Όμš” 단계λ₯Ό κ±°μΉœλ‹€.Creation (Pre-parsing) Phase: μ‹€ν–‰ν•˜κΈ° 전에 λ³€μˆ˜μ™€ ν•¨μˆ˜κ°€ μ–΄λ–€ 것인지 λΆ„μ„ν•˜κ³  ν•„μš”ν•œ λ©”λͺ¨λ¦¬ 곡간을 μ˜ˆμ•½ν•œλ‹€.Execution Phase: λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜κ³  ν•¨μˆ˜κ°€ μ‹€μ œλ‘œ μ‹€ν–‰λœλ‹€.μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진 ꡬ성: Stack + Heapμžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 Stack + Heap λ‘κ°œλ§Œ κΈ°μ–΅ν•˜λ©΄ λœλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜ λ™μž‘μ›λ¦¬λ„ λ§ˆμ°¬κ°€μ§€λ‘œ λ‘κ°œλ§Œ κΈ°μ–΅ν•˜μž.Stack(μŠ€νƒ): ν•¨μˆ˜ 호좜 μˆœμ„œλŒ€λ‘œ ν•¨μˆ˜κ°€ μ €μž₯되고 μ‹€ν–‰λ˜λŠ” 곡간 = μ‹€ν–‰ μ»¨ν…μŠ€..
"Hoisting"Hoisting ?본격적인 ν¬μŠ€νŒ…μ— μ•žμ„œ Hoisting(ν˜Έμ΄μŠ€νŒ…)μ΄λΌλŠ” κ°œλ…μ„ λ¨Όμ € μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. μ–΄μ›: Hoisting `λͺ…사` λŒμ–΄ 올리기, λ“€μ–΄μ˜¬λ € λ‚˜λ₯΄κΈ° Hoisting(ν˜Έμ΄μŠ€νŒ…)은 λ³€μˆ˜ μ„ μ–Έκ³Ό ν•¨μˆ˜ 선언이 μ½”λ“œ μ‹€ν–‰ 전에 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μ΅œμƒλ‹¨μœΌλ‘œ λŒμ–΄ μ˜¬λ €μ§€λŠ” ν˜„μƒμ„ λ§ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μž‘μ„±λœ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ, μ‹€μ œλ‘œλŠ” μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”κ°€ 미리 처리되기 λ•Œλ¬Έμ— μ˜ˆμƒμΉ˜ λͺ»ν•œ λ™μž‘μ„ κ²½ν—˜ν•  수 μžˆλ‹€. μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° 전에 λ³€μˆ˜ μ„ μ–Έκ³Ό ν•¨μˆ˜ 선언이 μ½”λ“œμ˜ μ΅œμƒλ‹¨μœΌλ‘œ μ΄λ™λœλ‹€. μ΄λŠ” μ„ μ–Έλ§Œ μ΄λ™λ˜λ©°, λ³€μˆ˜μ˜ κ°’ 할당은 ν˜Έμ΄μŠ€νŒ… λ˜μ§€ μ•ŠλŠ”λ‹€.JavaScript ν˜Έμ΄μŠ€νŒ…μ€ 인터프리터가 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° 전에 ν•¨μˆ˜, λ³€μˆ˜, 클래슀 λ˜λŠ” μž„ν¬νŠΈ(i..
What is Functional Programming?ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ„ μΆ”κ΅¬ν•˜λ©° μΆ”κ°€λ‘œ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„λ„ μ§€μ›ν•œλ‹€.객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ˜ μ—¬λŸ¬ νŒ¨ν„΄μ„ μ μš©ν•˜λ €λ©΄ 클래슀(상속)와 객체λ₯Ό ν™œμš©ν•  수 μžˆλ‹€.νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό 톡해 μΈν„°νŽ˜μ΄μŠ€(λ‹€ν˜•μ„±)λ₯Ό λ„μž…ν•  수 μžˆλ‹€.λ”°λΌμ„œ μžλ°” κ°œλ°œμžκ°€ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ λͺ¨λ‘ μ΄ν•΄ν•˜λŠ” 것과 같이 μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ œλŒ€λ‘œ κ°œλ°œν•˜κΈ° μœ„ν•΄μ„  ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•œ λͺ¨λ“  이해가 ν•„μš”ν•˜λ‹€.  μΌκΈ‰ν•¨μˆ˜: ν•¨μˆ˜ λ³€μˆ˜ + ν•¨μˆ˜ νŒŒλΌλ―Έν„° + ν•¨μˆ˜ λ°˜ν™˜μΌκΈ‰ν•¨μˆ˜λž€, 일급 객체둜 μ·¨κΈ‰λ˜λŠ” κ°œλ…μ΄λ‹€. ν•¨μˆ˜κ°€ 마치 μˆ«μžλ‚˜ λ¬Έμžμ—΄μ²˜λŸΌ 일반적인 κ°’μœΌλ‘œ λ‹€λ£¨μ–΄μ§ˆ 수 μžˆλ‹€λŠ” 의미.일급 ν•¨μˆ˜λ₯Ό μ§€μ›ν•˜λŠ” μ–Έμ–΄λŠ” ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— μ €μž₯ν•˜κ±°λ‚˜..
μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„κ³Ό 엔진: μ›Ήκ³Ό μ„œλ²„μ—μ„œμ˜ λ™μž‘ 원리 μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ›Ήκ³Ό μ„œλ²„ μ–‘μͺ½μ—μ„œ μ€‘μš”ν•œ 역할을 ν•˜λŠ” μ–Έμ–΄λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ–΄λ–»κ²Œ μ‹€ν–‰λ˜λŠ”μ§€λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„κ³Ό μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ κ°œλ…μ„ μ•Œμ•„μ•Ό ν•œλ‹€. μžλ°”μŠ€ν¬νŠΈ λŸ°νƒ€μž„: 엔진과 API μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„μ€ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” ν™˜κ²½μ„ λ§ν•˜λ©°, 크게 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진과 **API(라이브러리 및 λ°”μ΄λ„ˆλ¦¬)**둜 κ΅¬μ„±λœλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„μ€ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜κ³  μ‹€ν–‰ν•˜λŠ” 역할을 ν•˜λ©°, 이 κ³Όμ •μ—μ„œ ν•„μš”ν•œ API와 라이브러리λ₯Ό ν•¨κ»˜ μ œκ³΅ν•œλ‹€.μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진: μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό 읽고, 이λ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜μ—¬ μ‹€ν–‰ν•˜λŠ” 역할을 ν•œλ‹€. 예λ₯Ό λ“€μ–΄, ꡬ글 크둬의 V8 엔진이 λŒ€ν‘œμ μΈ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이닀.JS..
1000_sang
'πŸ’»DEV-STUDY/JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘