ํ”ผ๋“œ๋ฐฑ&ํšŒ๊ณ /Weekly Feedback

2023๋…„ 4์›” 3์ฃผ์ฐจ ์ฃผ๊ฐ„ํšŒ๊ณ 

์ฑ”๐Ÿป 2024. 1. 24. 20:07

Time tracker

๊ตฌ๋ถ„๋ชฉํ‘œ์‹œ๊ฐ„์‚ฌ์šฉ์‹œ๊ฐ„๋‹ฌ์„ฑ๋ฅ %์›์ธ๋ถ„์„๋‹ค์Œ ์ฃผ์— ์ ์šฉํ•  ๊ฒƒ
๐Ÿง˜โ€โ™€๏ธ์˜์ -5
โœ๏ธ์ง€์ 8277.595%์ด๋ฒˆ์ฃผ๋„ ์ˆ˜๋‹ค ๋„ˆ๋ฌด ๋งŽ์ด ๋–จ์—ˆ๋‹ค ใ… .ใ… โ€ฆโ€ฆ..์•„์˜ˆ ์–˜๊ธฐ ์•ˆ ํ•˜๋Š” ๊ฑด ์†”์งํžˆ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ํ•˜๋ฃจ์— ์ตœ๋Œ€ 30๋ถ„ ์ ์‹ฌ์ด๋‚˜ ์ €๋…๋ฐฅ ๊ฐ™์ด ๋จน์„ ๋•Œ
์ ์‹ฌ์€ ์›ฌ๋งŒํ•˜๋ฉด ํ˜ผ์ž ๋จน์ž ์‚ฌ๋žŒ์—†๋Š” 11์‹œ์—..
์‚ฌํšŒ์ 37233%
๐Ÿƒโ€โ™€๏ธ์‹ ์ฒด์ 1-
๐ŸŒ”์ž 4950102%
๐Ÿงน๊ธฐํƒ€-28

์‹œ๊ฐ„๊ธฐ๋ก

Weekly Feedback

  • table
    ์ด๋ฒˆ ์ฃผ ๋ชฉํ‘œ์ด๋ฒˆ ์ฃผ ๊ฒฐ๊ณผ
    1. Java ๋ณต์Šต
    ๋ชฉํ‘œ : 14, 15, 6, 7, 8์žฅ ๋ฐฑ์ง€ ๋ณต์Šต(๋งค์ผ ํ•œ ์ฑ•ํ„ฐ์”ฉ)
    ์‹œ๊ฐ„ : ์˜คํ›„ 6์‹œ 30๋ถ„~7์‹œ 30๋ถ„
    - ๊ทธ๋‚  ๋ฐฑ์ง€ ๋ณต์Šตํ•˜๊ธฐ๋กœ ํ•œ ์ฑ•ํ„ฐ ์ถœ๊ทผํ•  ๋•Œ ์š”์•ฝ๋ณธ, ์›๋ณด์นด๋กœ ๋ณต์Šต


    2. ๋ถˆ์นœ์ ˆํ•œ SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    ๋ชฉํ‘œ : 11~14์ฑ•ํ„ฐ
    - 11. ์กฐ์ธ
    - 12. ์„œ๋ธŒ์ฟผ๋ฆฌ
    - 13. ์ง‘ํ•ฉ ์—ฐ์‚ฐ
    - 14. ๋ถ„์„ ํ•จ์ˆ˜
    ์‹œ๊ฐ„ : ์˜ค์ „ 8์‹œ 10๋ถ„~10์‹œ


    3. Javascript
    ๋ชฉํ‘œ : ๊ทธ๋‚  ์ˆ˜์—… ๋•Œ ๋ฐฐ์šด ๋‚ด์šฉ ๋ณต์Šต, ์ •๋ฆฌ
    ์‹œ๊ฐ„ : โ‘ ์˜ค์ „ 11์‹œ 30๋ถ„~์˜คํ›„ 2์‹œ โ‘ก ์˜คํ›„ 3์‹œ~์˜คํ›„5์‹œ


    4. CSS
    - 1์ผ 1w3schools(how to ๋ถ„์„ - ์ฃผ์„๋‹ฌ๊ณ  ํ•ต์‹ฌ ์ •๋ฆฌํ•˜๊ธฐ)
    ์›” :
    Tabs
    ํ™” :
    Vertical Tabs
    ์ˆ˜ :
    Tab Headers
    ๋ชฉ :
    Full Page Tabs
    ๊ธˆ :
    Hover Tabs
    ํ†  :
    To Navigation
    1. Java ๋ณต์Šต : ๋‹ฌ์„ฑ๋ฅ  40%
    - 14, 15์žฅ ์™„๋ฃŒ


    2. ๋ถˆ์นœ์ ˆํ•œ SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๋‹ฌ์„ฑ๋ฅ  13%
    - 11์ฑ•ํ„ฐ ์กฐ์ธ p.249๊นŒ์ง€


    3. Javascript : ๋‹ฌ์„ฑ๋ฅ  100%


    4. CSS : ๋‹ฌ์„ฑ๋ฅ  100%

์šฐ์„ ์ˆœ์œ„์— ๋Œ€ํ•œ ๊ณ ๋ฏผ

์ฒ˜์Œ ๊ณ„ํš์€ ์ด๋ ‡๊ฒŒ ์„ธ์› ์—ˆ๋‹ค.

8:00~10:00(2h) : SQL(๋ถˆ์นœ์ ˆํ•œ SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ)
11:30~17:00(4.5h) : Javascript
18:30~19:30(1h) : Java ๋ฐฑ์ง€ ๋ณต์Šต
19:30~21:00(1.5h) : w3schools how to css ๋ถ„์„

์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์–ผ๋งˆ๋‚˜ ๋งŒ๋งŒํ•˜๊ฒŒ ๋ดค์œผ๋ฉด ์ด๋Ÿฐ ๊ณ„ํš์„ ์„ธ์› ๋‚˜ ์‹ถ๋‹ค ใ…Ž

์›”ํ™”์ˆ˜์— ๋ชฐ์•„์น˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ˆ˜์—… ์ง„๋„์— ๋”ฐ๋ผ๊ฐ€๊ณ , ๊ธฐ์กด์— ๊ณ„์† ํ•˜๊ณ  ์žˆ์—ˆ๋˜ ์ž๋ฐ” ๋ณต์Šต, SQL, CSS ๋ถ„์„๊นŒ์ง€ ํ•˜๋ ค๋‹ˆ ๋„ˆ๋ฌด ๋ฒ…์ฐผ๋‹ค.

์ž๋ฐ”๋ฅผ ๊พธ์ค€ํžˆ ๋ณต์Šตํ•ด ์žฅ๊ธฐ๊ธฐ์–ต์— ๋‚จ๊ธฐ๊ณ  ์‹ถ์–ด ํฌ๊ธฐํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ณ , ์—…๋ฌด๋ฅผ ํ•˜๋ฉฐ SQL์—์„œ๋„ ๋ถ€์กฑํ•จ์„ ๋А๊ปด์™”๊ธฐ์— ํฌ๊ธฐํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ CSS๋ฅผ ํฌ๊ธฐํ•ด์•ผ ํ•˜๋‚˜ ๊ณ ๋ฏผ์ด ๋งŽ์•˜๋‹ค. ์–ด๋–ค ๊ณผ๋ชฉ์„ ์šฐ์„ ์ˆœ์œ„์— ๋‘์–ด์•ผ ํ• ์ง€ ๊ฐ์ด ์•ˆ ์žกํ˜€ ์„ ์ƒ๋‹˜๊ป˜ ์กฐ์–ธ์„ ๊ตฌํ–ˆ๋‹ค. ์ด๋ฒˆ ์ฃผ์—๋Š” JS โ†’ CSS โ†’ JAVA โ†’ SQL ์ˆœ์„œ๋กœ ๊ณต๋ถ€ํ•˜๋ผ๊ณ  ๊ถŒ์œ ํ•ด์ฃผ์…จ๋‹ค.

CSS๋Š” ์ง€๊ธˆ์ฒ˜๋Ÿผ ๋งค์ผ ๋ถ„์„ํ•˜๋ฉด ์กธ์—…ํ•  ๋•Œ์ฏค ์—…๋ฌดํ•  ๋•Œ ์–ด๋ ค์›€์ด ์—†์„ ๊ฑฐ๋ผ๊ณ  ๊ผญ ์ค‘์š”ํ•˜๊ฒŒ ํ•™์Šตํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ง์”€ํ•˜์…จ๋‹ค. ์‹ค์ œ๋„๋กœ ์™€๋‹ฟ์•˜๋˜ ๊ฒƒ์€ ์—…๋ฌด๋ฅผ ํ•˜๋ฉด์„œ CSS๋ฅผ ๊ต‰์žฅํžˆ ์‹ซ์–ดํ–ˆ์—ˆ๋Š”๋ฐ ํ•™์›์™€์„œ ๋งค์ผ ํ•˜๋‚˜์”ฉ ๋ถ„์„ํ•˜๋ฉฐ ๊ณต๋ถ€ํ•ด๋ณด๋‹ˆ ์‚ฌ์‹ค์€ ๋ชจ๋ฅด๋‹ˆ๊นŒ ์–ด๋ ค์›Œ์„œ ์‹ซ์–ดํ–ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.
์ฒ˜์Œ์— ๋ถ„์„ํ•  ๋•Œ ๋ชจ๋ฅด๋Š” ์†์„ฑ๋“ค์ด ๋งŽ์•„ ๊ฒ์„ ๋จน์—ˆ์ง€๋งŒ, ์ฐจ๊ทผ์ฐจ๊ทผ ์ฑ…์„ ์ฐพ์•„๊ฐ€๋ฉฐ ๊ณต๋ถ€ํ•˜๋‹ˆ๊นŒ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค. ์™œ ์ง€๊ธˆ๊นŒ์ง€ ์ด๋ ‡๊ฒŒ ํšŒํ”ผํ•˜๊ณ  ๋‘๋ ค์›Œํ–ˆ์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์•„๋Š” ๊ฒŒ ๋งŽ์•„์ง€๋‹ˆ ๋‘๋ ค์›€์ด ์‚ฌ๋ผ์ง€๊ณ  ์žฌ๋ฐŒ๋‹ค. "์ž˜ํ•˜๋ฉด ์žฌ๋ฏธ์žˆ๊ณ  ๋ชปํ•˜๋ฉด ์žฌ๋ฏธ์—†๋‹ค"๋Š” ๋ง์ด ์ •๋ง ๋งž๋‹ค.

์กฐ์–ธ ํ•ด์ฃผ์‹ ๋Œ€๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ œ์ผ ๋†’์€ JS๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ์‹œ๊ฐ„ ๋ฐฐ์น˜๋ฅผ ํ•˜๊ณ  ๋‚จ๋Š” ์‹œ๊ฐ„์— CSS ๋ถ„์„, JAVA ๋ณต์Šต์„ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค! SQL์€ ์•„์˜ˆ ๋’ท์ „์ด ๋˜์–ด์„œ ์กฐ๊ธˆ ์•„์‰ฝ๊ธด ํ•˜์ง€๋งŒ ํ•œ์ •๋œ ์‹œ๊ฐ„ ์•ˆ์—์„œ๋Š” ์šฐ์„ ์ˆœ์œ„์— ๋งž๊ฒŒ ํ•™์Šตํ•ด ์ตœ๋Œ€์˜ ํšจ์œจ์„ ๋‚ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—..!


๊ธˆ์ฃผ์— ๋ฐฐ์šด ๊ฒƒ๋“ค

Java

์ž๋ฐ”์˜ ์ •์„ 14(๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ), 15(์ž…์ถœ๋ ฅ I/O)์žฅ ์น ํŒ์— ๋ฐฑ์ง€ ๋ณต์Šต

15์žฅ์€ ์งง์€ ์ฃผ๊ธฐ๋กœ ์ž์ฃผ ๋ณต์Šตํ•ด์•ผ๊ฒ ๋‹ค ์ ˆ๋ฐ˜์€ ๋ชป์ผ๋„ค

Javascript

์ž๋ฐ”์™€ ๋™์ผํ•œ ๋ถ€๋ถ„์€ ์ œ๊ฑฐํ•˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ์˜ ๊ณ ์œ ํ•œ ํŠน์ง•๋“ค๋งŒ ํ•ต์‹ฌ์œผ๋กœ ๋ชจ์•„์„œ 3์ผ๋งŒ์— ์†์„ฑ์œผ๋กœ ๋ฐฐ์› ๋‹ค. ๊ทธ 3์ผ๋™์•ˆ ใ…‡ใ…ใ…‡โ€ฆ.? ๊ณ„์† ์ด ํ‘œ์ •์ด์—ˆ์Œ ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์ง„๋„๋Š” ๋ฏธ์นœ๋“ฏ์ด ๋น ๋ฅด๊ณ  ๋ณต์Šตํ•  ์‹œ๊ฐ„์€ ๋ถ€์กฑํ•œ๋ฐ ๊ทผ๋ฐ ๋˜ ๋„ˆ๋ฌด ์žฌ๋ฐŒ๊ณ โ€ฆโ€ฆโ€ฆ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์šฐ๋ฉด์„œ ์—ฌ๊ธฐ ์˜ค๊ธธ ์ž˜ ํ–ˆ๊ตฌ๋‚˜ ์ •๋ง ์„ ํƒ ์ž˜ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ์ •๋ง ๋งŽ์ด ํ–ˆ๋‹ค. ๋‚˜ ํ˜ผ์ž ์ฑ… ์‚ฌ์„œ ๋ดค์œผ๋ฉด ์‹œ๊ฐ„ ๋‚ญ๋น„ํ•˜๊ณ  ๋จผ ๊ธธ๋Œ์•„๊ฐ”์„ ๊ฒƒ ๊ฐ™์€๋ฐ ํ•ต์‹ฌ๋งŒ ์งš์–ด์„œ ์„ค๋ช…ํ•ด์ฃผ์‹œ๋‹ˆ๊นŒ ๋„ˆ๋ฌด ์ข‹์•˜๋‹ค. ๋‚จ๊ถ์„ฑ ์„ ์ƒ๋‹˜๊ป˜ ๋ฐฐ์šฐ๋Š”๊ฒŒ ์ •๋ง ์˜๊ด‘,,,

์ž๋ฐ”๋ž‘ ์œ ์‚ฌํ•œ ๋ถ€๋ถ„๋„ ๋งŽ์ด ์žˆ์—ˆ๊ณ (๋žŒ๋‹ค๋Š” ์ž๋ฐ”์—์„œ ์“ฐ๋˜ ๋Œ€๋กœ ๋˜‘๊ฐ™์ด ์จ๋„ ์ž‘๋™ํ•˜๋‹ˆ ์‹ ๊ธฐํ–ˆ์Œ ใ…‹ใ…‹) ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ์ฒด๋Š” ๋™์ผํ•œ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ•ด๋„ ๋ชจ๋“  ๊ฑธ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœํ† ํƒ€์ž…์ด๋ผ๋Š” ๊ฑธ ์จ์•ผ ํ•œ๋‹ค๋Š” ๊ฒŒ ์‹ ๊ธฐํ–ˆ๋‹ค. ์ฒ˜์Œ์— ๋ฐฐ์šธ ๋• ์ข€ ์–ด๋ ค์› ๋Š”๋ฐ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋ฉด ๊ทธ๋ ค๋ณด๋ผ๊ณ  ํ•˜์…”์„œ ์ง์ ‘ ๊ทธ๋ ค๋ณด์•˜๋”๋‹ˆ ์กฐ๊ธˆ์€..? ์ดํ•ด๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.ย ๋ญ๋“  ์ดํ•ด ์•ˆ ๋˜๋ฉด ์“ฐ๊ณ  ๊ทธ๋ ค๋ณด์ž ๋จธ๋ฆฌ์†์œผ๋กœ ์ƒ๊ฐ๋งŒํ•˜๋ฉด ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ

๊ณผ์ œ0 : 5 * 5 ๋น™๊ณ ํŒ ์ƒ์„ฑ

  • ์ฝ”๋“œ
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            table {
                background-image: url( "jokebear.png" );
            }
            tr > td {
                border: 1px solid;
                padding: 50px;
                font-size: 30px;
                transition: 0.3s;
            }
    
            tr > td:hover {
                background-color: yellowgreen;
                opacity: 0.7;
            }
    
        </style>
    </head>
    
    <body>
        <!-- <table onmouseout = "this.style.color = 'red'" onmouseover="this.style.color = 'blue'"> -->
        <table>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </table>
    </body>
    <script>
        let bingo = new Array(25);
    
        // 1~25 ๊ฐ’์„ bingo ๋ฐฐ์—ด์— ์ฐจ๋ก€๋กœ ๋„ฃ๋Š”๋‹ค.
        for (let i = 0; i < bingo.length; i++) {
            bingo[i] = i + 1;
        }
        bingo.sort(() => Math.random() - 0.5); // bingo ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’๋“ค์„ ์„ž๋Š”๋‹ค.
    
        let trs = document.querySelectorAll('tr'); // ํƒœ๊ทธ๊ฐ€ tr์ธ ์š”์†Œ๋“ค์„ ๋ชจ๋‘ ๊ฐ€์ ธ์˜จ๋‹ค.
        let td;
        let tmp = 0;
    
        for (let i = 0; i < trs.length; i++) { // tr์˜ ๊ฐœ์ˆ˜(์ด 5ํ–‰) ๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค. 
            td = trs[i].children; // tr์˜ ์ž์‹ ์š”์†Œ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค.(td 5๊ฐœ)
    
            for (let j = 0; j < td.length; j++) { // td innerHTML์— ๋น™๊ณ  ์ˆซ์ž๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
                td[j].innerHTML = bingo[tmp++];
            }
        }
    </script>
    
    </html>

๊ณผ์ œ1 : ์ฒดํฌํ•œ ์š”์†Œ textarea์— ๋ณด์—ฌ์ฃผ๊ธฐ

  • 1์ฐจ
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            #check {
                font-size: 30px;
                float: left;
                margin-right: 30px;
            }
    
            textarea {
                width: 400px;
                height: 400px;
            }
        </style>
    </head>
    <body>
        <!--
            1.[์™„๋ฃŒ] ํ™”๋ฉด ๊ทธ๋ฆฌ๊ธฐ
            2. ์ด๋ฒคํŠธ ๊ฑธ๊ธฐ
            ์ผ๋‹จ ์ „์ฒด๋Š” ์ œ์™ธํ•˜๊ณ  ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ๋งŒํ•˜์ž.
                1) ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํด๋ฆญํ•˜๋ฉด textarea์— ๊ฐ’์ด ๋‚˜์™€์•ผ ํ•œ๋‹ค.
                    ๊ทธ๋Ÿผ ์ผ๋‹จ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 
                    name์ด sports์ธ ์š”์†Œ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—
                    ๊ทธ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ innerHTML์„ ๊ฐ€์ ธ์™€์„œ ๊ทธ ๋‚ด์šฉ์„ textarea์— ๋„ฃ์–ด์ค€๋‹ค.
                
                2) ์ฒดํฌ๋ฐ•์Šค ์ฒดํฌ ์ทจ์†Œ๋ฅผ ํ•˜๋ฉด ๊ทธ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ innerHTML์„ ๊ฐ€์ ธ์™€์„œ ๊ทธ ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•˜๋Š” textarea์˜ ๋‚ด์šฉ์„ replaceํ•ด์„œ ์ง€์šด๋‹ค.
            3. ์ฒดํฌ๋œ ํ•ญ๋ชฉ์˜ ๊ฐ’์ด textarea์— ๋‚˜์˜ค๊ฒŒ ํ•œ๋‹ค.
        -->
    
        <div id="check">
            <input type="checkbox" name="" id="all" value="๐Ÿฅ์ „์ฒด๐Ÿฅ"> ๐Ÿฅ์ „์ฒด๐Ÿฅ <br>
            <input type="checkbox" name="sports" id="basketball" value="๐Ÿ€๋†๊ตฌ"> ๐Ÿ€๋†๊ตฌ <br>
            <input type="checkbox" name="sports" id="soccer" value="โšฝ๏ธ์ถ•๊ตฌ"> โšฝ๏ธ์ถ•๊ตฌ <br>
            <input type="checkbox" name="sports" id="baseball" value="โšพ๏ธ์•ผ๊ตฌ"> โšพ๏ธ์•ผ๊ตฌ <br>
            <input type="checkbox" name="sports" id="volleyball" value="๐Ÿ๋ฐฐ๊ตฌ"> ๐Ÿ๋ฐฐ๊ตฌ <br>
        </div>
    
        <textarea id="textarea"></textarea>
    
    </body>
    </html>
    <script>
        const sports = document.getElementsByName('sports');
        const textarea = document.getElementById('textarea');
        var i;
    
        for (i = 0; i < sports.length; i++) {
            sports[i].addEventListener("change", function(e) {
                // ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ value๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
                const value = e.srcElement.value; 
                
                // ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ์‚ญ์ œํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๊ฑฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•ด์ค„๊นŒ?
                if (e.srcElement.checked) { // e.srcElement.checked๊ฐ€ true์ด๋ฉด textarea์— ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ 
                    textarea.value += value;
                } else { // false๋ฉด ์ œ๊ฑฐํ•ด์ค€๋‹ค.
                    textarea.value = textarea.value.replace(value, "");
                }
            });
        }
    
        const allClick = document.getElementById('all');
        allClick.onclick = function(e) {
            let values = "";
            let checkedValues = "";
    
            // ์ „์ฒด ์ฒดํฌ๋ฐ•์Šค ์ฒดํฌ ์—ฌ๋ถ€ ๊ฐ€์ ธ์˜ค๊ธฐ
            const checkedYn = e.srcElement.checked ? true : false;
    
            // ์ฒดํฌ ๋˜์–ด์žˆ์œผ๋ฉด ํ•˜์œ„ ์ฒดํฌ ๋ฐ•์Šค๋ฅผ ์ „๋ถ€ ์ฒดํฌํ•ด์ฃผ๊ณ  ์ฒดํฌ๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ํ•˜์œ„ ์ฒดํฌ ๋ฐ•์Šค๋“ค์„ ์ „๋ถ€ ์ฒดํฌ ํ•ด์ œํ•ด์ค€๋‹ค.
            for (let i = 0; i < sports.length; i++) {
                sports[i].checked = checkedYn;
            }
    
            for (let i = 0; i < sports.length; i++) {
                // checked = true -> ๋ชจ๋“  sports ์š”์†Œ๋“ค์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
                values += sports[i].value; 
                // checked = false -> ๋งŒ์•ฝ์— ์ „์ฒด ์ฒดํฌ๋ฅผ ํ•ด์ œํ–ˆ๋Š”๋ฐ ์ถ•๊ตฌ๊ฐ€ ์„ ํƒ๋˜์–ด์žˆ์œผ๋ฉด ์ถ•๊ตฌ๋Š” ์‚ด์•„์žˆ์–ด์•ผ ํ•จ ๊ทธ๊ฑธ ์œ„ํ•ด์„œ checkedValues์— ๊ฐ’๋“ค์„ ๋„ฃ์–ด์ค€๋‹ค.
                if (sports[i].checked) { checkedValues += sports[i].value; }
            }
    
            textarea.value = checkedYn ? values : checkedValues;
        }
    </script>
  • 2์ฐจ
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            #check {
                font-size: 30px;
                float: left;
                margin-right: 30px;
            }
    
            textarea {
                width: 400px;
                height: 400px;
            }
        </style>
    </head>
    <body>
        <!--
            1.[์™„๋ฃŒ] ํ™”๋ฉด ๊ทธ๋ฆฌ๊ธฐ
            2. ์ด๋ฒคํŠธ ๊ฑธ๊ธฐ
            ์ผ๋‹จ ์ „์ฒด๋Š” ์ œ์™ธํ•˜๊ณ  ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ๋งŒํ•˜์ž.
                1) ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํด๋ฆญํ•˜๋ฉด textarea์— ๊ฐ’์ด ๋‚˜์™€์•ผ ํ•œ๋‹ค.
                    ๊ทธ๋Ÿผ ์ผ๋‹จ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 
                    name์ด sports์ธ ์š”์†Œ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—
                    ๊ทธ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ innerHTML์„ ๊ฐ€์ ธ์™€์„œ ๊ทธ ๋‚ด์šฉ์„ textarea์— ๋„ฃ์–ด์ค€๋‹ค.
                
                2) ์ฒดํฌ๋ฐ•์Šค ์ฒดํฌ ์ทจ์†Œ๋ฅผ ํ•˜๋ฉด ๊ทธ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ innerHTML์„ ๊ฐ€์ ธ์™€์„œ ๊ทธ ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•˜๋Š” textarea์˜ ๋‚ด์šฉ์„ replaceํ•ด์„œ ์ง€์šด๋‹ค.
            3. ์ฒดํฌ๋œ ํ•ญ๋ชฉ์˜ ๊ฐ’์ด textarea์— ๋‚˜์˜ค๊ฒŒ ํ•œ๋‹ค.
        -->
    
        <div id="check">
            <input type="checkbox" name="sports" id="all" value="๐Ÿฅ์ „์ฒด๐Ÿฅ"> ๐Ÿฅ์ „์ฒด๐Ÿฅ <br>
            <input type="checkbox" name="sports" id="basketball" value="๐Ÿ€๋†๊ตฌ"> ๐Ÿ€๋†๊ตฌ <br>
            <input type="checkbox" name="sports" id="soccer" value="โšฝ๏ธ์ถ•๊ตฌ"> โšฝ๏ธ์ถ•๊ตฌ <br>
            <input type="checkbox" name="sports" id="baseball" value="โšพ๏ธ์•ผ๊ตฌ"> โšพ๏ธ์•ผ๊ตฌ <br>
            <input type="checkbox" name="sports" id="volleyball" value="๐Ÿ๋ฐฐ๊ตฌ"> ๐Ÿ๋ฐฐ๊ตฌ <br>
        </div>
    
        <textarea id="textarea"></textarea>
    
    </body>
    </html>
    <script>
        const sportsCheckbox = document.getElementsByName('sports');
        const textarea = document.getElementById('textarea');
        var i;
    
        function change(e) {
            const id = e.srcElement.id; // ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ id
            
            // id๊ฐ€ all์ด๋ฉด ํ•˜์œ„ ์ฒดํฌ ๋ฐ•์Šค๋ฅผ ์ „๋ถ€ ์ฒดํฌ/์ฒดํฌ ํ•ด์ œ ํ•ด์ค€๋‹ค.
            if (id == 'all') {
                for (let i = 0; i < sportsCheckbox.length; i++)
                sportsCheckbox[i].checked =  e.srcElement.checked;
            }
            
            let result = "";
            // ์ฒดํฌ ๋˜์–ด์žˆ๋Š” ๊ฐ’๋“ค์„ ์˜ค๋ฅธ์ชฝ textarea์— ๋„ฃ์–ด์ค€๋‹ค.
            for (let i = 0; i < sportsCheckbox.length; i++) {
                let sports = sportsCheckbox[i];
                
                // ์ฒดํฌ๋˜์–ด์žˆ๊ณ  id๊ฐ€ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์š”์†Œ์˜ ๊ฐ’์„ result์— ๋„ฃ์–ด์ค€๋‹ค.
                if (sports.checked && sports.id != 'all') {
                    result += sports.value;
                } 
            }
            
            // ์ตœ์ข… ๊ฐ’์„ textarea์˜ value์— ๋„ฃ์–ด์ค€๋‹ค.
            textarea.value = result; 
        }
    
        for (i = 0; i < sportsCheckbox.length; i++) {
            sportsCheckbox[i].addEventListener("click", change);
        }
    </script>
const sports = document.getElementsByName('sports');
const textarea = document.getElementById('textarea');
var i;

for (i = 0; i < sports.length; i++) {
    sports[i].addEventListener("change", function(e) {
        // ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ value๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
        const value = e.srcElement.value; 
        
        // ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ์‚ญ์ œํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๊ฑฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•ด์ค„๊นŒ?
        if (e.srcElement.checked) { // e.srcElement.checked๊ฐ€ true์ด๋ฉด textarea์— ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ 
            textarea.value += value;
        } else { // false๋ฉด ์ œ๊ฑฐํ•ด์ค€๋‹ค.
            textarea.value = textarea.value.replace(value, "");
        }
    });
}

const allClick = document.getElementById('all');
allClick.onclick = function(e) {
    let values = "";
    let checkedValues = "";

    // ์ „์ฒด ์ฒดํฌ๋ฐ•์Šค ์ฒดํฌ ์—ฌ๋ถ€ ๊ฐ€์ ธ์˜ค๊ธฐ
    const checkedYn = e.srcElement.checked ? true : false;

    // ์ฒดํฌ ๋˜์–ด์žˆ์œผ๋ฉด ํ•˜์œ„ ์ฒดํฌ ๋ฐ•์Šค๋ฅผ ์ „๋ถ€ ์ฒดํฌํ•ด์ฃผ๊ณ  ์ฒดํฌ๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ํ•˜์œ„ ์ฒดํฌ ๋ฐ•์Šค๋“ค์„ ์ „๋ถ€ ์ฒดํฌ ํ•ด์ œํ•ด์ค€๋‹ค.
    for (let i = 0; i < sports.length; i++) {
        sports[i].checked = checkedYn;
    }

    for (let i = 0; i < sports.length; i++) {
        // checked = true -> ๋ชจ๋“  sports ์š”์†Œ๋“ค์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
        values += sports[i].value; 
        // checked = false -> ๋งŒ์•ฝ์— ์ „์ฒด ์ฒดํฌ๋ฅผ ํ•ด์ œํ–ˆ๋Š”๋ฐ ์ถ•๊ตฌ๊ฐ€ ์„ ํƒ๋˜์–ด์žˆ์œผ๋ฉด ์ถ•๊ตฌ๋Š” ์‚ด์•„์žˆ์–ด์•ผ ํ•จ ๊ทธ๊ฑธ ์œ„ํ•ด์„œ checkedValues์— ๊ฐ’๋“ค์„ ๋„ฃ์–ด์ค€๋‹ค.
        if (sports[i].checked) { checkedValues += sports[i].value; }
    }

    textarea.value = checkedYn ? values : checkedValues;
}

const sportsCheckbox = document.getElementsByName('sports');
const textarea = document.getElementById('textarea');
var i;

function change(e) {
    const id = e.srcElement.id; // ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ id
    
    // id๊ฐ€ all์ด๋ฉด ํ•˜์œ„ ์ฒดํฌ ๋ฐ•์Šค๋ฅผ ์ „๋ถ€ ์ฒดํฌ/์ฒดํฌ ํ•ด์ œ ํ•ด์ค€๋‹ค.
    if (id == 'all') {
        for (let i = 0; i < sportsCheckbox.length; i++)
        sportsCheckbox[i].checked =  e.srcElement.checked;
    }
    
    let result = "";
    // ์ฒดํฌ ๋˜์–ด์žˆ๋Š” ๊ฐ’๋“ค์„ ์˜ค๋ฅธ์ชฝ textarea์— ๋„ฃ์–ด์ค€๋‹ค.
    for (let i = 0; i < sportsCheckbox.length; i++) {
        let sports = sportsCheckbox[i];
        
        // ์ฒดํฌ๋˜์–ด์žˆ๊ณ  id๊ฐ€ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์š”์†Œ์˜ ๊ฐ’์„ result์— ๋„ฃ์–ด์ค€๋‹ค.
        if (sports.checked && sports.id != 'all') {
            result += sports.value;
        } 
    }
    
    // ์ตœ์ข… ๊ฐ’์„ textarea์˜ value์— ๋„ฃ์–ด์ค€๋‹ค.
    textarea.value = result; 
}

for (i = 0; i < sportsCheckbox.length; i++) {
    sportsCheckbox[i].addEventListener("click", change);
}

๊ณผ์ œ2 : ์š”์†Œ ์˜ฎ๊ธฐ๊ธฐ

๐Ÿ’ก
>, < : ์„ ํƒํ•œ ์š”์†Œ ์˜ฎ๊ธฐ๊ธฐ

>>, << : ์ „์ฒด ์š”์†Œ ์˜ฎ๊ธฐ๊ธฐ

  • 1์ฐจ
    • html
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Document</title>
          <style>
              select {
                  float: left;
                  width: 70px;
                  height: 100px;
              }
      
              select > option {
                  /* font-size: 30px; */
                  /* margin: 10px; */
              }
      
              #buttons {
                  float: left;
              }
      
              #buttons > button{
                  width: 30px;
                  margin: 0 10px;
                  display: block;
              }
          </style>
      </head>
      <body>
          <!--
              1. html ์š”์†Œ ๊ทธ๋ฆฌ๊ธฐ
                  1) select ์ƒ์„ฑ
                  2) ๋ฒ„ํŠผ ์ƒ์„ฑ
                  3) ์˜ค๋ฅธ์ชฝ select ์ƒ์„ฑ
      
          -->
          <select id="sports" multiple>
              <option id="basketball">๐Ÿ€๋†๊ตฌ๐Ÿ€</option>
              <option id="soccer">โšฝ๏ธ์ถ•๊ตฌโšฝ๏ธ</option>
              <option id="baseball">โšพ๏ธ์•ผ๊ตฌโšพ๏ธ</option>
              <option id="volleyball">๐Ÿ๋ฐฐ๊ตฌ๐Ÿ</option>
          </select>
      
          <div id="buttons">
              <button id="add">></button>
              <button id="addAll">>></button>
              <button id="minus"><</button>
              <button id="minusAll"><<</button>
              
          </div>
          
          <select id="sports2" multiple></select>
      </body>
    • js
      
      <script>
          const originalSports = document.getElementById('sports'); // ์™ผ์ชฝ select(์›๋ณธ)
          const movedSports = document.getElementById('sports2'); // ์˜ค๋ฅธ์ชฝ select(์ด๋™)
      
          // ์„ ํƒ ๋„ฃ๊ธฐ ๋ฒ„ํŠผ(add), ์„ ํƒ ๋นผ๊ธฐ ๋ฒ„ํŠผ(minus) ํ•ฉ์นจ
          function addOption(event) {
              const id = event.srcElement.id; // ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ id๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
              // 1. ์„ ํƒํ•œ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค => id๊ฐ€ add๋ฉด ์„ ํƒํ•œ options๋ฅผ original์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  minus๋ฉด ์„ ํƒํ•œ options๋ฅผ moved์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
              const selectedOptions = id == 'add' ? Array.from(originalSports.selectedOptions) : Array.from(movedSports.selectedOptions);
              // ์„ ํƒํ•œ ์š”์†Œ๊ฐ€ ์ด๋™๋  select => id๊ฐ€ add๋ฉด ์•ž์œผ๋กœ ์ถ”๊ฐ€๋  select๊ฐ€ movedSports, id๊ฐ€ minus๋ฉด ์•ž์œผ๋กœ ์ถ”๊ฐ€๋  select๊ฐ€ originalSports
              const toBeAdded = id == 'add' ? movedSports : originalSports; 
      
              // 2. ์„ ํƒํ•œ ์š”์†Œ๋ฅผ ์ด๋™์‹œํ‚จ๋‹ค.
              for (let i = 0; i < selectedOptions.length; i++) {
                  toBeAdded.appendChild(selectedOptions[i]);
              }
          }
          
          // ์ „์ฒด ๋„ฃ๊ธฐ ๋ฒ„ํŠผ(addAll), ์ „์ฒด ๋นผ๊ธฐ ๋ฒ„ํŠผ(minusAll)ํ•ฉ์นจ
          function addAllOption(event) {
              const id = event.srcElement.id; // ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ id๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
              // 1. select์˜ ๋ชจ๋“  option์„ ๊ฐ€์ ธ์˜จ๋‹ค. => id๊ฐ€ addAll์ด๋ฉด options๋ฅผ original์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  minusAll์ด๋ฉด moved์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
              const options = id == 'addAll' ? Array.from(originalSports.children) : Array.from(movedSports.children);
              // ์š”์†Œ๊ฐ€ ์ด๋Œ๋  select => id๊ฐ€ addAll๋ฉด ์•ž์œผ๋กœ ์ถ”๊ฐ€๋  select๊ฐ€ movdedSports, id๊ฐ€ minusAll์ด๋ฉด ์•ž์œผ๋กœ ์ถ”๊ฐ€๋  select๊ฐ€ originalSports
              const toBeAdded = id == 'addAll' ? movedSports : originalSports; 
      
              // 2. option๋“ค์„ ์ด๋™์‹œํ‚จ๋‹ค.
              for (let i = 0; i < options.length; i++) {
                  toBeAdded.appendChild(options[i]);
              }
          }
      
          // ์„ ํƒ ์ถ”๊ฐ€ ๋ฒ„ํŠผ
          document.getElementById('add').addEventListener("click", addOption);
          // ์„ ํƒ ๋นผ๊ธฐ ๋ฒ„ํŠผ
          document.getElementById('minus').addEventListener("click", addOption);
      
          // ์ „์ฒด ์ถ”๊ฐ€ ๋ฒ„ํŠผ
          document.getElementById('addAll').addEventListener("click", addAllOption);
          // ์ „์ฒด ๋นผ๊ธฐ ๋ฒ„ํŠผ
          document.getElementById('minusAll').addEventListener("click", addAllOption);
      
      </script>
      </html>
  • 2์ฐจ : 1์ฐจ ์›์žฅ๋‹˜ ํ”ผ๋“œ๋ฐฑ ํ›„ ๋‹ค์‹œ
    const originalSports = document.getElementById('sports'); // ์™ผ์ชฝ select(์›๋ณธ)
    const movedSports = document.getElementById('sports2'); // ์˜ค๋ฅธ์ชฝ select(์ด๋™)
    
    // ์„ ํƒ๋œ option์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
    function moveSelectedLeftToRight() {
        moveSelected(left, right);
    }
    // ์„ ํƒ๋œ option์„ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
    function moveSelectedRightToLeft() {
        moveSelected(right, left);
    }
    
    // ๋ชจ๋“  option์„ ์˜ฎ๊ธด๋‹ค. 
    function moveAll(from, to) {
        // 1. ๋ชจ๋“  option์„ ์„ ํƒํ•œ๋‹ค.
        selectAll(from);
    
        // 2. ์„ ํƒ๋œ option์„ ์˜ฎ๊ธด๋‹ค.
        moveSelected(from, to);
    }
    
    // ์„ ํƒ๋œ option์„ from์—์„œ to๋กœ ์˜ฎ๊ธด๋‹ค.
    function moveSelected(from, to) {
    }
    
    // target์˜ ๋ชจ๋“  option์„
    function selectAll(target){
    
    }

    const leftSelect = document.getElementById('leftSelect'); // ์™ผ์ชฝ select(์›๋ณธ)
    const rightSelect = document.getElementById('rightSelect'); // ์˜ค๋ฅธ์ชฝ select(์ด๋™)
    
    // ์„ ํƒ๋œ option์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
    function moveSelectedLeftToRight() { 
        moveSelected(leftSelect, rightSelect); 
    }
    
    // ์„ ํƒ๋œ option์„ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
    function moveSelectedRightToLeft() { 
        moveSelected(rightSelect, leftSelect); 
    }
    
    // ๋ชจ๋“  option์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
    function moveAllLeftToRight() { 
        moveAll(leftSelect, rightSelect); 
    }
    
    // ๋ชจ๋“  option์„ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค. 
    function moveAllRightToLeft() { 
        moveAll(rightSelect, leftSelect); 
    }
    
    // ๋ชจ๋“  option์„ ์˜ฎ๊ธด๋‹ค.
    function moveAll(from, to) { 
        // 1. ๋ชจ๋“  option์„ ์„ ํƒํ•œ๋‹ค.
        selectAll(from);
    
        // 2. ์„ ํƒ๋œ option์„ ์˜ฎ๊ธด๋‹ค.
        moveSelected(from, to);
    }
    
    // ์„ ํƒ๋œ option์„ from์—์„œ to๋กœ ์˜ฎ๊ธด๋‹ค.
    function moveSelected(from, to) {
        const selectedOptions = Array.from(from.selectedOptions);
    
        for (let i = 0; selectedOptions.length; i++) {
            to.appendChild(selectedOptions[i]);
        }
    }
    
    // target์˜ ๋ชจ๋“  option์„ ์„ ํƒํ•œ๋‹ค.
    function selectAll(target){
        const options = target.children;
    
        for (let i = 0; i < options.length; i++) {
            options[i].selected = true;
        }
    }

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์„ ํƒํ•œ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฑธ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋กœ ์ฒ˜๋ฆฌํ•œ ๊ฒƒ ๋•Œ๋ฌธ์ธ์ง€ ์ฝ”๋“œ๊ฐ€ ์ „ํ˜€ ํ•œ ๋ˆˆ์— ๋“ค์–ด์˜ค์ง€ ์•Š์•˜๋‹ค.

์›์žฅ๋‹˜์ด ์ž‘์„ฑํ•ด์ฃผ์‹  ์ฝ”๋“œ๋Š” moveSelectedLeftToRight()์™€ moveSelectedRightToLeft()๋ฅผ ๋งŒ๋“ค์–ด์„œ moveSelected()์— ์ธ์ˆ˜๋งŒ ์ž๋ฆฌ ๋ฐ”๊พธ์–ด์„œ ๋„ฃ์–ด์ฃผ๋‹ˆ๊นŒ ํ•จ์ˆ˜ ์žฌ์‚ฌ์šฉ๋„ ํ•˜๋ฉด์„œ ์ด ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ๋™์ž‘, ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๋ณด์—ฌ ํ›จ์”ฌ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์›Œ์กŒ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ 5์›์น™์ค‘ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™โ€ฆ ์ „ํ˜€ ์™€๋‹ฟ์ง€ ์•Š์•˜๋Š”๋ฐ ์š”์†Œ ์ด๋™ ๊ณผ์ œ ํ•˜๋ฉด์„œ ์ด์ œ์•ผ ์ดํ•ดํ–ˆ๋‹ค. ์ธํ„ฐ๋„ท์—์„œ ๋– ๋“œ๋Š” ์ฃผ์„ ๋‹ฌ์ง€ ๋ง๋ผ๊ณ  ํ•˜๋Š” ๊ฒŒ ๋ง๋„ ์•ˆ ๋˜๋Š” ์†Œ๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ ์ฃผ์„์ด ํ•„์š”์—†์„ ์ •๋„๋กœ ์˜๋„๊ฐ€ ๋‹ค ๋ณด์ด๊ณ  ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ผ๋Š” ๋œป์ด ์•„๋‹ˆ์—ˆ์„๊นŒ? ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜์˜ ์—ญํ• ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‹ˆ ๊ตณ์ด ์ฃผ์„์„ ๋‹ฌ์ง€ ์•Š์•„๋„ ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์›Œ์กŒ๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๊ตฌ๋‚˜ํ•˜๊ณ  ๊นจ๋‹ฌ์Œ์„ ์–ป์–ด์„œ ๋„ˆ๋ฌด ์งœ๋ฆฟํ–ˆ๋‹ค..!

์›๋ž˜๋Š” ์ ˆ๋Œ€ ๋‹ต์„ ์•Œ๋ ค์ฃผ์ง€ ์•Š์œผ์‹œ๊ณ  ์˜ค๋žซ๋™์•ˆ ๊ณ ๋ฏผํ•ด์„œ ๋‚˜๋งŒ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๊ฐ€๋ผ๊ณ  ํ•˜์‹œ๋Š”๋ฐ ์ฃผ์„ ์—ด์‹ฌํžˆ ๋‹ฌ์•˜๊ณ  ๋ฐœ์ „ ๊ฐ€๋Šฅ์„ฑ์˜ ์—ฌ์ง€ ใ…‹ใ…‹ใ…‹ใ…‹? ๊ฐ€ ๋ณด์—ฌ์„œ ์•ž์œผ๋กœ ์ด๋Ÿฐ์‹์œผ๋กœ ์งœ๋ผ๊ณ  ๊ฐ€์ด๋“œ๋ฅผ ์ฃผ์‹  ๊ฒƒ ๊ฐ™๋‹ค. ์ฒ˜์Œ์— ๊ฐ€์ด๋“œ ์ฃผ์…จ์„ ๋•Œ ์™€ ์ง„์งœ ๊ฐํƒ„๋งŒ ๋‚˜์™”๋‹ค. ์–ด๋–ป๊ฒŒ ์ €๋ ‡๊ฒŒ ๋ฐ”๋กœ๋ฐ”๋กœ ์ถ”์ƒํ™”๋œ ์ฝ”๋“œ๋ฅผ ๋š๋”ฑ ์ž‘์„ฑํ•˜์‹œ๋Š” ๊ฑฐ์ง€..? ๋‚˜๋„ ์ €๋Ÿฐ ๊ณ ์ˆ˜๊ฐ€ ๋˜๊ณ  ์‹ถ์–ด์š”๐Ÿฅน

๊ตต์งํ•˜๊ฒŒ ๋‚ด๊ฐ€ ๋ญ˜ ํ•˜๊ฒ ๋‹ค ์ฃผ์„์œผ๋กœ ์ ๊ณ  ๊ทธ ๋‹จ๊ณ„๋“ค์„ ํ•จ์ˆ˜ํ™”ํ•˜๋Š” ์—ฐ์Šต ๊พธ์ค€ํžˆ ํ•˜๊ธฐ ๊ณ„์† ์™ผ์ชฝ ์ฒ˜๋Ÿผ ์งœ๊ณ  ๋‚˜์œ ์Šต๊ด€ ๊ณ ์ณ์ง€์ง€ ์•Š์œผ๋ฉด ์›์žฅ๋‹˜๊ป˜ ๋ฐฐ์šฐ๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋‹ค. ์ด๊ฒƒ๋งŒํผ์€ ํ™•์‹คํžˆ ๊ณ ์น˜๊ณ  ๊ฐ€์ ธ๊ฐ€์ž.

    // ์„ ํƒ ๋„ฃ๊ธฐ ๋ฒ„ํŠผ(add), ์„ ํƒ ๋นผ๊ธฐ ๋ฒ„ํŠผ(minus) ํ•ฉ์นจ
    function addOption(event) {
        const id = event.srcElement.id; // ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ id๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
        // 1. ์„ ํƒํ•œ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค => id๊ฐ€ add๋ฉด ์„ ํƒํ•œ options๋ฅผ original์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  minus๋ฉด ์„ ํƒํ•œ options๋ฅผ moved์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
        const selectedOptions = id == 'add' ? Array.from(originalSports.selectedOptions) : Array.from(movedSports.selectedOptions);
        // ์„ ํƒํ•œ ์š”์†Œ๊ฐ€ ์ด๋™๋  select => id๊ฐ€ add๋ฉด ์•ž์œผ๋กœ ์ถ”๊ฐ€๋  select๊ฐ€ movedSports, id๊ฐ€ minus๋ฉด ์•ž์œผ๋กœ ์ถ”๊ฐ€๋  select๊ฐ€ originalSports
        const toBeAdded = id == 'add' ? movedSports : originalSports; 

        // 2. ์„ ํƒํ•œ ์š”์†Œ๋ฅผ ์ด๋™์‹œํ‚จ๋‹ค.
        for (let i = 0; i < selectedOptions.length; i++) {
            toBeAdded.appendChild(selectedOptions[i]);
        }
    }
    
    // ์ „์ฒด ๋„ฃ๊ธฐ ๋ฒ„ํŠผ(addAll), ์ „์ฒด ๋นผ๊ธฐ ๋ฒ„ํŠผ(minusAll)ํ•ฉ์นจ
    function addAllOption(event) {
        const id = event.srcElement.id; // ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์˜ id๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
        // 1. select์˜ ๋ชจ๋“  option์„ ๊ฐ€์ ธ์˜จ๋‹ค. => id๊ฐ€ addAll์ด๋ฉด options๋ฅผ original์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  minusAll์ด๋ฉด moved์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
        const options = id == 'addAll' ? Array.from(originalSports.children) : Array.from(movedSports.children);
        // ์š”์†Œ๊ฐ€ ์ด๋Œ๋  select => id๊ฐ€ addAll๋ฉด ์•ž์œผ๋กœ ์ถ”๊ฐ€๋  select๊ฐ€ movdedSports, id๊ฐ€ minusAll์ด๋ฉด ์•ž์œผ๋กœ ์ถ”๊ฐ€๋  select๊ฐ€ originalSports
        const toBeAdded = id == 'addAll' ? movedSports : originalSports; 

        // 2. option๋“ค์„ ์ด๋™์‹œํ‚จ๋‹ค.
        for (let i = 0; i < options.length; i++) {
            toBeAdded.appendChild(options[i]);
        }
    }

const leftSelect = document.getElementById('leftSelect'); // ์™ผ์ชฝ select(์›๋ณธ)
const rightSelect = document.getElementById('rightSelect'); // ์˜ค๋ฅธ์ชฝ select(์ด๋™)

// ์„ ํƒ๋œ option์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
function moveSelectedLeftToRight() { 
    moveSelected(leftSelect, rightSelect); 
}

// ์„ ํƒ๋œ option์„ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
function moveSelectedRightToLeft() { 
    moveSelected(rightSelect, leftSelect); 
}

// ๋ชจ๋“  option์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
function moveAllLeftToRight() { 
    moveAll(leftSelect, rightSelect); 
}

// ๋ชจ๋“  option์„ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค. 
function moveAllRightToLeft() { 
    moveAll(rightSelect, leftSelect); 
}

// ๋ชจ๋“  option์„ ์˜ฎ๊ธด๋‹ค.
function moveAll(from, to) { 
    // 1. ๋ชจ๋“  option์„ ์„ ํƒํ•œ๋‹ค.
    selectAll(from);

    // 2. ์„ ํƒ๋œ option์„ ์˜ฎ๊ธด๋‹ค.
    moveSelected(from, to);
}

// ์„ ํƒ๋œ option์„ from์—์„œ to๋กœ ์˜ฎ๊ธด๋‹ค.
function moveSelected(from, to) {
    const selectedOptions = Array.from(from.selectedOptions);

    for (let i = 0; selectedOptions.length; i++) {
        to.appendChild(selectedOptions[i]);
    }
}

// target์˜ ๋ชจ๋“  option์„ ์„ ํƒํ•œ๋‹ค.
function selectAll(target){
    const options = target.children;

    for (let i = 0; i < options.length; i++) {
        options[i].selected = true;
    }
}

๊ณผ์ œ3 : ์นด๋“œ ๊ฒŒ์ž„

๐Ÿ’ก
<์š”๊ตฌ์‚ฌํ•ญ>
show : ๋ชจ๋“  ์นด๋“œ ๋ณด์—ฌ์ฃผ๊ธฐ

hide : ๋ชจ๋“  ์นด๋“œ ์ˆจ๊ธฐ๊ธฐ

shuffle : ์นด๋“œ ์„ž๊ธฐ

๋‘ ์žฅ์˜ ์นด๋“œ๋ฅผ ๋’ค์ง‘์—ˆ์„ ๋•Œ ๊ฒŒ์ž„ ์„ฑ๊ณต. ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์‹œ ๋’ค์ง‘์–ด์ง„๋‹ค.

  • ์ „์ฒด ์ฝ”๋“œ
    <!DOCTYPE html>
    
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            img {
                width: 120px;
                height: 180px;
                cursor: pointer;
    
                transition: transform 1s ease;
            }
    
            img:hover {
                transform: translateY(-30px);
                outline: black solid 1px;
            }
        </style>
    
    </head>
    
    <body>
        <button id="showBtn">show</button>
        <button id="hideBtn">hide</button>
        <button id="shuffleBtn">shuffle</button>
        <br><br>
        <div id="board">
            <!-- ์นด๋“œ๋ฅผ ๋ณด์—ฌ์ค„ ๊ณณ -->
        </div>
        
        <script>
            let cardArr = new Array(52);
    
            window.onload = function () { // main ๋ฉ”์„œ๋“œ
                initGame(cardArr); // ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™”
                // for (let i = 0; i < 10000000000; i++) {
    
                // }
               startGame(cardArr); // ๊ฒŒ์ž„ ์‹œ์ž‘
            }
    
            // show ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์นด๋“œ๋ฅผ ์ „๋ถ€ ๋ณด์—ฌ์ค€๋‹ค.
            document.getElementById('showBtn').onclick = function() { flipAll(cardArr, false); };
            // hide ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์นด๋“œ๋ฅผ ์ „๋ถ€ ์ˆจ๊ธด๋‹ค.
            document.getElementById('hideBtn').onclick = function() { flipAll(cardArr, true); };
    
            document.getElementById('shuffleBtn').onclick = function() {
                initGame(cardArr);
                startGame(cardArr);
            };
    
            const A = 1;
            const J = 12
            const Q = 12;
            const K = 13;
    
            const DIAMOND = 1;
            const CLOVER = 2;
            const HEART = 3;
            const SPADE = 4;
            
            function Card(number, suit) {
                //TODO suit๋ž‘ number ์ง€์—ญ๋ณ€์ˆ˜ํ™”ํ•˜๊ธฐ
                this.number = number;
                this.suit = suit;
                this.isFront = true;
            }
    
            Card.prototype.toString = function() {
                let suit = "";
                let number = "";
    
                switch (this.suit) {
                    case 1: suit = "โ—†"; break;
                    case 2: suit = "โ™ง"; break;
                    case 3: suit = "โ™ก"; break;
                    case 4: suit = "โ™ "; break;
                    default:
                }
    
                switch (this.number) {
                    case 1:  number = "A"; break;
                    case 11: number = "J"; break;
                    case 12: number = "Q"; break;
                    case 13: number = "K"; break;
                    default: number = this.number + "";
                }
    
                return suit + number;
            }
    
            // ์นด๋“œ์˜ ์•„์ด๋””(number + "" + suit)๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
            Card.prototype.getId = function() {
                return this.number + "" + this.suit;
            }
    
            // ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™”
            function initGame() {
                // 1. card๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
                
                // 2. ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
                initCard(cardArr);
                
                // 3. ๋ฐฐ์—ด์„ ์„ž๋Š”๋‹ค.
                shuffleCard(cardArr);
    
                // 4. ์นด๋“œ๋ฅผ div#board์— ๋ณด์—ฌ์ค€๋‹ค.
                showCard(cardArr);
    
                // 5. ๊ฐ ์นด๋“œ์— ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.
                let imgArr = document.getElementsByTagName("img");
    
                for (let i = 0; i < imgArr.length; i++) {
                    imgArr[i].onclick = cardClick;
                }
    
                return cardArr;
            }
    
            function startGame(cardArr) {
                // ์นด๋“œ ์ „๋ถ€๋ฅผ ๋’ท๋ฉด ๋ณด์—ฌ์ค€๋‹ค.
                flipAll(cardArr, true);
            }
    
            // function printCardArr(cardArr) {
            //     for (let i = 0; i < cardArr.length; i++) {
            //         console.log(cardArr[i].toString());
            //     }
            // }
    
            // ์นด๋“œ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
            function initCard(cardArr) {
                let suitChk = 1;
                let numberChk = 1;
    
                for (let i = 0; i < cardArr.length; i++) {
                    cardArr[i] = new Card(numberChk++, suitChk++);
    
                    if (suitChk > 4) suitChk = 1; // ๋‹ค์ด์•„๋ชฌ๋“œ(โ—†) = 4 ๊ทธ๋ฆผ ์นด๋“œ๊นŒ์ง€ ๋งŒ๋“ค์—ˆ์„ ๊ฒฝ์šฐ ๋‹ค์‹œ ์ŠคํŽ˜์ด๋“œ(โ™ ) = 1 ์นด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด 1๋กœ ๋ณ€๊ฒฝ
                    if (numberChk > 13) numberChk = 1; // K(13)๊นŒ์ง€ ์นด๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๊ฒฝ์šฐ ๋‹ค์‹œ A(1)๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•ด 1๋กœ ๋ณ€๊ฒฝ
                }
    
                // ๊ธฐ๋ณธ ์ •๋ ฌ
                cardArr.sort(cardDefaultSortComparator);
            }
    
            // ์นด๋“œ ํด๋ฆญ ์‹œ ๋ฐœ์ƒ๋˜๋Š” ์ด๋ฒคํŠธ
            function cardClick() {
                // ์นด๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.
                const card = findCard(this);
    
                // 1. ์นด๋“œ๊ฐ€ ์•ž๋ฉด์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
                if (isFront(card)) 
                    // 1-1. ์•ž๋ฉด์ด๋ฉด return
                    return;
    
                // 1-2. ๋’ท๋ฉด์ด๋ฉด ๋’ค์ง‘๋Š”๋‹ค.
                flip(card);
    
                // 2. ๋’ค์ง‘ํ˜€์žˆ๋Š” ์นด๋“œ๊ฐ€ 2์žฅ์ธ๊ฐ€?
                const chkTwoCards = checkFrontCardCountTwo(cardArr);
                if (chkTwoCards) {
                    // 2-1. 2์žฅ์ด๋ผ๋ฉด ๋‘ ์นด๋“œ์˜ ์ง์ด ์ผ์น˜ํ•˜๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.
                    checkPair(chkTwoCards);
                }
            }
    
            // ๊ธฐ๋ณธ ์ •๋ ฌ - 1์ˆœ์œ„ suit 2์ˆœ์œ„ ์ˆซ์ž
            function cardDefaultSortComparator(c, c2) {
                if (c.suit == c2.suit) {
                    return c.number - c2.number;
                } else {
                    return c.suit - c2.suit;
                }
            }
            
            // ์นด๋“œ๋ฅผ ์„ž๋Š”๋‹ค. 
            function shuffleCard(cardArr) {
                cardArr = cardArr.sort(() => Math.random() - 0.5);
            }
    
            // ์นด๋“œ๋ฅผ div#board์— ๋ณด์—ฌ์ค€๋‹ค.
            function showCard(cardArr) {
                // ์ด๋ฏธ์ง€ ํŒŒ์ผ๋ช… ๊ตฌํ•ด์˜ค๋Š” ๊ณต์‹ = (number - 1) + (suit - 1) * 13
    
                let c;
                let result = "";
                // 1. ์นด๋“œ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฆฐ๋‹ค.
                for (let i = 0; i < cardArr.length; i++) {
                    // 2. ์นด๋“œ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๊ฐ€์ ธ์™€์„œ <img src="${(c.number - 1) + (c.suit - 1) *13}.png">
                    c = cardArr[i]; 
                    // 3. ์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ result ๋ฌธ์ž์—ด์— ์ง‘์–ด๋„ฃ์€ ๋’ค
                    // ์ฒ˜์Œ์— ์นด๋“œ 10์ดˆ๊ฐ„ ๋ณด์—ฌ์ฃผ๊ณ  gameStart()์—์„œ hideํ•˜์ž
                    result += `<img src="${(c.number - 1) + (c.suit - 1) *13}.png" id=${c.getId()} data-number="${c.number}" data-suit=${c.suit} data-isFront=true>`;
                    // 12๊ฐœ๊ฐ€ ํ•œ์ค„ = ๋งŒ์•ฝ i๊ฐ€ 12๋ผ๋ฉด brํƒœ๊ทธ ๋„ฃ์–ด์ฃผ๊ธฐ
                    if ((i + 1) % 13 == 0) {
                        result+= `<br>`;
                    }
                }
                // 4. div#board์— innerHTML๋กœ ๋„ฃ์–ด์ค€๋‹ค.
                document.getElementById('board').innerHTML = result;
    
            }
    
            // card๊ฐ€ ์•ž๋ฉด์ด๋ฉด true ์•„๋‹ˆ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜
            // card๋Š” Card ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์™€์•ผ ํ•œ๋‹ค.
            function isFront(card) {
                return card.isFront;
            }
    
            // ์นด๋“œ๋ฅผ ๋’ค์ง‘๋Š”๋‹ค.
            function flip(card, isFront) {
                // 1. ์นด๋“œ๊ฐ€ ์•ž๋ฉด์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
                if (isFront) {
                    // 1-1. ์•ž๋ฉด(๊ทธ๋ฆผ)์ด๋ฉด ๋’ท๋ฉด(๋†๋‹ด๊ณฐ)์„ ๋ณด์—ฌ์ค€๋‹ค.
                    showBack(card);
                } else {
                    // 1-2. ๋’ท๋ฉด(๋†๋‹ด๊ณฐ)์ด๋ฉด ์•ž๋ฉด(๊ทธ๋ฆผ์„ ๋ณด์—ฌ์ค€๋‹ค.)
                    showFront(card);
                }
            }
            
            // ์นด๋“œ์˜ ์•ž๋ฉด์„ ๋ณด์—ฌ์ค€๋‹ค.
            function showFront(card) {
                let cardImg = document.getElementById(card.getId());
        
                cardImg.src = `${(card.number - 1) + (card.suit - 1) *13}.png`;
                card.isFront = true;
            }
            
            // ์นด๋“œ์˜ ๋’ท๋ฉด(๋†๋‹ด๊ณฐ)์„ ๋ณด์—ฌ์ค€๋‹ค.
            function showBack(card) {
                let cardImg = document.getElementById(card.getId());
                
                cardImg.src = 'bear.png';
                card.isFront = false;
            }
    
            // ์นด๋“œ๋ฅผ ๋ชจ๋‘ ๋’ค์ง‘๋Š”๋‹ค.
            function flipAll(cardArr, isFront) {
                // ์นด๋“œ์˜ ์ด ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ flip(card)๋ฅผ ํ˜ธ์ถœ
                for (let i = 0; i < 52; i++) {
                    flip(cardArr[i], isFront);
                }
            }
    
            // ๋‘ ์นด๋“œ์˜ ์ง์ด ์ผ์น˜ํ•˜๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.
            function checkPair(twoCards) {
                // ์ง ์ผ์น˜ ๊ธฐ์ค€ : ์ˆซ์ž ๋™์ผ, ์ƒ‰์ƒ ๋™์ผ
                if (twoCards[0].number == twoCards[1].number && Math.abs(twoCards[0].suit - twoCards[1].suit)) {
                    // 2-2. ์ผ์น˜ํ•˜๋ฉด ๊ฒŒ์ž„ ์ข…๋ฃŒ
                    setTimeout(function() {
                        alert("์„ฑ๊ณต");
                    }, 500);
    
                } else {
                    // 2-3. ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ํด๋ฆญํ–ˆ๋˜ ์นด๋“œ๋“ค์„ ๋‹ค์‹œ ๋’ค์ง‘๋Š”๋‹ค.
                    setTimeout(function() {
                        alert("์‹คํŒจ"); // ์•„๋‹ˆ ์™œ ์•ˆ ๋’ค์ง‘์–ด์ ธ;;;;
                        flipAll(cardArr, true);
                    }, 500);
    
                }
            }
    
            // ๋’ค์ง‘ํ˜€์žˆ๋Š” ์นด๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2์žฅ์ธ์ง€ ์ฒดํฌํ•œ๋‹ค. 
            function checkFrontCardCountTwo(cardArr) {
                // cardArr์˜ length๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ card์˜ isFront๊ฐ€ true์ธ ์นด๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
                let card;
                let returnCards = [];
                for (let i = 0; i < cardArr.length; i++) {
                    card = cardArr[i];
                    if (card.isFront)
                        returnCards.push(card);
                }
    
                if (returnCards.length == 2) {
                    return returnCards;
                } else {
                    return false;
                }
            }
    
            // carImg ์—˜๋ฆฌ๋จผํŠธ์—์„œ cardArr์ค‘์— ์ผ์น˜ํ•˜๋Š” ์นด๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.
            function findCard(cardImg) {
                const number = parseInt(cardImg.getAttribute('data-number'));
                const suit = parseInt(cardImg.getAttribute('data-suit'));
    
                for (let i = 0; i < cardArr.length; i++) {
                    let card = cardArr[i];
                    if (card.number == number && card.suit == suit)
                        return card;
                }
            }
    
            // ๊ตฌ์กฐ ์žก์„ ๋•Œ ์ฝ”๋“œ ์ ˆ๋Œ€ ์ ๊ธฐ x
    
            // show๋ž‘ hide๋Š” ํžŒํŠธ shupple์€ ์„ž๊ธฐ
        </script>
    </body>
    
    </html>
    



๊ณผ์ œ2๋ฒˆ์—์„œ ๋ฐฐ์› ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ๊ตต์งํ•˜๊ฒŒ ๋‚ด๊ฐ€ ๋ญ˜ ํ•˜๊ฒ ๋‹ค ์ ˆ์ฐจ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์ฃผ์„์œผ๋กœ ์ ๊ณ  ๊ทธ๊ฑธ ๋‹ค ์ถ”์ƒ ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ–ˆ๋‹ค. ์ „์ฒด์ ์ธ ํ‹€์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๋””ํ…Œ์ผ์€ ์ €์–ด์–ด์–ผ๋Œ€ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ๋น„์œ ๋ฅผ ํ•˜๋ฉด ๋จผ์ € ์ „์ฒด์ ์ธ ๋ฐ‘๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋’ค์— ์ฑ„์ƒ‰์„ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋‚˜๋Š” ์š”๋งŒํผ ๋ฐ‘๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋กœ ์ฑ„์ƒ‰ํ•˜๊ณ  ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํ•ด์™”๋˜ ๊ฒƒ(๊ตฌํ˜„ํ•˜์ง€ ์ „์— ์ฃผ์„ ๋จผ์ € ์ ๊ธด ํ–ˆ์—ˆ์ง€๋งŒ ๋จธ๋ฆฌ์†์—์„œ ๋‚˜์˜ค๋Š”๋Œ€๋กœ ์ผ๋‹จ ๋‹ค ์ ๊ณ  ์ž‘์€ ๋ถ€๋ถ„๋ถ€ํ„ฐ ์„ธ์„ธํ•˜๊ฒŒ ๊ตฌํ˜„์„ ํ–ˆ์—ˆ๋‹ค).. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ”๋กœ ์ฑ„์ƒ‰ํ–ˆ๋˜ ๋ถ€๋ถ„์ด ์ž˜๋ชป๋˜๋ฉด ๋‚˜์ค‘์— ๊ณ ์น˜๊ธฐ ํž˜๋“ค์–ด์ง„๋‹ค.

์ „์ฒด์ ์ธ ํ‹€ ๋‹ค ์งœ๊ณ  ์ด ํ‹€์—์„œ ํ•จ์ˆ˜๋ฅผ ์‰ฌ์šด ๊ฒƒ๋ถ€ํ„ฐ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ตฌํ˜„ํ•ด๋‚˜๊ฐ€๋‹ˆ๊นŒ ์ด๊ฒŒ ์ด๋ ‡๊ฒŒ ์‰ฌ์šด ๊ฑฐ์˜€๋‚˜?๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์ •๋„์˜€๋‹ค. ์™„๋ฃŒํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ ๋ฐ›์•˜์„ ๋•Œ ์ž˜ ์งฐ๋‹ค๊ณ  ์นญ์ฐฌ๋ฐ›์•˜๋‹คโ€ฆ.!!! ๋„˜ ๊ธฐ๋ถ„ ์กฐ์Œ

์ด๋ฒˆ ์ฃผ๋Š” ์ •๋ง ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ๋А๋‚€ ํ•œ ์ฃผ์˜€๋‹ค

window.onload = function () { // main ๋ฉ”์„œ๋“œ
    initGame(); // ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™”
    startGame(); // ๊ฒŒ์ž„ ์‹œ์ž‘
}

function initGame() {
    // 1. card๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
    let cardArr = [];

    // 2. ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ 
    initCard(cardArr);

    // 3. ๋ฐฐ์—ด์„ ์„ž๋Š”๋‹ค.
    shuffleCard(cardArr);

    // 4. ์นด๋“œ๋ฅผ div#board์— ๋ณด์—ฌ์ค€๋‹ค.
    showCard(cardArr);

    // 5. ๊ฐ ์นด๋“œ์— ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.
    let imgArr = document.getElementsByTagName("img");

    for (let i = 0; i < imgArr.length; i++) {
        imgArr[i].onclick = cardClick;
    }
}

// card๊ฐ€ ์•ž๋ฉด์ด๋ฉด true ์•„๋‹ˆ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜
function isFront(card) {
    return false;
}

// ์นด๋“œ๋ฅผ ๋ชจ๋‘ ๋’ค์ง‘๋Š”๋‹ค.
function flipAll(cardArr) {
    // ์นด๋“œ์˜ ์ด ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ flip(card)๋ฅผ ํ˜ธ์ถœ
    flip(card[0]);
}

// ์นด๋“œ๋ฅผ ๋’ค์ง‘๋Š”๋‹ค.
function flip(card) {
    // 1. ์นด๋“œ๊ฐ€ ์•ž๋ฉด์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
    if(isFront()) {
        // 1-1. ์•ž๋ฉด(๊ทธ๋ฆผ)์ด๋ฉด ๋’ท๋ฉด(๋†๋‹ด๊ณฐ)์„ ๋ณด์—ฌ์ค€๋‹ค.
        showBack(card);
    } else {
        // 1-2. ๋’ท๋ฉด(๋†๋‹ด๊ณฐ)์ด๋ฉด ์•ž๋ฉด(๊ทธ๋ฆผ์„ ๋ณด์—ฌ์ค€๋‹ค.)
        showFront(card);
    }
}

// ์นด๋“œ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ฐœ์ƒ๋˜๋Š” ์ด๋ฒคํŠธ
function cardClick(card) {
    let card = this;
    // 1. ์นด๋“œ๋ฅผ ์•ž๋ฉด์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
    if (isFront(card))
        // 1-1. ์•ž๋ฉด์ด๋ฉด return
        return;
    // 1-2. ๋’ท๋ฉด์ด๋ฉด ๋’ค์ง‘๋Š”๋‹ค.
    flip(card);

    // 2. ๋’ค์ง‘ํ˜€์žˆ๋Š” ์นด๋“œ๊ฐ€ 2์žฅ์ธ๊ฐ€?
    if (checkCard()) {
        // 2-1. 2์žฅ์ด๋ผ๋ฉด ๋‘ ์นด๋“œ์˜ ์ง์ด ์ผ์น˜ํ•˜๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.
        if (checkPair()) {
            // 2-2. ์ผ์น˜ํ•˜๋ฉด ๊ฒŒ์ž„ ์ข…๋ฃŒ
            alert("์„ฑ๊ณต")
        } else {
            // 2-3. ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ํด๋ฆญํ–ˆ๋˜ ์นด๋“œ๋“ค์„ ๋‹ค์‹œ ๋’ค์ง‘๋Š”๋‹ค.
            alert("์‹คํŒจ");
            flipAll(cardArr);
        }
    }

}

CSS

CSS ์†์„ฑ

์ด๋ฆ„URL๋‚ ์งœ์ƒ์„ฑ ์ผ์‹œํƒœ๊ทธ
margin๊ณผ padding์˜ ์ฐจ์ด์†์„ฑ
float์†์„ฑ
๋ณ€ํ˜• : transition์†์„ฑ
๋ณ€ํ™˜ : transform์†์„ฑ
overflow ์†์„ฑ์œ„์น˜์†์„ฑ
position ์†์„ฑ์œ„์น˜์†์„ฑ
css ์„ ํƒ์ž์„ ํƒ์ž
๊ตฌ์กฐ ์„ ํƒ์ž์„ ํƒ์ž
๋ฌธ์ž ์„ ํƒ์ž์„ ํƒ์ž
display์†์„ฑ
visibility์†์„ฑ
border(ํ…Œ๋‘๋ฆฌ)์†์„ฑ
๋™์œ„ ์„ ํƒ์ž์„ ํƒ์ž
@media ๊ทœ์น™๋ฐ˜์‘ํ˜• ์›น
๋ฐ˜์‘ํ˜• ์›น๋ฐ˜์‘ํ˜• ์›น
Ch5. ์›น ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒCh5. ์›น ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ
Ch.8 ์†Œ์…œ์ปค๋จธ์Šค ๋ฉ”์ธ ํŽ˜์ด์ง€Ch5. ์›น ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ
@import ๊ทœ์น™Ch11. CSS ์ถ”๊ฐ€ ๊ทœ์น™๊ณผ ๋ฐ˜์‘ํ˜• ์›น
์ œ๋ชฉ ์—†์ŒCh11. CSS ์ถ”๊ฐ€ ๊ทœ์น™๊ณผ ๋ฐ˜์‘ํ˜• ์›น
์‹œํ—˜๋ฌธ์ œ๊ธฐํƒ€
CSS ๋ ˆํผ๋Ÿฐ์Šคhttps://www.w3schools.com/cssref/index.php๊ธฐํƒ€


w3schools - how to

์ด๋ฆ„๋ถ„๋ฅ˜๋‚ ์งœURL
Tabs[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_tabs.asp
Vertical Tabs[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_vertical_tabs.asp
Tab Headers[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_tab_header.asp
Full Page Tabs[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_full_page_tabs.asp
Slideshow[ํ™”] Images(39)https://www.w3schools.com/howto/howto_js_slideshow.asp
Fullscreen Video[ํ† ] More(112)https://www.w3schools.com/howto/howto_css_fullscreen_video.asp


SQL(์˜ค๋ผํด) - ๋ถˆ์นœ์ ˆํ•œ SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์–ด๋–ป๊ฒŒ ๊ณต๋ถ€ํ•  ๊ฒƒ์ธ๊ฐ€

  1. ์ธ์ถœ
  1. ๊ฐ„๊ฒฉ ๋‘๊ธฐ

    ex) ํ”Œ๋ž˜์‹œ ์นด๋“œ

    ์—ฐ์Šต์ด ์ƒ๊ฐ์—†๋Š” ๋ฐ˜๋ณต์ด ๋˜์ง€ ์•Š์„ ์ •๋„์˜ ๊ฐ„๊ฒฉ์ด๋ฉด ๋œ๋‹ค. but ๋„ˆ๋ฌด ๋งŽ์ด ์žŠ์–ด๋ฒ„๋ ค์„œ ์ƒˆ๋กœ ๋ฐฐ์šฐ๋Š” ์…ˆ์€ xx ์•ฝ๊ฐ„์˜ ๋ง๊ฐ์ด ์ค‘์š”. ์ ์–ด๋„ ํ•˜๋ฃจ

  1. ๊ต์ฐจํ•˜๊ธฐ

    ํ•œ ๊ฐ€์ง€ ์—ฐ์Šต์ด ์™„์ „ํžˆ ๋๋‚˜๊ธฐ ์ „์— ์ฃผ์ œ๋ฅผ ๋ฐ”๊พธ์–ด์•ผ ํ•œ๋‹ค. ๊ธฐ์–ต์„ ์•ฝ๊ฐ„ ํ๋ ค์ง€๊ฒŒ ํ•˜๋ฉด ์ธ์ถœ์ด ํž˜๋“ค์–ด์ง€๊ณ  ๋Šฅ์ˆ™ํ•˜๊ฒŒ ๋ฐœํœ˜ํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ, ํ•œ ์ธต ๋” ๊นŠ์ด ํ•™์Šตํ•˜๊ฒŒ ๋˜๊ณ  ๋‚˜์ค‘์— ์ˆ˜์›”ํ•˜๊ฒŒ ์ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. โ†’ ์ด๋ก ์ ์œผ๋กœ๋Š” ์•Œ๊ฒ ๋Š”๋ฐ ๋‚˜ํ•œํ…Œ ์ ์šฉํ•˜๋Š” ๊ฒŒ ์ž˜ ์•ˆ ๋œ๋‹ค ใ… 

  1. ๋ณ€ํ™”์ฃผ๊ธฐ
  1. ๋ฐ˜์ถ” : ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”๊ฐ€? ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ํ–ˆ๋Š”๊ฐ€? ๊ทธ๊ฒƒ์ด ์–ด๋–ค ํšจ๋ ฅ์„ ๋ฐœ์ทจํ–ˆ๋Š”๊ฐ€? โ†’ ํšŒ๊ณ ๋ž‘ ๋น„์Šทํ•œ๋“ฏ
  1. ์ •๊ตํ™” : ์ด๋ฒˆ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋‹ค์Œ์—๋Š” ์–ด๋–ค ํ–‰๋™์„ ํ•  ๊ฒƒ์ธ๊ฐ€? โ†’ ์ ์šฉ์  ์ฐพ๊ธฐ

๐Ÿ˜ฏ

  • ๋‹ค์Œ ์ฃผ๋ฉด ๋ฒŒ์จ ์Šคํ”„๋ง ๋ฐฐ์šฐ๊ณ  ํ•œ ๋‹ฌ ๋’ค๋ฉด ํ”„๋กœ์ ํŠธ๋ผ๋‹ˆ ๋ง๋„ ์•ˆ๋ผ ์‹œ๊ฐ„ ์ง„์งœ ๋น ๋ฅด๋‹ค ๋ฒŒ์จ 2๋‹ฌ ์ง€๋‚˜๊ณ  ๋‚ด์ผ์ด๋ฉด 5๊ธฐ ๋“ค์–ด์˜จ๋‹ค๋Š” ๊ฒƒ๋„ ์•ˆ ๋ฏฟ๊น€..

    ๋‚˜์ค‘์— ์ด ์‹œ๊ธฐ๋ฅผ ๋Œ์•„๋ดค์„ ๋•Œ ํ›„ํšŒํ•˜๋Š” ๊ธฐ์–ต์œผ๋กœ ๋‚จ์ง€ ์•Š๋„๋ก ๋งค์ผ๋งค์ผ ์ตœ์„ ์„ ๋‹คํ•˜์ž ํŒŒ์ดํŒ…

  • ์•Œ๋ ˆ๋ฅด๊ธฐ ๋น„์—ผ? ์ง€๊ธˆ ๋ˆˆ ๊ฐ€๋ ค์›€, ์žฌ์ฑ„๊ธฐ, ์ฝง๋ฌผ ์‹ฌํ•ด์ง„์ง€ 3์ผ?๋œ ๊ฒƒ๊ฐ™์€๋ฐ ์›์ธ์ด ๋ญ์ง€ ๋Œ€์ฒดโ€ฆโ€ฆ ๋ฏธ์ณ๋ฒ„๋ฆฌ๊ฒ ๋‹ค ์ฆ๋งโ€ฆ ํ™˜๊ธฐ์‹œ์ผฐ์„ ๋•Œ ์˜ท์— ๋ฏธ์„ธ๋จผ์ง€ ๋‹ค ๋ฌป์–ด์„œ ์ด๋Ÿฌ๋Š” ๊ฑด๊ฐ€ ใ…  ์ผ๋‹จ ์˜ท ๋‹ค ๋นจ๋ž˜ํ•˜๊ณ  ์ด๋ถˆ ์ข€ ๋ฐ”๊ฟ”๋‹ฌ๋ผ ํ–์ด์ง€/
  • ํ•ญ์ƒ ๊ฐ•์กฐํ•˜์‹œ๋Š” ๊ฒƒ : ๋„๋ฉ”์ธ, ์—…๋ฌด ์ง€์‹์ด ์ œ์ผ ์ค‘์š”ํ•˜๋‹ค. ์ฝ”๋“œ๋Š” AI๊ฐ€ ํ›จ์”ฌ ๋” ์ž˜ ์งฌ. ๊ทธ๊ฑธ ์ด์šฉํ•ด ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์€ ์„ค๊ณ„๋ฅผ ํ•˜๋Š” ๊ฒŒ ๊ฐœ๋ฐœ์ž์˜ ๋ชซ ์ด๊ฑธ ํ•˜๋ ค๋ฉด ์—…๋ฌด๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์–ด์•ผ ํ•œ๋‹ค.

์ฐจ์ฃผ ๋ชฉํ‘œ

๊ตฌ๋ถ„์ฐจ์ฃผ ๋ชฉํ‘œ
โœ๏ธ์ง€์ 1. Java ๋ณต์Šต
๋ชฉํ‘œ : 6, 7, 8, 10, 11์žฅ ๋ฐฑ์ง€ ๋ณต์Šต(๋งค์ผ ํ•œ ์ฑ•ํ„ฐ์”ฉ)
์‹œ๊ฐ„ : ์•„์นจ ์ด๋™ ์‹œ๊ฐ„(7:20~7:50)
- ๊ทธ๋‚  ๋ฐฑ์ง€ ๋ณต์Šตํ•˜๊ธฐ๋กœ ํ•œ ์ฑ•ํ„ฐ ์ด๋™ํ•  ๋•Œ ์š”์•ฝ๋ณธ, ์›๋ณด์นด๋กœ ๋ณต์Šต


2. CSS
- 1์ผ 1w3schools(how to ๋ถ„์„ - ์ฃผ์„๋‹ฌ๊ณ  ํ•ต์‹ฌ ์ •๋ฆฌํ•˜๊ธฐ)
์ผ :
Make a Website
์›” :
Hover Tabs
ํ™” :
Slideshow Gallery
์ˆ˜ :
Alert Buttons
๋ชฉ :
Login Form
๊ธˆ :
Filter/Search List
ํ†  :
CSS/JS Modal
๐Ÿง˜โ€โ™€๏ธ์˜์ ๋งค์ผ ๋…ผ์–ด ํ•œ ๋งˆ๋”” ์ฝ๊ธฐ(์˜ค์ „ 8์‹œ~8์‹œ 10๋ถ„)
๐Ÿƒโ€โ™€๏ธ์‹ ์ฒด์ ์ฃผ๋ง์— ํผ๋กค๋Ÿฌ ์ŠคํŠธ๋ ˆ์นญ

๋‹ค์Œ์ฃผ๋„ํŒŒ์ดํŒ…!๐Ÿ˜„

  • ๋‹ด์ฃผ๊ฑฐ
    ๊ตฌ๋ถ„๋ชฉํ‘œ์‹œ๊ฐ„์‚ฌ์šฉ์‹œ๊ฐ„๋‹ฌ์„ฑ๋ฅ %์›์ธ๋ถ„์„๋‹ค์Œ ์ฃผ์— ์ ์šฉํ•  ๊ฒƒ
    ๐Ÿง˜โ€โ™€๏ธ์˜์ 
    โœ๏ธ์ง€์ 
    ์‚ฌํšŒ์ 
    ๐Ÿƒโ€โ™€๏ธ์‹ ์ฒด์ 
    ๐ŸŒ”์ž 
    ๐Ÿšฟ๊ธฐํƒ€


Uploaded by N2T