πŸ“ƒ Front-End/JavaScript

πŸ“ƒ Front-End/JavaScript

Promise

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ œκ³΅ν•˜λŠ” 비동기λ₯Ό κ°„νŽΈν•˜κ²Œ 처리 ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 객체 정해진 μž₯μ‹œκ°„μ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κ³  λ‚˜μ„œ μ •μƒμ μœΌλ‘œ κΈ°λŠ₯이 μˆ˜ν–‰μ΄ λ˜μ–΄μ§€λ©΄ μ„±κ³΅μ˜ 메세지와 ν•¨κ»˜ 처리된 κ²°κ³Ό 값을 전달 ν•©λ‹ˆλ‹€. λ§Œμ•½, κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ‹€κ°€ μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ error λ₯Ό 전달 ν•©λ‹ˆλ‹€. μ‚¬μš©ν•˜λŠ” 이유 λ„€νŠΈμ›Œν¬μ—μ„œ 데이터λ₯Ό λ°›μ•„μ˜€κ±°λ‚˜ 큰 데이터λ₯Ό μ½μ–΄μ˜€λŠ” 과정은 μ‹œκ°„μ΄ κ±Έλ¦¬λŠ”λ° λ™κΈ°μ μœΌλ‘œ μ²˜λ¦¬ν•˜λ©΄ μ•žμ„  일듀을 μ²˜λ¦¬ν•˜λŠ” λ™μ•ˆ λ‹€μŒ 라인의 μ½”λ“œκ°€ μ‹€ν–‰λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ‹œκ°„μ΄ κ±Έλ¦¬λŠ” 일 듀은 promise λ₯Ό 톡해 λΉ„λ™κΈ°μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. promise 의 μƒνƒœ promiseλŠ” state와 result 2가지 μˆ¨κΉ€ ν”„λ‘œνΌν‹°λ₯Ό κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€. resultλŠ” resolve(value)κ°€ 호좜되면 value..

πŸ“ƒ Front-End/JavaScript

AJAX

Asynchronous Javascript And Xml(비동기식 μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ xml)의 μ•½μž AJAX λž€ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν†΅ν•΄μ„œ μ„œλ²„μ™€ λΈŒλΌμš°μ €κ°€ 비동기 λ°©μ‹μœΌλ‘œ 데이터λ₯Ό κ΅ν™˜ν•  수 μžˆλŠ” 톡신 κΈ°λŠ₯ μž…λ‹ˆλ‹€. Ajax λ₯Ό μ‚¬μš©ν•˜λ©΄ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ κΈ°μ‘΄ νŽ˜μ΄μ§€μ˜ ν™”λ©΄ 및 λ™μž‘μ„ λ°©ν•΄ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ λΉ„λ™κΈ°μ μœΌλ‘œ μ„œλ²„λ‘œ 데이터λ₯Ό 보내고 μ„œλ²„μ—μ„œ 데이터λ₯Ό λ°›μ•„μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€ XMLHttpRequest APIλŠ” 비동기 톡신에 자주 μ‚¬μš©λ˜λ©°, μ΅œκ·Όμ—λŠ” fetch APIκ°€ 자주 μ‚¬μš©λ©λ‹ˆλ‹€. 비동기 톡신 μš”μ²­μ„ 보낸 ν›„ μ‘λ‹΅κ³ΌλŠ” 상관없이 λ™μž‘ν•˜λŠ” 방식 μ›ΉνŽ˜μ΄μ§€λ₯Ό λ¦¬λ‘œλ“œ ν•˜μ§€ μ•Šκ³ λ„ 톡신이 κ°€λŠ₯ν•œ ꡬ쑰 AJAX 의 μž₯점 μƒν˜Έμž‘μš©μ„±μ΄ μ’‹μ•„μ§‘λ‹ˆλ‹€. μ„œλ²„μ˜ μƒˆλ‘œμš΄ 컨텐츠λ₯Ό 전체 νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œλ‘œλ“œν•  ν•„μš” 없이 동..

πŸ“ƒ Front-End/JavaScript

ν΄λ‘œμ €(closure)

λ‚΄λΆ€ν•¨μˆ˜κ°€ μ™ΈλΆ€ν•¨μˆ˜μ˜ λ§₯락(context)에 μ ‘κ·Όν•  수 μžˆλŠ” 것을 κ°€λ¦¬ν‚΅λ‹ˆλ‹€. μ–΄νœ˜μ  ν™˜κ²½(Lexical Environment) // (1) // one : μ΄ˆκΈ°ν™” X, addOne : function let one; // (2) one : undefined, addOne : function one = 1; // (3) one : 1, addOne : function -> μ „μ—­ Lexical function addOne(num){ console.log(one + num); } addOne(5); // (4) ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ” μˆœκ°„ μƒˆλ‘œμš΄ Lexical ν™˜κ²½μ΄ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€. num : 5 (1) : μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄ 슀크립트 λ‚΄μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λ“€μ΄ Lexical ν™˜κ²½ 에 μ˜¬λΌκ°‘λ‹ˆλ‹€. (4) μ—μ„œ ν•¨μˆ˜κ°€ λ„˜κ²¨λ°›..

πŸ“ƒ Front-End/JavaScript

class

ES6 λΆ€ν„° μΆ”κ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ •μ˜ ν•¨μˆ˜μ˜ ν•œ μ’…λ₯˜μ΄λ©°, 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ ν…œν”Œλ¦Ώ(ν‹€) μž…λ‹ˆλ‹€. 클래슀 μ•ˆμ—λŠ” 속성(field), 행동(method) 이 μžˆμŠ΅λ‹ˆλ‹€. class λŠ” 객체의 데이터 와 이λ₯Ό μ‘°μž‘ν•˜λŠ” λ©”μ„œλ“œ λ₯Ό ν•˜λ‚˜λ‘œ 좔상화 ν•©λ‹ˆλ‹€. 문법 class Person{ constructor(name, age){ // 속성 this.name = name; // 객체λ₯Ό μ΄ˆκΈ°ν™” ν•˜κΈ° μœ„ν•œ κ°’ this.age = age; } // 행동 speak(){ console.log(`${this.name} : hello`) } } // object , μƒˆλ‘œμš΄ objectλ₯Ό λ§Œλ“€ λ•Œ new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš© ν•©λ‹ˆλ‹€. const hyunho = new Person('hyunho', 26) console.log(hyun..

πŸ“ƒ Front-End/JavaScript

μƒμ„±μž ν•¨μˆ˜

ν•„μš”ν•œ μž¬λ£Œλ“€μ„ λ„£μ–΄μ£Όκ³  μ°μ–΄λ‚΄λŠ” λΆ•μ–΄λΉ΅ 판과 κ°™μŠ΅λ‹ˆλ‹€. 문법 function User(name, age){ // 첫 κΈ€μžλŠ” λŒ€λ¬Έμžλ‘œ this.name = name; this.age = age; } let user1 = new User("Mike", 30); let user2 = new User("Jan", 17); let user3 = new User("Tom", 20); new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 호좜 μ‚¬μš©ν•˜λŠ” 이유 객체 λ¦¬ν„°λŸ΄ { ... } 을 μ‚¬μš©ν•˜λ©΄ 객체λ₯Ό μ‰½κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 일일이 객체λ₯Ό λ§Œλ“œλŠ” 것보닀 훨씬 λΉ λ₯΄κ³  일관성 있게 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. λ™μž‘ 원리 function User(name, age){ // this = {}; -> 빈 객체가 μž„μ‹œμ μœΌλ‘œ λ§Œλ“€μ–΄μ§ // μƒˆλ‘œμš΄ ν”„λ‘œνΌν‹°..

πŸ“ƒ Front-End/JavaScript

Event Loop

λ¨Όμ €, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 λŒ€ν•΄ μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진 μ•ˆμ—λŠ” Memory Heap κ³Ό Call Stack 둜 λ‚˜λ‰˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. Memory Heap 데이터λ₯Ό λ§Œλ“€ λ•Œ, 즉 λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ„œ 였브젝트λ₯Ό ν• λ‹Ήν•˜κ±°λ‚˜ 문자 λ˜λŠ” 숫자λ₯Ό ν• λ‹Ήν•˜κ²Œ 되면 μ „λΆ€ λ©”λͺ¨λ¦¬ νž™μ— μ €μž₯ λ©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ 할당이 μΌμ–΄λ‚˜λŠ” κ³³ Call Stack ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” μˆœμ„œμ— λ”°λΌμ„œ 차곑차곑 μŒ“μ•„λ†“λŠ” 것 μ½”λ“œ 싀행에 따라 호좜 μŠ€νƒμ΄ μŒ“μ΄λŠ” κ³³ LIFO(Last In First Out) : 제일 λ‚˜μ€‘μ— λ“€μ–΄μ˜¨ 것이 제일 처음으둜 λ‚˜κ°‘λ‹ˆλ‹€. λŸ°νƒ€μž„ ν™˜κ²½ μžλ°”μŠ€ν¬λ¦½νŠΈ μ–Έμ–΄ μžμ²΄μ—λŠ” λ©€ν‹° μŠ€λ ˆλ”©μ΄ μ—†μŠ΅λ‹ˆλ‹€. Process 운영체제 μœ„μ—μ„œ μ—°μ†μ μœΌλ‘œ μ‹€ν–‰λ˜κ³  μžˆλŠ” ν”„λ‘œκ·Έλž¨ λ…λ¦½μ μœΌλ‘œ λ©”λͺ¨λ¦¬μ—μ„œ μ‹€ν–‰ ν•©λ‹ˆλ‹€. 각각의 ..

πŸ“ƒ Front-End/JavaScript

이벀트 버블링, 이벀트 캑처링, 이벀트 μœ„μž„

λΈŒλΌμš°μ €λŠ” μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ©΄, capturing -> bubbling 순으둜 이벀트λ₯Ό 감지 ν•©λ‹ˆλ‹€. 이벀트 버블링 (Event Bubbling) 이벀트 버블링은 νŠΉμ • ν™”λ©΄ μš”μ†Œμ—μ„œ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ ν•΄λ‹Ή μ΄λ²€νŠΈκ°€ 더 μƒμœ„μ˜ μš”μ†Œμ—κ²Œ μ „λ‹¬λ˜μ–΄ κ°€λŠ” νŠΉμ„±μ„ μ˜λ―Έν•©λ‹ˆλ‹€. μƒμœ„μ˜ ν™”λ©΄ μš”μ†Œλž€? HTML μš”μ†ŒλŠ” 기본적으둜 트리 ꡬ쑰λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.μ—¬κΈ°μ„œλŠ” 트리 κ΅¬μ‘°μƒμœΌλ‘œ ν•œ 단계 μœ„μ— μžˆλŠ” μš”μ†Œλ₯Ό μƒμœ„ μš”μ†ŒλΌκ³  ν•˜λ©° body νƒœκ·Έλ₯Ό μ΅œμƒμœ„ μš”μ†ŒλΌκ³  λΆ€λ₯΄κ² μŠ΅λ‹ˆλ‹€. const one = document.querySelector(".one"); const two = document.querySelector(".two"); const three = document.querySelector(".three"); one.ad..

πŸ“ƒ Front-End/JavaScript

Callback Function

ν•¨μˆ˜ ν”„λ‘œκ·Έλž¨ μ•ˆμ—μ„œ 각각의 μž‘μ€ κΈ°λŠ₯듀을 μˆ˜ν–‰ν•˜λŠ” 것 μž¬μ‚¬μš©μ΄ κ°€λŠ₯ ν•©λ‹ˆλ‹€. ν•˜λ‚˜μ˜ ν•¨μˆ˜λŠ” ν•œ κ°€μ§€μ˜ 일만 ν•˜λ„λ‘ λ§Œλ“œλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν•¨μˆ˜μ˜ 이름을 보고 ν•¨μˆ˜μ˜ κΈ°λŠ₯을 μ•Œ 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. // κΈ°λ³Έν˜• function ν•¨μˆ˜λͺ… (){ μ½”λ“œ }; ν•¨μˆ˜λͺ…() // 호좜 // λ§€κ°œλ³€μˆ˜ function ν•¨μˆ˜λͺ… (λ§€κ°œλ³€μˆ˜){ μ½”λ“œ }; ν•¨μˆ˜λͺ…(λ§€κ°œλ³€μˆ˜) // 호좜 μ½œλ°±ν•¨μˆ˜ ? ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜λ₯Ό μ „λ‹¬ν•΄μ„œ 상황에 맞게 ν•¨μˆ˜λ₯Ό λΆ€λ₯΄λŠ” 것 즉, νŒŒλΌλ―Έν„°(λ§€κ°œλ³€μˆ˜)둜 ν•¨μˆ˜λ₯Ό μ „λ‹¬ν•˜μ—¬ ν•¨μˆ˜μ˜ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜λ₯Ό μ½œλ°±ν•¨μˆ˜λΌ ν•©λ‹ˆλ‹€. const printYes = function () { console.log('yes') } const printNo = function print() { console.log('no'..

HoHo.dev
'πŸ“ƒ Front-End/JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (2 Page)