π₯ [JavaScript] Frontend κΈ°μ λ©΄μ (Javascript)
ν΄λΉ ν¬μ€νΈλ νλ‘ νΈμ€λμ κΈ°μ λ©΄μ μ€ μλ°μ€ν¬λ¦½νΈμ λν΄ μ€μ μ μΌλ‘ λ€λ£¨λ νμ΄μ§ μ λλ€.
JavaScript
μλ°μ€ν¬λ¦½νΈλ λ¬΄μ¨ μΈμ΄μΈκ°μ?
Q. μλ°μ€ν¬λ¦½νΈλ μΈν°νλ¦¬ν° μΈμ΄μ λλ€. μΈν°νλ¦¬ν° μΈμ΄λ μ½λλ₯Ό ν μ€μ© μ½κ³ μ€ννλ λ°©μμΌλ‘ λμν©λλ€. μλ°μ€ν¬λ¦½νΈ μ½λλ λΈλΌμ°μ λ Node.jsμ κ°μ νκ²½μμ μ€νλ λ, μΈν°ν리ν°μ μν΄ λ°νμ μμ ν΄μλκ³ μ€νλ©λλ€.
this μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
Q. μλ°μ€ν¬λ¦½νΈμ this λ νμ¬ μ€ν μ€μΈ ν¨μ 컨ν μ€νΈλ₯Ό κ°λ¦¬ν΄
1) μ μ 컨ν μ€νΈ
μ μμ€μ½νμμ this λ μ μκ°μ²΄λ₯Ό κ°λ¦¬ν€λ©° window κ°μ²΄λ₯Ό μλ―Έν¨
2) ν¨μ λ΄λΆ
μΌλ° ν¨μ νΈμΆ : μΌλ° ν¨μ λ΄μμ this λ μ μκ°μ²΄λ₯Ό κ°λ¦¬ν΄
λ©μλ νΈμΆ : κ°μ²΄μ 맀μλ λ΄μ this λ ν΄λΉ λ©μλκ° μν κ°μ²΄λ₯Ό κ°λ¦¬ν΄
μμ±μ ν¨μ : new ν€μλλ‘ μμ±λ κ°μ²΄λ₯Ό κ°λ¦¬ν΄
3) νμ΄ν ν¨μ
νμ΄ν ν¨μ λ΄μ this λ ν¨μκ° μ μλ μμΉμμ λ°κΉ₯μͺ½ μ€μ½νμ this λ₯Ό μ μ§
4) μ΄λ²€νΈ νΈλ€λ¬
μ΄λ²€νΈ νΈλ€λ¬ λ΄μμ this λ μ΄λ²€νΈλ₯Ό λ°μ μν¨ DOM μμλ₯Ό κ°λ¦¬ν΄
Callback ν¨μμ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
Q. λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬λμ΄ νΉμ μ΄λ²€νΈ μ‘°κ±΄μ΄ λ°μ νμ λ μ€ν λλ ν¨μ
μ£Όλ‘ λΉλκΈ°μ μΈ μμ μ μ²λ¦¬νκ±°λ νΉμ ν μ‘°κ±΄μ΄ μΆ©μ‘±λμμ λ μ€νλμ΄μΌ νλ κ²½μ°μ μ¬μ©
Callback μ§μ₯μ ν΄κ²°νλ λ°©λ²μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
Q. Callback Hell μ μ½λ°± ν¨μκ° μ€μ²©λμ΄ κ°λ μ±μ΄ λ¨μ΄μ§κ³ μ μ§λ³΄μκ° μ΄λ €μ΄ μ½λλ₯Ό λ§ν©λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν λ°©λ²μ λνμ μΌλ‘ λκ°μ§κ° μλ€.
1) Promise μ¬μ©
νλ‘λ―Έμ€λ λΉλκΈ° μμ μ μλ£ λλ μ€ν¨μ λν κ²°κ³Όλ₯Ό λνλ΄λ κ°μ²΄
1 2 3 4 5 6 7 8 9 10 11 12 13 someAsyncFunction() .then(result => { // 첫 λ²μ§Έ λΉλκΈ° μμ μλ£ ν μ€νλ μ½λ return anotherAsyncFunction(result); }) .then(anotherResult => { // λ λ²μ§Έ λΉλκΈ° μμ μλ£ ν μ€νλ μ½λ console.log(anotherResult); }) .catch(error => { // μλ¬ λ°μ μ μ€νλ μ½λ console.error(error); });2) async/await μ¬μ©
λΉλκΈ° μ½λλ₯Ό λκΈ°μμΌλ‘ μ¬μ©ν μ μκ² λ³κ²½ ν΄μ£Όλ async/await μ μ¬μ©
1 2 3 4 5 6 7 8 9 async function fetchData() { try { const result1 = await someAsyncFunction(); const result2 = await anotherAsyncFunction(result1); console.log(result2); } catch (error) { console.error(error); } }μ΄λ¬ν λ°©λ²λ€μ μ½λ°± μ§μ₯μ νΌνκ³ , λΉλκΈ° μ½λλ₯Ό λμ± κ΄λ¦¬νκΈ° μ½κ² λ§λ€μ΄μ€λ€.
μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ λμ΄κΈ° μν΄ μ μ ν λ°©λ²μ μ ννμ¬ μ¬μ©νλ κ²μ΄ μ€μ
Callback κ³Ό Promise μ μ°¨μ΄λ₯Ό μ€λͺ νμΈμ.
Q. μ½λ°±μ λΉλκΈ° μμ μ μλ£λ₯Ό λ€λ£¨λ ν¨μ μ체μ΄μ§λ§, νλ‘λ―Έμ€λ λΉλκΈ° μμ μ κ²°κ³Όλ₯Ό λ€λ£¨λ κ°μ²΄μ λλ€.
μ½λ°±μ μ€μ²©λκ±°λ 볡μ‘ν΄μ§ μ μλ μ½λ°± μ§μ₯(callback hell) λ¬Έμ λ₯Ό κ°μ§ μ μμ§λ§, νλ‘λ―Έμ€λ 체μ΄λμ ν΅ν΄ λ μ½κΈ° μ½κ³ μ μ§λ³΄μκ° μ¬μ΄ μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
νλ‘λ―Έμ€λ λΉλκΈ° μμ μ μ±κ³΅ λ° μ€ν¨λ₯Ό ꡬλΆνμ¬ μ²λ¦¬ν μ μμΌλ―λ‘ μλ¬ μ²λ¦¬κ° κ°νΈν©λλ€.
var, const, let μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
var | let | const |
---|---|---|
ν¨μμ€μ½ν | λΈλ‘μ€μ½ν | λΈλ‘μ€μ½ν |
νΈμ΄μ€ν μ΄ λ°μ, μ μΈ μ μ¬μ©ν΄λ λ¬Έμ λ°μνμ§ μμ | νΈμ΄μ€ν μ΄ λ°μνμ§λ§ μ΄κΈ°ν μ κΉμ§ λ³μ μ κ·Ό λΆκ° | νλ² κ°μ΄ ν λΉ λλ©΄ μ¬ ν λΉ λΆκ° |
Event Capturing κ³Ό Event Bubbling μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
Q.
1)
μ΄λ²€νΈ μΊ‘μ³λ§
μ΄λ²€νΈκ° κ°μ₯ λ¨Ό λΆλͺ¨ μμμμλΆν° μμνμ¬ μ€μ νκ² μμκΉμ§ μ΄λ²€νΈλ₯Ό μ ννλ λ°©μ
μΊ‘μ²λ§ λ¨κ³μμλ κ°μ₯ μμμ μμλΆν° νμ μμλ‘ μ΄λ²€νΈκ° μ λ¬
μ΄λ²€νΈ μΊ‘μ²λ§μ μ΄λ²€νΈ νκ²μ μ°ΎκΈ° μν΄ μμ μμλ€μ μμ°¨μ μΌλ‘ νμ
μ΄λ²€νΈ νΈλ€λ¬κ° μμ μμμμλΆν° νΈμΆλκ³ νκ² μμμ λλ¬ν λκΉμ§ κ³μ μ€ν
2)
μ΄λ²€νΈ λ²λΈλ§
μ΄λ²€νΈ λ²λΈλ§μ μ΄λ²€νΈκ° νκ² μμμμλΆν° μμνμ¬ κ°μ₯ λ¨Ό λΆλͺ¨ μμκΉμ§ μ νλλ λ°©μ
λ²λΈλ§ λ¨κ³μμλ νκ² μμμμ μ΄λ²€νΈκ° λ°μν ν μμ μμλ‘ μ΄λ²€νΈκ° μ λ¬
μ΄λ²€νΈ λ²λΈλ§μ μ΄λ²€νΈ νκ²μμ μμνμ¬ μμ μμλ‘ κ³μν΄μ μ΄λ²€νΈ νΈλ€λ¬κ° νΈμΆ
μ΄λ²€νΈ νΈλ€λ¬μ μ€νμ΄ μλ£λ νμ μμ μμμ μ΄λ²€νΈ νΈλ€λ¬κ° νΈμΆ
Event delegation μ λν΄ μ€λͺ νμΈμ.
Q. μ΄λ²€νΈ μμμ JS μμ μ΄λ²€νΈλ₯Ό ν¨μ¨μ μΌλ‘ μ²λ¦¬νκΈ° μν΄ μ¬μ©νλλ°
μ΄λ²€νΈλ₯Ό μμμμμμ νμμμλ‘ μ νμμΌμ μ²λ¦¬ν μ μμ
κ°λ³μ μΌλ‘ λ±λ‘νλ κ² λ³΄λ€ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ΄κ³ μ±λ₯μ ν₯μ μν¬ μ μμ
κ°λ¨νκ² μ€λͺ νλ©΄ μμ component μ μ΄λ²€νΈλ₯Ό λ±λ‘ν΄λλ©΄ νμ component μ μλμΌλ‘ λ±λ‘λλ κ±Έ λ§ν¨
1 2 3 4 5 6 <ul onClick={onMove} id="list"> <li>ITEM 1</li> <li>ITEM 2</li> <li>ITEM 3</li> </ul> <!-- li λ₯Ό ν΄λ¦ν΄λ onMove κ° λμν¨ -->
νΈμ΄μ€ν μ λν΄ μ€λͺ νκ³ λ°μνλ μ΄μ λ₯Ό μ€λͺ νμΈμ.
Q. νΈμ΄μ€ν μ΄ λ°μνλ μ΄μ
JavaScript μμ μ»΄νμΌ κ³Όμ μμ λ³μ λ° ν¨μ μ μΈμ΄ μ²λ¦¬λλ λ°©μ λλ¬Έ
μ½λκ° μ€ν λκΈ° μ μ Javascript μμ§μ μ½λλ₯Ό μ μΈλ¨κ³μ μ€νλ¨κ³λ‘ λλ
μ μΈ λ¨κ³μμ λ³μμ ν¨μλ₯Ό λ©λͺ¨λ¦¬μ ν λΉνκ³ μ€νλ¨κ³μμ μ½λλ₯Ό μ€ν
1 2 console.log(x); // undefined var x = 10;
1 2 3 4 sayHello(); // "Hello, world!" function sayHello() { console.log("Hello, world!"); }
1 2 3 4 sayHello(); // TypeError: sayHello is not a function var sayHello = function() { console.log("Hello, world!"); }μμ μ½λμμλ ν¨μ ννμμ λ³μμ ν λΉνμλλ°
λ³μλ νΈμ΄μ€ν λμ§λ§ ν¨μ ννμμ νΈμ΄μ€ν λμ§ μμ΅λλ€.
λ°λΌμ ν¨μκ° ν λΉλκΈ° μ μ νΈμΆνλ €κ³ νλ©΄ μλ¬κ° λ°μν©λλ€.
ν΄λ‘μ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
Q. ν΄λ‘μ (closure)λ ν¨μμ κ·Έ ν¨μκ° μ μΈλ λ μ컬 νκ²½(lexical environment)μ μ‘°ν©
ν¨μκ° μ μΈ λ λΉμμ νκ²½μ κΈ°μ΅νκ³ μ΄ν ν΄λΉ ν¨μκ° νΈμΆ λ λμλ κ·Έ νκ²½μ μ κ·Ό ν μ μκ² ν©λλ€.
λ°λΌμ μμ μ΄ μ μΈλ μΈλΆ μ€μ½νμ λ³μλ€μ μ κ·Ό ν μ μκ² ν¨
1) λ΄λΆν¨μμ μΈλΆν¨μμ μ‘°ν©
λ΄λΆν¨μκ° μΈλΆν¨μ λ΄μμ μ μλκ³ , μΈλΆν¨μκ° λ΄λΆν¨μλ₯Ό λ°νν λ ν΄λ‘μ κ° μμ±
2) μΈλΆ μ€μ½νμ λ³μ μ κ·Ό
ν΄λ‘μ λ΄λΆν¨μλ μμ μ΄ μ μΈλ μΈλΆ μ€μ½νμ λ³μλ€μ μ κ·Ό ν μ μμ
3) λ μ컬 μ€μ½ν
ν΄λ‘μ λ λ μ컬 μ€μ½νμ λ°λ₯΄λ―λ‘ ν¨μκ° μ΄λμ νΈμΆλμλμ§κ° μλλΌ μ΄λμ μ κ·Ό λμλμ§μ λ°λΌ
μΈλΆλ³μμ μ κ·Ό ν μ μμ
μ£Όλ‘ ν΄λ‘μ λ λΉλκΈ° μ²λ¦¬, νλΌμ΄λΉ λ³μ λ° λ©μλ ꡬν, λͺ¨λ ν¨ν΄μ μ¬μ© λ¨
1 2 3 4 5 6 7 8 9 10 11 12 function outerFunction() { let outerVariable = 'I am outer!'; function innerFunction() { console.log(outerVariable); } return innerFunction; } let inner = outerFunction(); inner(); // μΆλ ₯: "I am outer!"μμ μμμμ
innerFunction
μouterFunction
λ΄λΆμμ μ μλμκ³ ,μΈλΆ λ³μ
outerVariable
μ μ κ·Όν μ μμ΅λλ€.outerFunction
μ΄ μ€νλ νμλ
innerFunction
μ λ°ννμ¬ ν΄λ‘μ κ° μμ±λκ³ , μ΄νμinner
λ₯Ό νΈμΆνλ©΄ μΈλΆ λ³μμ μ κ·Όν μ μμ΅λλ€.
λκΈ°μ λΉλκΈ°μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
Q.
λκΈ° (Synchronous)
- λκΈ°μ μΈ μ½λλ μμ°¨μ μΌλ‘ μ§ν
- κ° μμ μ΄ μ΄μ μμ μ΄ μ€ν λ μ΄νμ μμ°¨μ μΌλ‘ μ€ν λ¨
λΉλκΈ° (Asynchronous)
- λΉλκΈ°μ μΈ μ½λλ μμ°¨μ μΌλ‘ μ§νλμ§ μκ³ μ¬λ¬μμ μ΄ λμμ μ€ν
- ν μμ μ΄ μ€νλλ λμ λ€λ₯Έ μμ μ΄ μ€λ¨λμ§ μμ
- ν΄λΉ μμ μ΄ μλ£λμ§ μμλ λ€μ μμ μ΄ μμ λ¨
- μΌλ°μ μΌλ‘ λΉλκΈ° μ½λλ
Callback
,Promise
,async/await
λ₯Ό μ¬μ©νμ¬ μλ£μ²λ¦¬