====== ๐ŸŸจ JavaScript ====== JavaScript๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ๋™์ ์ด๊ณ  ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ===== ๐Ÿ“‹ ์ •์˜ ===== **JavaScript**๋Š” ์›น ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์›๋ž˜๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์‹คํ–‰๋˜์—ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ(Node.js)์—์„œ๋„ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ชจ๋ฐ”์ผ ์•ฑ๊ณผ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—๋„ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. ===== ๐ŸŽฏ ์ฃผ์š” ํŠน์ง• ===== **1. ๋™์  ํƒ€์ž… ์–ธ์–ด** - ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. - ์œ ์—ฐํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. **2. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ** - ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์— ๋ฐ˜์‘ํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. - ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ž์—ฐ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. **3. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ** - ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์ƒ์†์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. - ES6๋ถ€ํ„ฐ ํด๋ž˜์Šค ๋ฌธ๋ฒ•๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ===== ๐Ÿ—๏ธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ===== **๋ณ€์ˆ˜ ์„ ์–ธ:** // var (๊ตฌ์‹, ์‚ฌ์šฉ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ) var oldWay = "๊ตฌ์‹ ๋ฐฉ๋ฒ•"; // let (๋ธ”๋ก ์Šค์ฝ”ํ”„) let modernWay = "ํ˜„๋Œ€์  ๋ฐฉ๋ฒ•"; // const (์ƒ์ˆ˜) const constantValue = "๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’"; **ํ•จ์ˆ˜ ์ •์˜:** // ํ•จ์ˆ˜ ์„ ์–ธ function traditionalFunction() { return "์ „ํ†ต์ ์ธ ํ•จ์ˆ˜"; } // ํ•จ์ˆ˜ ํ‘œํ˜„์‹ const arrowFunction = () => { return "ํ™”์‚ดํ‘œ ํ•จ์ˆ˜"; }; // ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ (function() { console.log("์ฆ‰์‹œ ์‹คํ–‰"); })(); **๊ฐ์ฒด์™€ ๋ฐฐ์—ด:** // ๊ฐ์ฒด const person = { name: "ํ™๊ธธ๋™", age: 30, greet() { return `์•ˆ๋…•ํ•˜์„ธ์š”, ${this.name}์ž…๋‹ˆ๋‹ค.`; } }; // ๋ฐฐ์—ด const numbers = [1, 2, 3, 4, 5]; const doubled = numbers.map(n => n * 2); ===== ๐ŸŽฎ DOM ์กฐ์ž‘ ===== **์š”์†Œ ์„ ํƒ:** // ID๋กœ ์„ ํƒ const element = document.getElementById('myId'); // ํด๋ž˜์Šค๋กœ ์„ ํƒ const elements = document.getElementsByClassName('myClass'); // CSS ์„ ํƒ์ž๋กœ ์„ ํƒ const element = document.querySelector('.myClass'); const elements = document.querySelectorAll('.myClass'); **์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ:** // ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ถ”๊ฐ€ element.addEventListener('click', function(event) { console.log('ํด๋ฆญ๋จ!'); }); // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ element.addEventListener('mouseover', (event) => { element.style.backgroundColor = 'red'; }); **DOM ์กฐ์ž‘:** // ์š”์†Œ ์ƒ์„ฑ const newElement = document.createElement('div'); newElement.textContent = '์ƒˆ๋กœ์šด ์š”์†Œ'; // ์š”์†Œ ์ถ”๊ฐ€ document.body.appendChild(newElement); // ์š”์†Œ ์ œ๊ฑฐ element.remove(); // ์†์„ฑ ์„ค์ • element.setAttribute('class', 'newClass'); ===== ๐Ÿ”„ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ===== **์ฝœ๋ฐฑ ํ•จ์ˆ˜:** // ๋น„๋™๊ธฐ ์ž‘์—… ์˜ˆ์ œ setTimeout(() => { console.log('3์ดˆ ํ›„ ์‹คํ–‰'); }, 3000); // AJAX ์š”์ฒญ fetch('/api/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error)); **Promise:** const myPromise = new Promise((resolve, reject) => { // ๋น„๋™๊ธฐ ์ž‘์—… setTimeout(() => { const success = Math.random() > 0.5; if (success) { resolve('์„ฑ๊ณต!'); } else { reject('์‹คํŒจ!'); } }, 1000); }); myPromise .then(result => console.log(result)) .catch(error => console.error(error)); **async/await:** async function fetchData() { try { const response = await fetch('/api/data'); const data = await response.json(); return data; } catch (error) { console.error('๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ์‹คํŒจ:', error); } } // ์‚ฌ์šฉ fetchData().then(data => console.log(data)); ===== ๐Ÿ—๏ธ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ===== **ES6 ๋ชจ๋“ˆ:** // math.js export const add = (a, b) => a + b; export const subtract = (a, b) => a - b; export default class Calculator { multiply(a, b) { return a * b; } } // main.js import Calculator, { add, subtract } from './math.js'; console.log(add(5, 3)); // 8 console.log(subtract(10, 4)); // 6 const calc = new Calculator(); console.log(calc.multiply(6, 7)); // 42 **CommonJS (Node.js):** // math.js module.exports = { add: (a, b) => a + b, subtract: (a, b) => a - b }; // main.js const math = require('./math.js'); console.log(math.add(5, 3)); // 8 ===== ๐ŸŽฏ ES6+ ๊ธฐ๋Šฅ ===== **๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น:** // ๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด const [first, second, ...rest] = [1, 2, 3, 4, 5]; // ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด const { name, age, ...otherProps } = person; **ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด:** const name = "ํ™๊ธธ๋™"; const greeting = `์•ˆ๋…•ํ•˜์„ธ์š”, ${name}๋‹˜!`; const multiLine = ` ์—ฌ๋Ÿฌ ์ค„์˜ ํ…์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `; **ํด๋ž˜์Šค:** class Animal { constructor(name) { this.name = name; } speak() { return `${this.name}์ด(๊ฐ€) ์†Œ๋ฆฌ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.`; } } class Dog extends Animal { speak() { return `${this.name}์ด(๊ฐ€) ๋ฉ๋ฉ ์ง–์Šต๋‹ˆ๋‹ค.`; } } const dog = new Dog('๋ฐ”๋‘‘์ด'); console.log(dog.speak()); // "๋ฐ”๋‘‘์ด๊ฐ€ ๋ฉ๋ฉ ์ง–์Šต๋‹ˆ๋‹ค." ===== ๐Ÿ› ๏ธ ๋””๋ฒ„๊น… ===== **์ฝ˜์†” ๋ฉ”์„œ๋“œ:** console.log('์ผ๋ฐ˜ ๋กœ๊ทธ'); console.error('์—๋Ÿฌ ๋ฉ”์‹œ์ง€'); console.warn('๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€'); console.info('์ •๋ณด ๋ฉ”์‹œ์ง€'); // ๊ฐ์ฒด ์ถœ๋ ฅ console.table([ { name: 'ํ™๊ธธ๋™', age: 30 }, { name: '๊น€์ฒ ์ˆ˜', age: 25 } ]); // ์„ฑ๋Šฅ ์ธก์ • console.time('์ž‘์—… ์‹œ๊ฐ„'); // ... ์ž‘์—… ์ˆ˜ํ–‰ console.timeEnd('์ž‘์—… ์‹œ๊ฐ„'); **๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ:** ===== ๐Ÿ“š ๊ด€๋ จ ์šฉ์–ด ===== * [[wiki:glossary:web_technologies:html|HTML]] - ๋งˆํฌ์—… ์–ธ์–ด * [[wiki:glossary:web_technologies:css|CSS]] - ์Šคํƒ€์ผ์‹œํŠธ * [[wiki:glossary:web_technologies:dom|DOM]] - ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ * [[wiki:glossary:web_technologies:ajax|AJAX]] - ๋น„๋™๊ธฐ ํ†ต์‹  * [[wiki:glossary:web_technologies:json|JSON]] - ๋ฐ์ดํ„ฐ ํ˜•์‹ * [[wiki:glossary:server_operations:nodejs|Node.js]] - JavaScript ๋Ÿฐํƒ€์ž„ * [[wiki:glossary:game_development:phaser|Phaser.js]] - ๊ฒŒ์ž„ ์—”์ง„ * [[wiki:glossary:server_operations:socketio|Socket.IO]] - ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ===== ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ===== * [[wiki:it:dream_of_enc:metaverse:phaser|Phaser.js ๊ฒŒ์ž„ ์—”์ง„]] * [[wiki:it:dream_of_enc:metaverse:nodejs|Node.js ๋ฐฑ์—”๋“œ ์„ค์ •]] * [[wiki:glossary:web_technologies:css|CSS]] - ์Šคํƒ€์ผ๋ง * [[wiki:glossary:development_tools:git:github|GitHub]] - ์ฝ”๋“œ ์ €์žฅ์†Œ --- //์ด ํŽ˜์ด์ง€๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.//