** ๐Ÿ“Œ1๏ธโƒฃ ์—ฐ์‚ฐ์ž (Operators) ์‹ฌํ™”**


๐Ÿ”ฅ (1) ๋น„๊ต ์—ฐ์‚ฐ์ž: == vs === ์™„์ „ ํ•ด๋ถ€

์—ฐ์‚ฐ์ž ๋น„๊ต ๊ธฐ์ค€ ํƒ€์ž… ๋ณ€ํ™˜ ์‹ค๋ฌด ๊ถŒ์žฅ ๋ฉด์ ‘ ํฌ์ธํŠธ
== ๊ฐ’๋งŒ ๋น„๊ต O (์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜) โŒ ์‚ฌ์šฉ ์ง€์–‘ โ€œ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜์œผ๋กœ ์˜ˆ์ธก ๋ถˆ๊ฐ€ ๊ฒฐ๊ณผโ€
=== ๊ฐ’ + ํƒ€์ž… ๋ชจ๋‘ ๋น„๊ต X โœ… ํ•ญ์ƒ ์‚ฌ์šฉ โ€œ์—„๊ฒฉ ๋น„๊ต, ์•ˆ์ „โ€

๐Ÿงฉ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ ํŠธ๋žฉ ์˜ˆ์‹œ

console.log(0 == '');        // true (0 == 0)
console.log(false == '0');   // true (false โ†’ 0, '0' โ†’ 0)
console.log(null == undefined); // true
console.log([] == false);    // true ([] โ†’ '' โ†’ 0 โ†’ false)

๐Ÿ“Œ ์‹ค๋ฌด & ๋ฉด์ ‘ ํ•„์‚ด ํฌ์ธํŠธ:

==์€ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ โ†’ ์˜ˆ์ธก ๋ถˆ๊ฐ€ โ†’ ํ•ญ์ƒ === ์‚ฌ์šฉ ์Šต๊ด€ํ™”!


๐Ÿง  ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž & ๋‹จ๋ฝ ํ‰๊ฐ€ (Short-Circuit Evaluation)


๐Ÿ”ฅ 1๏ธโƒฃ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž ์ข…๋ฅ˜

์—ฐ์‚ฐ์ž ์˜๋ฏธ ๋ฐ˜ํ™˜๊ฐ’
&& (AND) ๋‘˜ ๋‹ค ์ฐธ โ†’ ์ฐธ ์™ผ์ชฝ ๊ฐ’์ด Falsy โ†’ ๊ทธ ๊ฐ’ ๋ฐ˜ํ™˜, ๋‘˜ ๋‹ค Truthy โ†’ ์˜ค๋ฅธ์ชฝ ๊ฐ’ ๋ฐ˜ํ™˜
|| (OR) ๋‘˜ ์ค‘ ํ•˜๋‚˜ ์ฐธ โ†’ ์ฐธ ์™ผ์ชฝ ๊ฐ’์ด Truthy์ด๋ฉด โ†’ ๊ทธ ๊ฐ’์„ ๋ฐ”๋กœ ๋ฐ˜ํ™˜, ์™ผ์ชฝ์ด Falsy๋ฉด โ†’ ์˜ค๋ฅธ์ชฝ ๊ฐ’ ๋ฐ˜ํ™˜
! (NOT) ๋ถ€์ • Boolean ๋ฐ˜๋Œ€๊ฐ’ ๋ฐ˜ํ™˜ (true โ†’ false, false โ†’ true)

๐Ÿš€ 1๏ธโƒฃ OR(||) - ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

๐Ÿ“Œ ์„ค๋ช…

๐Ÿ’ก ์˜ˆ์ œ

const input = '';
const value = input || 'Default';
console.log(value); // 'Default'

๐Ÿ“Œ ์‹ค๋ฌด ํ™œ์šฉ

function getUsername(username) {
  return username || 'Guest';
}

console.log(getUsername('Tom')); // 'Tom'
console.log(getUsername(''));    // 'Guest'

โœ… ์„ค๋ช…:

์ž…๋ ฅ๊ฐ’์ด ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ โ†’ ๊ธฐ๋ณธ๊ฐ’ โ€˜Guestโ€™ ์ž๋™ ์ง€์ •


๐Ÿš€ 2๏ธโƒฃ AND(&&) - ์กฐ๊ฑด๋ถ€ ์‹คํ–‰

๐Ÿ“Œ ์„ค๋ช…


๐Ÿ’ก ์˜ˆ์ œ

const user = null;
const name = user && user.name;
console.log(name); // null โ†’ ํ‰๊ฐ€ ์ค‘๋‹จ

๐Ÿ“Œ ์‹ค๋ฌด ํ™œ์šฉ

isLoggedIn && logout();

โœ… ์„ค๋ช…:

isLoggedIn์ด true์ผ ๋•Œ๋งŒ logout() ์‹คํ–‰


๐Ÿš€ 3๏ธโƒฃ NOT(!) - Boolean ๋ฐ˜์ „


๐Ÿ“Œ ์˜ˆ์ œ

const isAvailable = false;
console.log(!isAvailable); // true

๐Ÿ“Œ ์‹ค๋ฌด: ์กฐ๊ฑด ๋ฐ˜์ „ ์‹œ ์œ ์šฉ


๐Ÿงฉ 3๏ธโƒฃ ์‹ค์ „ ์˜ˆ์ œ


โœ… AND(&&) - ์กฐ๊ฑด๋ถ€ ์‹คํ–‰

const user = null;
const name = user && user.name;
console.log(name); // null โ†’ ํ‰๊ฐ€ ์ค‘๋‹จ

โœ… OR(||) - ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

const input = '';
const value = input || 'Default';
console.log(value); // 'Default'

โœ… NOT(!) - Boolean ๋ฐ˜์ „

const isLoggedIn = false;
console.log(!isLoggedIn); // true

๐Ÿ“Š (3) ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ๋„์‹ํ™”

์šฐ์„ ์ˆœ์œ„ ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ
1 () (a + b)
2 *, /, % a * b
3 +, - a + b
4 <, >, <=, >= a > b
5 ==, ===, != a === b
6 &&, ` ย 
7 =, += a = b


๐ŸŽฏ 2๏ธโƒฃ ์กฐ๊ฑด๋ฌธ (Conditionals) ์‹ฌํ™”


๐Ÿ”ฅ (1) if-else ์‹ฌํ™”

const age = 20;

if (age >= 18) {
  console.log('์„ฑ์ธ');
} else if (age >= 13) {
  console.log('์ฒญ์†Œ๋…„');
} else {
  console.log('์–ด๋ฆฐ์ด');
}

๐Ÿ“Œ ๊ฐ€๋…์„ฑ ํŒ:

๋ณต์žก ์กฐ๊ฑด์ผ์ˆ˜๋ก if-else ๋ช…ํ™•ํžˆ! ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ๋‚จ์šฉ ๊ธˆ์ง€


๐Ÿงฉ (2) switch ๋ฌธ & case fall-through ๋ฌธ์ œ ๋ฐฉ์ง€


const fruit = 'apple';

switch (fruit) {
  case 'apple':
    console.log('๐ŸŽ');
    break; // break ํ•„์ˆ˜!
  case 'banana':
    console.log('๐ŸŒ');
    break;
  default:
    console.log('Unknown fruit');
}

โš ๏ธ ์‹ฌํ™”: case fall-through ์˜๋„์ ์œผ๋กœ ํ™œ์šฉ

const key = 2;
switch (key) {
  case 1:
  case 2:
    console.log('1 ๋˜๋Š” 2'); // ๋‘˜ ๋‹ค ์‹คํ–‰
    break;
}

๐Ÿ’ฅ (3) ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์ค‘์ฒฉ โ†’ ๊ฐ€๋…์„ฑ ๊ฒฝ๊ณ 

const score = 85;
const grade = score > 90 ? 'A' : score > 80 ? 'B' : 'C';
console.log(grade); // 'B'

๐Ÿ“Œ ์‹ค๋ฌด ํŒ:

์ค‘์ฒฉ ๋ณต์žก โ†’ ๋ฐ˜๋“œ์‹œ if-else๋กœ ๋ณ€ํ™˜



๐Ÿ” 3๏ธโƒฃ ๋ฐ˜๋ณต๋ฌธ (Loops) ์‹ฌํ™”


๋ฐ˜๋ณต๋ฌธ ํŠน์ง• ์‚ฌ์šฉ ์ƒํ™ฉ ์ฃผ์˜
for ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜ ๋ฐฐ์—ด, ๊ณ ์ • ํšŸ์ˆ˜ break/continue ๊ฐ€๋Šฅ
for...in ๊ฐ์ฒด key ์ˆœํšŒ ๊ฐ์ฒด ํƒ์ƒ‰ ๋ฐฐ์—ด ์‚ฌ์šฉ ์‹œ key ์™ธ ํ”„๋กœํผํ‹ฐ ํฌํ•จ
for...of iterable ์ˆœํšŒ ๋ฐฐ์—ด, ๋ฌธ์ž์—ด, Set, Map ๊ฐ์ฒด ์‚ฌ์šฉ ๋ถˆ๊ฐ€
.forEach() ๋ฐฐ์—ด ์ˆœํšŒ ์ฝœ๋ฐฑ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ break/continue ๋ถˆ๊ฐ€

๐Ÿงฉ for-in vs for-of ์‹ค๋ฌด ํŠธ๋žฉ ์˜ˆ์‹œ

let arr = ['a', 'b', 'c'];
arr.extra = 'test';

for (let key in arr) {
  console.log(key); // '0', '1', '2', 'extra' (์›์น˜ ์•Š๋Š” key ํฌํ•จ)
}

for (let val of arr) {
  console.log(val); // 'a', 'b', 'c'
}

โœ… ๋ฐฐ์—ด์€ ๋ฐ˜๋“œ์‹œ โ†’ for-of ์‚ฌ์šฉ ๊ถŒ์žฅ


๐Ÿ”ฅ forEach ์ œ์•ฝ์  ์‹ฌํ™”

arr.forEach(val => {
  if (val === 'b') return; // break ๋ถˆ๊ฐ€
});

๐Ÿ“Œ ์‹ค๋ฌด ํŒ:

break ํ•„์š” โ†’ for or for-of ์‚ฌ์šฉ



๐Ÿง  4๏ธโƒฃ ์‹ค๋ฌด & ๋ฉด์ ‘ ํ•„์‚ด ํฌ์ธํŠธ ์ •๋ฆฌ


์งˆ๋ฌธ ํ•ต์‹ฌ ๋‹ต๋ณ€
== vs === ์ฐจ์ด? ํƒ€์ž… ๋ณ€ํ™˜ ์—ฌ๋ถ€, === ํ•ญ์ƒ ๊ถŒ์žฅ
๋‹จ๋ฝ ํ‰๊ฐ€ ์‹ค๋ฌด ํ™œ์šฉ? ์กฐ๊ฑด๋ถ€ ์‹คํ–‰, ๊ธฐ๋ณธ๊ฐ’ ์ฒ˜๋ฆฌ
switch fall-through ๋ฌธ์ œ? break ์ƒ๋žต โ†’ ์˜๋„์น˜ ์•Š์€ ์‹คํ–‰
for-in vs for-of ์ฐจ์ด? ๊ฐ์ฒด key vs iterable ์ˆœํšŒ
forEach ํ•œ๊ณ„? break/continue ๋ถˆ๊ฐ€
์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์–ธ์ œ ์‚ฌ์šฉ? ๊ฐ„๋‹จํ•œ ์กฐ๊ฑด์—์„œ๋งŒ, ๋ณต์žก ์กฐ๊ฑด X


๐Ÿ“‘ 5๏ธโƒฃ ๋…ธ์…˜์šฉ ํ‘œ ๊น”๋” ์ •๋ฆฌ


๐Ÿ“‹ ์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž ๊ธฐ๋Šฅ ํŠน์ง•
== ๊ฐ’ ๋น„๊ต ํƒ€์ž… ๋ณ€ํ™˜ ๋ฐœ์ƒ (์ฃผ์˜)
=== ๊ฐ’+ํƒ€์ž… ๋น„๊ต ํƒ€์ž… ๋ณ€ํ™˜ X

๐Ÿ“‹ ์กฐ๊ฑด๋ฌธ

์ข…๋ฅ˜ ํŠน์ง• ์ฃผ์˜
if-else ๋ณต์žก ์กฐ๊ฑด ์ฒ˜๋ฆฌ ๊ฐ€๋…์„ฑ ์ข‹์Œ
switch ๋‹ค์ค‘ ์กฐ๊ฑด ์ฒ˜๋ฆฌ break ํ•„์ˆ˜
์‚ผํ•ญ ๊ฐ„๊ฒฐ ํ‘œํ˜„ ์ค‘์ฒฉ ๊ฐ€๋…์„ฑ โ†“

๐Ÿ“‹ ๋ฐ˜๋ณต๋ฌธ

๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ ์ƒํ™ฉ ํŠน์„ฑ ์ฃผ์˜
for ๊ณ ์ • ํšŸ์ˆ˜ break/continue ๊ฐ€๋Šฅ ย 
for-in ๊ฐ์ฒด key key ์ˆœํšŒ ๋ฐฐ์—ด ์‚ฌ์šฉ ์‹œ ์ฃผ์˜
for-of iterable ๊ฐ’ ์ˆœํšŒ ๊ฐ์ฒด ์‚ฌ์šฉ ๋ถˆ๊ฐ€
forEach ๋ฐฐ์—ด ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ break ๋ถˆ๊ฐ€


๐Ÿš€ 6๏ธโƒฃ ๋งˆ๋ฌด๋ฆฌ ์ฝ”๋“œ ์˜ˆ์ œ ์ •๋ฆฌ

๐Ÿ“‹ ์—ฐ์‚ฐ์ž

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript ์—ฐ์‚ฐ์ž ์‹ฌํ™”</title>
</head>

<body>

    <script>
        /*
        ๐Ÿ“Œ 1. ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž (Arithmetic Operators)
        ---------------------------------------
            1) ๋”ํ•˜๊ธฐ : +  โž•
            2) ๋นผ๊ธฐ : -  โž–
            3) ๊ณฑํ•˜๊ธฐ : *  โœ–๏ธ
            4) ๋‚˜๋ˆ„๊ธฐ : /  โž— (5/2 = 2.5) => ์ •์ˆ˜ํ™” ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ:
                    - parseInt(5/2) => 2
                    - Math.floor(5/2) => 2
            5) ๋‚˜๋จธ์ง€ : %  (์ง์ˆ˜/ํ™€์ˆ˜ ํŒ๋ณ„ ์ž์ฃผ ์‚ฌ์šฉ)
            6) ์ฆ๊ฐ€, ๊ฐ์†Œ ์—ฐ์‚ฐ์ž : ++, --  (์ˆจ๊น€ X, ๋ช…์‹œ์ )
            7) ์ œ๊ณฑ : ** (2**3 => 8)
        */

        console.log("๐Ÿ“Œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ");

        let x = 5;
        let y = 2;

        console.log(`๋”ํ•˜๊ธฐ โž• : ${x + y}`); // 7
        console.log(`๋นผ๊ธฐ โž– : ${x - y}`);  // 3
        console.log(`๊ณฑํ•˜๊ธฐ โœ–๏ธ : ${x * y}`); // 10
        console.log(`๋‚˜๋ˆ„๊ธฐ โž— : ${x / y}`); // 2.5
        console.log(`์ •์ˆ˜ ๋‚˜๋ˆ„๊ธฐ(parseInt) : ${parseInt(x / y)}`); // 2
        console.log(`์ •์ˆ˜ ๋‚˜๋ˆ„๊ธฐ(Math.floor) : ${Math.floor(x / y)}`); // 2
        console.log(`๋‚˜๋จธ์ง€ % : ${x % y}`); // 1
        console.log(`์ œ๊ณฑ ** : ${2 ** 3}`); // 8

        // ++, -- ์—ฐ์‚ฐ์ž (์ฃผ์˜: ์ „์œ„/ํ›„์œ„ ์ฐจ์ด!)
        let num = 1;
        console.log(`์ „์œ„ ์ฆ๊ฐ€: ${++num}`); // ๋จผ์ € ์ฆ๊ฐ€ ํ›„ ์ถœ๋ ฅ โ†’ 2
        console.log(`ํ›„์œ„ ์ฆ๊ฐ€: ${num++}`); // ์ถœ๋ ฅ ํ›„ ์ฆ๊ฐ€ โ†’ 2
        console.log(`ํ˜„์žฌ num: ${num}`); // 3

        console.log("--------------------------------------------");

        /*
        ๐Ÿ“Œ 2. ๋น„๊ต ์—ฐ์‚ฐ์ž (Comparison Operators)
        ---------------------------------------
            >, >=, <, <=
            == : ๊ฐ’๋งŒ ๋น„๊ต (1 == '1' : true)
            === : ๊ฐ’ + ์ž๋ฃŒํ˜• ๋น„๊ต (1 === '1' : false)
            != : ๊ฐ’๋งŒ ๋น„๊ต (1 != '1' : false)
            !== : ๊ฐ’ + ์ž๋ฃŒํ˜• ๋น„๊ต (1 !== '1' : true)
        */

        console.log("๐Ÿ“Œ ๋น„๊ต ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ");

        console.log(5 > 3);   // true
        console.log(5 >= 5);  // true
        console.log(2 < 4);   // true
        console.log(2 <= 1);  // false

        console.log(1 == '1');  // true (์ž๋ฃŒํ˜• ๋ฌด์‹œ)
        console.log(1 === '1'); // false (์ž๋ฃŒํ˜• ์—„๊ฒฉ ๋น„๊ต)
        console.log(1 != '1');  // false
        console.log(1 !== '1'); // true

        console.log("--------------------------------------------");

        /*
        ๐Ÿ“Œ 3. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž (Logical Operators)
        ---------------------------------------
            && : AND (๋‘˜ ๋‹ค ์ฐธ)
            || : OR (ํ•˜๋‚˜๋ผ๋„ ์ฐธ)
            !  : NOT (๋ถ€์ •)
        */

        console.log("๐Ÿ“Œ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ");

        console.log(true && true);   // true
        console.log(true && false);  // false
        console.log(false || true);  // true
        console.log(!true);          // false

        console.log("--------------------------------------------");

        /*
        ๐Ÿ“Œ 4. ๋Œ€์ž… ์—ฐ์‚ฐ์ž (Assignment Operators)
        ---------------------------------------
            =  : ๋Œ€์ž…
            += : ๋ˆ„์  ๋”ํ•˜๊ธฐ
            -=, *=, /= ๊ฐ€๋Šฅ
        */

        console.log("๐Ÿ“Œ ๋Œ€์ž… ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ");

        let a = 10;
        a += 5; // a = a + 5
        console.log(a); // 15
        a *= 2;
        console.log(a); // 30

        console.log("--------------------------------------------");

        /*
        ๐Ÿ“Œ 5. ์กฐ๊ฑด ์—ฐ์‚ฐ์ž (์‚ผํ•ญ ์—ฐ์‚ฐ์ž)
        ---------------------------------------
            (์กฐ๊ฑด์‹) ? ์ฐธ : ๊ฑฐ์ง“
        */

        console.log("๐Ÿ“Œ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ");

        let score = 85;
        let result = (score >= 60) ? "ํ•ฉ๊ฒฉ ๐ŸŽ‰" : "๋ถˆํ•ฉ๊ฒฉ โŒ";
        console.log(result); // ํ•ฉ๊ฒฉ ๐ŸŽ‰

        console.log("--------------------------------------------");

        /*
        ๐Ÿ“Œ 6. ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ž
        ---------------------------------------
            + : ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ
        */

        console.log("๐Ÿ“Œ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ");

        let first = "Hello";
        let second = "World";
        console.log(first + " " + second); // Hello World

    </script>

    <script>
        /*
        ๐Ÿ“Œ ์‹ฌํ™” ์˜ˆ์ œ: ์ตœ์ € ์‹œ๊ธ‰ ๊ณ„์‚ฐ๊ธฐ
        ---------------------------------------
        ์ตœ์ € ์‹œ๊ธ‰์ด 9620์›์ด๋‹ค.
        8์‹œ๊ฐ„๊นŒ์ง€๋Š” ์ตœ์ € ์‹œ๊ธ‰์„ ๋ฐ›๊ณ ,
        8์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ทผ๋ฌด๋Š” ์ตœ์ € ์‹œ๊ธ‰์˜ 1.5๋ฐฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.
        10์‹œ๊ฐ„ ๊ทผ๋ฌดํ–ˆ์„ ๋•Œ์˜ ์ผ๋‹น์„ ๊ตฌํ•˜๊ธฐ
        */

        function calculatePay(hours) {
            const basePay = 9620;  // ์ตœ์ € ์‹œ๊ธ‰
            let totalPay = 0;

            if (hours > 8) {
                let regular = basePay * 8;  // 8์‹œ๊ฐ„ ๊ธฐ๋ณธ๊ธ‰
                let overtime = basePay * 1.5 * (hours - 8); // ์ดˆ๊ณผ ๊ทผ๋ฌด ์ˆ˜๋‹น
                totalPay = regular + overtime;
                console.log(`๐Ÿ’ผ ๊ธฐ๋ณธ๊ธ‰: ${regular}์›, โฐ ์ดˆ๊ณผ์ˆ˜๋‹น: ${overtime}์›`);
            } else {
                totalPay = basePay * hours;
                console.log(`๐Ÿ’ผ ๊ธฐ๋ณธ๊ธ‰: ${totalPay}์› (์ดˆ๊ณผ ๊ทผ๋ฌด ์—†์Œ)`);
            }

            console.log(`์ด ์ผ๋‹น ๐Ÿ’ฐ: ${totalPay}์›`);
        }

        calculatePay(10); // 10์‹œ๊ฐ„ ๊ทผ๋ฌด ์‹œ ๊ณ„์‚ฐ

        /*
        โœ… ๊ฐœ์„ :
        - ๋ณ€์ˆ˜๋ช… ์˜๋ฏธ ์žˆ๊ฒŒ ๋ณ€๊ฒฝ (a โ†’ basePay, b โ†’ totalPay ๋“ฑ)
        - ๋ถˆํ•„์š”ํ•œ let b ์‚ญ์ œ
        - console.log์— ๊ฒฐ๊ณผ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑ
        - ํ•จ์ˆ˜ ์žฌํ™œ์šฉ์„ฑ ๋†’์ž„
        */

    </script>

    <script>
        /*
        ๐Ÿ“Œ ์ถ”๊ฐ€ ์‹ฌํ™” ์˜ˆ์ œ: ํ™€์ˆ˜/์ง์ˆ˜ ํŒ๋ณ„๊ธฐ (๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž ์‘์šฉ)
        */

        function checkOddEven(num) {
            let result = (num % 2 === 0) ? "์ง์ˆ˜ โœจ" : "ํ™€์ˆ˜ ๐ŸŒ™";
            console.log(`${num}์€(๋Š”) ${result}`);
        }

        checkOddEven(5); // ํ™€์ˆ˜
        checkOddEven(12); // ์ง์ˆ˜

    </script>

</body>

</html>

๐Ÿ“‹ ์กฐ๊ฑด๋ฐ˜๋ณต๋ฌธ

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>์กฐ๊ฑด๋ฌธ & ๋ฐ˜๋ณต๋ฌธ ์™„์ „ ์ •๋ณต</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      background-color: #f9f9f9;
      padding: 20px;
    }
    .score {
      margin: 10px 0;
    }
    .high {
      color: green;
      font-weight: bold;
    }
    .low {
      color: red;
      font-weight: bold;
    }
    .pass {
      color: blue;
    }
    .fail {
      color: darkred;
    }
    #box1, #box2, #box3 {
      margin: 10px 0;
      padding: 5px;
      background: #e0e0e0;
    }
  </style>
</head>

<body>
  <h2>๐Ÿ“š ํ•™์ƒ ์ ์ˆ˜ํ‘œ (์กฐ๊ฑด๋ฌธ + ๋ฐ˜๋ณต๋ฌธ)</h2>

  <!-- ๊ณผ๋ชฉ ์ ์ˆ˜ ์˜์—ญ -->
  <div id="scores">
    <div class="score">๊ตญ์–ด ์ ์ˆ˜: <span data-subject="kor">0</span>์ </div>
    <div class="score">์˜์–ด ์ ์ˆ˜: <span data-subject="eng">0</span>์ </div>
    <div class="score">์ˆ˜ํ•™ ์ ์ˆ˜: <span data-subject="math">0</span>์ </div>
  </div>

  <div class="score">๐Ÿ“Š ํ‰๊ท  ์ ์ˆ˜: <span id="average">0</span>์ </div>
  <div class="score">๐Ÿ’ก ๊ฒฐ๊ณผ: <span id="result">-</span></div>

  <hr>

  <h3>๐Ÿ” ๋ฐ˜๋ณต๋ฌธ ์—ฐ์Šต ์˜์—ญ</h3>
  <div id="box1">๐Ÿšฉ while๋ฌธ ๊ฒฐ๊ณผ: </div>
  <div id="box2">๐Ÿšฉ for๋ฌธ ๊ฒฐ๊ณผ: </div>
  <div id="box3">๐Ÿšฉ do-while๋ฌธ ๊ฒฐ๊ณผ: </div>

  <script>
    // ๐ŸŒŸ 1๏ธโƒฃ ๋ฐ์ดํ„ฐ ์ค€๋น„: ๋ฐฐ์—ด + ๊ฐ์ฒด ํ™œ์šฉ
    const subjects = [
      { name: "๊ตญ์–ด", key: "kor", score: 0 },
      { name: "์˜์–ด", key: "eng", score: 0 },
      { name: "์ˆ˜ํ•™", key: "math", score: 0 }
    ];

    // ๐ŸŒŸ 2๏ธโƒฃ ์‚ฌ์šฉ์ž ์ž…๋ ฅ: prompt๋กœ ์ ์ˆ˜ ์ž…๋ ฅ๋ฐ›๊ธฐ
    subjects.forEach(subject => {
      let input = prompt(`โœ๏ธ ${subject.name} ์ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” (0~100):`);
      // ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ
      if (input !== null && !isNaN(input) && input.trim() !== "") {
        let score = parseInt(input);
        if (score >= 0 && score <= 100) {
          subject.score = score;
        } else {
          alert("โ— 0~100 ์‚ฌ์ด ์ˆซ์ž๋งŒ ์ž…๋ ฅํ•˜์„ธ์š”!");
          location.reload(); // ์ž˜๋ชป๋œ ์ž…๋ ฅ ์‹œ ๋‹ค์‹œ
        }
      } else {
        alert("โ— ์ˆซ์ž๋ฅผ ์ œ๋Œ€๋กœ ์ž…๋ ฅํ•˜์„ธ์š”!");
        location.reload();
      }
    });

    // ๐ŸŒŸ 3๏ธโƒฃ ์ ์ˆ˜ํ‘œ ํ‘œ์‹œ & ์Šคํƒ€์ผ ์ ์šฉ
    let total = 0;
    subjects.forEach(subject => {
      const span = document.querySelector(`span[data-subject="${subject.key}"]`);
      span.textContent = subject.score;
      total += subject.score;

      // ์ ์ˆ˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ƒ‰์ƒ ์ ์šฉ
      if (subject.score >= 90) {
        span.classList.add("high"); // 90์  ์ด์ƒ
      } else if (subject.score < 60) {
        span.classList.add("low");  // 60์  ๋ฏธ๋งŒ
      }
    });

    // ๐ŸŒŸ 4๏ธโƒฃ ํ‰๊ท  ๊ณ„์‚ฐ & ์ถœ๋ ฅ
    const average = (total / subjects.length).toFixed(2);
    document.getElementById("average").textContent = average;

    // ๐ŸŒŸ 5๏ธโƒฃ ์กฐ๊ฑด๋ฌธ (switch)์œผ๋กœ ํ•™์  ํ‘œ์‹œ
    const avgGrade = Math.floor(average / 10);
    const resultSpan = document.getElementById("result");

    switch (avgGrade) {
      case 10:
      case 9:
        resultSpan.textContent = "A (์šฐ์ˆ˜)";
        resultSpan.classList.add("pass");
        break;
      case 8:
        resultSpan.textContent = "B (์–‘ํ˜ธ)";
        resultSpan.classList.add("pass");
        break;
      case 7:
        resultSpan.textContent = "C (๋ณดํ†ต)";
        resultSpan.classList.add("pass");
        break;
      case 6:
        resultSpan.textContent = "D (๋ฏธํก)";
        resultSpan.classList.add("fail");
        break;
      default:
        resultSpan.textContent = "F (๋ถˆํ•ฉ๊ฒฉ)";
        resultSpan.classList.add("fail");
    }

    // =====================
    // ๐Ÿ”ฅ ๋ฐ˜๋ณต๋ฌธ ์‹ฌํ™” ์—ฐ์Šต
    // =====================

    // ๐ŸŒŸ 6๏ธโƒฃ while๋ฌธ: 1~5 ์ถœ๋ ฅ
    let i = 1;
    while (i <= 5) {
      document.getElementById("box1").innerHTML += `${i}&nbsp;&nbsp;`;
      i++;
    }

    // ๐ŸŒŸ 7๏ธโƒฃ for๋ฌธ: 5~1 ์—ญ์ˆœ ์ถœ๋ ฅ
    for (let j = 5; j >= 1; j--) {
      document.getElementById("box2").innerHTML += `${j}&nbsp;&nbsp;`;
    }

    // ๐ŸŒŸ 8๏ธโƒฃ do-while๋ฌธ: 1~5 ์ถœ๋ ฅ + ์กฐ๊ฑด ํ•œ๋ฒˆ๋งŒ ํ™•์ธ
    let k = 1;
    do {
      document.getElementById("box3").innerHTML += `${k}&nbsp;&nbsp;`;
      k++;
    } while (k <= 5);

    // ๐ŸŒŸ 9๏ธโƒฃ ์‹ฌํ™”: ์ค‘์ฒฉ for๋ฌธ์œผ๋กœ ๊ตฌ๊ตฌ๋‹จ ์ผ๋ถ€ ์ถœ๋ ฅ
    document.write(`<hr><h3>๐Ÿ“Œ ๊ตฌ๊ตฌ๋‹จ 2๋‹จ~4๋‹จ</h3>`);
    for (let dan = 2; dan <= 4; dan++) {
      document.write(`<strong>๐Ÿ”ข ${dan}๋‹จ</strong><br>`);
      for (let n = 1; n <= 9; n++) {
        document.write(`${dan} ร— ${n} = ${dan * n}<br>`);
      }
      document.write(`<br>`);
    }

  </script>
</body>

</html>

๐Ÿ“‹ ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ ์กฐ๊ฑด๋ฌธ

<!DOCTYPE html>
<html lang="ko">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JavaScript ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ ์™„์ „์ •๋ณต</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      line-height: 1.6;
    }
    table, th, td {
      border: 1px solid #000;
      border-collapse: collapse;
      padding: 5px;
    }
  </style>
</head>

<body>
  <h2>๐Ÿ“ข ๋ฐ์ดํ„ฐ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค</h2>
  <ul>
    <li>๐ŸŸข <strong>alert()</strong> โ†’ ํ™•์ธ์ฐฝ์— ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ</li>
    <li>๐Ÿ”ต <strong>console.log()</strong> โ†’ ๊ฐœ๋ฐœ์ž ์ฝ˜์†”์ฐฝ์— ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ</li>
    <li>๐ŸŸก <strong>document.write()</strong> โ†’ ํŽ˜์ด์ง€์— ๋ฐ”๋กœ ์ถœ๋ ฅ (๋น„์ถ”์ฒœ)</li>
    <li>๐ŸŸฃ <strong>innerHTML / innerText</strong> โ†’ ํŠน์ • ํƒœ๊ทธ ์•ˆ์— ๊ฐ’ ๋„ฃ๊ธฐ</li>
  </ul>

  <!-- innerHTML๋กœ ์ถœ๋ ฅํ•  ๊ณณ -->
  <div id="outputArea"></div>

  <script>
    // 1๏ธโƒฃ alert() โ†’ ๋ธŒ๋ผ์šฐ์ € ํ™•์ธ์ฐฝ์— ๋„์šฐ๊ธฐ
    alert("๐Ÿšจ ์•Œ๋ฆผ์ฐฝ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋„์›๋‹ˆ๋‹ค!");

    // 2๏ธโƒฃ document.write() โ†’ ํŽ˜์ด์ง€์— ๋ฐ”๋กœ ์ถœ๋ ฅ (์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์ด์ „ ๋‚ด์šฉ ๋ฎ์–ด์”Œ์›€, ์‹ค์ œ๋ก  ์ž˜ ์•ˆ ์”€)
    document.write("<hr>");
    document.write("๐Ÿ“ document.write()๋กœ ์ง์ ‘ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค!<br>");

    // 3๏ธโƒฃ console.log() โ†’ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ(F12) ์ฝ˜์†”์ฐฝ์—์„œ ํ™•์ธ
    console.log("๐Ÿ› ๏ธ ์ฝ˜์†”์ฐฝ์— ๋””๋ฒ„๊น…์šฉ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ!");

    // 4๏ธโƒฃ innerHTML ์‚ฌ์šฉ โ†’ ํƒœ๊ทธ ๋‚ด๋ถ€์— ๋‚ด์šฉ ์‚ฝ์ž…
    const outputDiv = document.getElementById("outputArea");
    outputDiv.innerHTML = `
      <table>
        <tr><th>๐Ÿ“‹ innerHTML๋กœ ์ถœ๋ ฅ</th></tr>
        <tr><td>HTML ํƒœ๊ทธ ํฌํ•จํ•ด์„œ ์ถœ๋ ฅ ๊ฐ€๋Šฅ!</td></tr>
      </table>
    `;
  </script>

  <hr>

  <h2>๐Ÿ“ ๋ฐ์ดํ„ฐ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค</h2>
  <ul>
    <li>๐ŸŸข <strong>confirm()</strong> โ†’ ํ™•์ธ / ์ทจ์†Œ ๋ฒ„ํŠผ์œผ๋กœ true/false ์ž…๋ ฅ ๋ฐ›๊ธฐ</li>
    <li>๐Ÿ”ต <strong>prompt()</strong> โ†’ ์ง์ ‘ ํ…์ŠคํŠธ ์ž…๋ ฅ ๋ฐ›๊ธฐ</li>
    <li>๐ŸŸฃ <strong>HTML ์š”์†Œ (input, textarea ๋“ฑ)</strong> โ†’ ์ž…๋ ฅ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ</li>
  </ul>

  <!-- confirm, prompt ๊ฒฐ๊ณผ ํ‘œ์‹œํ•  ๊ณณ -->
  <div id="resultArea"></div>

  <button onclick="useConfirm()">โœ… ํ™•์ธ์ฐฝ ๋„์šฐ๊ธฐ</button>
  <button onclick="usePrompt()">โœ๏ธ ์ด๋ฆ„ ์ž…๋ ฅ๋ฐ›๊ธฐ</button>

  <hr>

  <h3>๐Ÿ“ฅ ์ž…๋ ฅ ํผ ์˜ˆ์ œ (์‹ฌํ™”)</h3>
  <form onsubmit="processForm(event)">
    <label>๋‚˜์ด ์ž…๋ ฅ: <input type="number" id="ageInput" required></label>
    <input type="submit" value="์ œ์ถœ">
  </form>
  <div id="formResult"></div>

  <script>
    // โœ… confirm() ์˜ˆ์ œ โ†’ true/false ๋ฐ˜ํ™˜
    function useConfirm() {
      let result = confirm("ํ™๊ธธ๋™๋‹˜์ด ๋งž์Šต๋‹ˆ๊นŒ?");

      // ์ฝ˜์†”๋กœ๋„ ์ถœ๋ ฅ
      console.log("confirm ๊ฒฐ๊ณผ:", result);

      // ํ™”๋ฉด์—๋„ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
      const area = document.getElementById("resultArea");
      if (result) {
        area.innerHTML = "<h3>๐Ÿ˜Š ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค, ํ™๊ธธ๋™๋‹˜!</h3>";
      } else {
        area.innerHTML = "<h3>๐Ÿ‘‹ ๋‹ค์Œ์— ๋˜ ๋งŒ๋‚˜์š”!</h3>";
      }
    }

    // โœ๏ธ prompt() ์˜ˆ์ œ โ†’ ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
    function usePrompt() {
      let name = prompt("์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!");

      // ๋นˆ ์นธ์œผ๋กœ ๋‘๊ณ  ์ทจ์†Œ ๋ˆ„๋ฅผ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์ฒดํฌ
      if (name === null || name.trim() === "") {
        document.getElementById("resultArea").innerHTML = "<p>โŒ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.</p>";
      } else {
        document.getElementById("resultArea").innerHTML = `<p>๐Ÿ‘‹ ์•ˆ๋…•ํ•˜์„ธ์š”, <strong>${name}</strong>๋‹˜!</p>`;
      }
    }

    // ๐Ÿ“ฅ ์ž…๋ ฅ ํผ ์ฒ˜๋ฆฌ โ†’ input ์š”์†Œ์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
    function processForm(e) {
      e.preventDefault(); // ํผ ์ œ์ถœ์‹œ ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ๋ฐฉ์ง€

      let age = document.getElementById("ageInput").value;

      if (Number(age) >= 20) {
        document.getElementById("formResult").innerHTML = "โœ… ์„ฑ์ธ์ž…๋‹ˆ๋‹ค!";
      } else {
        document.getElementById("formResult").innerHTML = "๐Ÿšธ ๋ฏธ์„ฑ๋…„์ž์ž…๋‹ˆ๋‹ค!";
      }
    }
  </script>

</body>

</html>