설화님 2024. 10. 3. 13:18
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>모던 자바스크립트 (ES6 이후)</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
            padding: 20px;
            background-color: #f4f4f4;
        }
        h1 {
            color: #333;
        }
        h2 {
            color: #666;
        }
        code {
            background-color: #eaeaea;
            padding: 5px;
            border-radius: 5px;
            display: block;
            margin: 10px 0;
        }
        pre {
            background-color: #f8f8f8;
            padding: 10px;
            border: 1px solid #ccc;
            overflow-x: auto;
            margin-bottom: 20px;
        }
    </style>
</head>
<body>

    <h1>모던 자바스크립트 (ES6 이후)</h1>

    <h2>1. <code>let</code>과 <code>const</code></h2>
    <p>변수를 선언할 때 <code>var</code> 대신 <code>let</code>과 <code>const</code>를 사용하여 블록 스코프를 가지게 할 수 있습니다.</p>
    <pre><code>let x = 10;  // 재할당 가능
const y = 20;  // 재할당 불가능</code></pre>

    <h2>2. 화살표 함수 (Arrow Functions)</h2>
    <p>기존 함수 선언 방식 대신 더 짧고 간결한 화살표 함수를 사용할 수 있습니다.</p>
    <pre><code>const add = (a, b) => a + b;</code></pre>

    <h2>3. 템플릿 리터럴 (Template Literals)</h2>
    <p>백틱(<code>`</code>)을 사용하여 변수를 쉽게 문자열에 포함할 수 있습니다.</p>
    <pre><code>const name = "John";
console.log(`Hello, ${name}!`);  // Hello, John!</code></pre>

    <h2>4. 구조 분해 할당 (Destructuring)</h2>
    <p>배열이나 객체에서 값을 간편하게 추출할 수 있습니다.</p>
    <pre><code>// 배열 구조 분해
const [a, b] = [10, 20];

// 객체 구조 분해
const person = { name: "Alice", age: 25 };
const { name, age } = person;</code></pre>

    <h2>5. 기본 매개변수 (Default Parameters)</h2>
    <p>함수의 매개변수에 기본값을 설정할 수 있습니다.</p>
    <pre><code>function greet(name = "Guest") {
    console.log(`Hello, ${name}`);
}

greet();  // Hello, Guest</code></pre>

    <h2>6. 스프레드 연산자 (Spread Operator)</h2>
    <p>배열이나 객체를 쉽게 복사하거나 병합할 수 있습니다.</p>
    <pre><code>const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];  // [1, 2, 3, 4, 5]</code></pre>

    <h2>7. <code>class</code>와 객체지향 프로그래밍</h2>
    <p>ES6부터 <code>class</code> 키워드로 객체지향 프로그래밍이 더 명확하게 구현됩니다.</p>
    <pre><code>class Animal {
    constructor(name) {
        this.name = name;
    }
    speak() {
        console.log(`${this.name} makes a sound.`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name} barks.`);
    }
}

const dog = new Dog('Rex');
dog.speak();  // Rex barks.</code></pre>

    <h2>8. 모듈 (Modules)</h2>
    <p>모듈 시스템을 통해 코드 재사용성을 높일 수 있습니다.</p>
    <pre><code>// math.js
export function add(a, b) {
    return a + b;
}

// main.js
import { add } from './math.js';
console.log(add(2, 3));  // 5</code></pre>

    <h2>9. Promise</h2>
    <p>비동기 작업을 처리하는 새로운 방법으로, 콜백 지옥을 피할 수 있습니다.</p>
    <pre><code>const myPromise = new Promise((resolve, reject) => {
    setTimeout(() => resolve('Success!'), 1000);
});

myPromise.then(result => {
    console.log(result);  // 1초 후에 "Success!" 출력
});</code></pre>

    <h2>10. <code>async</code>와 <code>await</code></h2>
    <p>비동기 코드를 동기식처럼 작성할 수 있는 <code>async</code>/<code>await</code> 문법입니다.</p>
    <pre><code>async function fetchData() {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
}</code></pre>

</body>
</html>