๐ŸŒฑ SeSac/๊ณต๋ถ€ ๊ธฐ๋ก (๋ณต์Šตํ•˜๋ฉฐ ์—…๋ฐ์ดํŠธ ์ค‘)

[220620 / Day 32] styled components, react swiper, ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ

Jane K 2022. 7. 7. 00:44

1. ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ (styled components)

์ €๋ฒˆ์—” scss, module.css ๋‚˜๊ฐ”์Œ

์ด๋ฒˆ์—” styled components ์‚ฌ์šฉํ•ด๋ณผ ๊ฒƒ, css in js ๋กœ js, css ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž„

 

styled compoenets :

- ์š”์ฆ˜ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ ํšŒ์‚ฌ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ, ๊ทธ๋ž˜์„œ ๋งŽ์ด ์‚ฌ์šฉํ•ด๋ณผ ๊ฒƒ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ์„œ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•จ, ์‚ฌ์Šค๋ž‘ ๋น„์Šท

- ์„ค์น˜๋ฒ•์€ terminal ์— npm i styled-components

- ์ต์Šคํ…์…˜์—์„œ vscode-styled-components ๊น”์•„์ค˜์•ผ ์ž๋™์™„์„ฑ์ด ๋จ

- import ํ•ด์ฃผ๊ธฐ : import styled from 'styled-components';

- <Box></Box> ๋Š” ํƒœ๊ทธ๊ฐ€ ์•„๋‹Œ ๋””์ž์ธ์„ ์œ„ํ•œ ์ปดํฌ๋„ŒํŠธ

- ๋žœ๋”๋˜๋Š” ํ•จ์ˆ˜ ์•ˆ์ชฝ์— ์ž‘์„ฑํ•˜๋ฉด ์•ˆ๋จ, ๊ต‰์žฅํžˆ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹จ์ด๋‚˜ ํ•˜๋‹จ ๋ฐ”๊นฅ์ชฝ์— ์ž‘์„ฑํ•ด์•ผ ํ•จ

- const Box = styled.div ํƒœ๊ทธ Box ์˜ styled ๋ฅผ div ๋กœ ๋žฉํ•‘ํ•œ๋‹ค๋Š” ๋œป, ๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋กœ ๊ทธ ๋’ค์— ` `(๋ฐฑํ‹ฑ) ๋„ฃ์–ด์„œ ๊ฑฐ๊ธฐ ์•ˆ์— ์†์„ฑ ๋„ฃ์–ด์ฃผ๊ธฐ

- ์š”์†Œ ๊ฒ€์‚ฌํ•ด๋ณด๋ฉด class="sc-bczRLJ hHPJrx" ์ด๋ ‡๊ฒŒ ๋˜์–ด ์žˆ๋Š”๋ฐ ์ด๊ฒŒ ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ, ์Šคํƒ€์ผ์ด ๋‹ค ๋“ค์–ด๊ฐ€ ์žˆ์Œ

 

 

 

2. styled components ๋ฌธ๋ฒ•

 

1) as

- ์˜ˆ๋ฅผ ๋“ค์–ด div ๋กœ ๋žฉํ•‘์ด ์•„๋‹ˆ๋ผ ul ๋กœ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด as ํ”„๋กญ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ul ๋กœ ํ•˜๊ฒ ๋‹ค ์„ ์–ธํ•ด์ฃผ๋ฉด ๋จ, ๊ทธ๋Ÿผ ul ๋กœ ๋žฉํ•‘๋œ box ๊ฐ€ ์ƒ์„ฑ๋œ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Œ <Box as='ul'>

 

2) props ์‚ฌ์šฉ 

 <Title fontSize='2rem' color='#2345'>์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ</Title>

 <Title fontSize='1.5rem' color='#456'>CSS IN JS</Title>

 <Title color='#745'>fun and easy</Title>

 ์ด๋ ‡๊ฒŒ๋งŒ ํ•ด์ฃผ๋ฉด ์ „๋‹ฌ์ด ์•ˆ๋จ

const Title = styled.h2`
    font-size: ${(props) => props.fontSize};
    // ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” props๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๊ณ  ๋”ฐ๋ผ์„œ props.fontsize ๋Š” ๊ฐ๊ฐ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฐ’์œผ๋กœ ์ถœ๋ ฅ๋จ
    color: ${(props => props.color)};
    margin: 1rem 0;
`
// h2 ๋กœ ํ•˜๊ณ  title 3๊ฐœ๋ฅผ ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์Šคํƒ€์ผ์„ ์ฃผ๊ณ  ์‹ถ๋‹ค ๊ทผ๋ฐ ๊ฐ๊ฐ ์ฃผ๋ฉด ๊ท€์ฐฎ์œผ๋‹ˆ๊นŒ -> ํ”„๋กญ์Šค๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ
// ๊ทธ๋ฆฌ๊ณ  ํ”„๋กญ์Šค๋ฅผ ๋ฐ›์•„์„œ ๊ฐ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€์ฃผ๋Š” ๊ฒƒ

 

3) attrs ์‚ฌ์šฉ

- ํƒ€์ž…์€ ๋ฒ„ํŠผ์ด๋ผ๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด ์ง์ ‘ ๋„ฃ์–ด๋„ ๋˜์ง€๋งŒ sytled.button.attrs(props => ({})) ํ•ด์ฃผ๋ฉด ๋จ ์‚ผํ•ญ์—ฐ์‚ฐ์ž, ์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ ‡๊ฒŒ

props.active ๊ฐ’๋งŒ ๊ฐ€์ง„ ์• ๋งŒ ํด๋ž˜์Šค ๋„ฃ์–ด์„œ ์Šคํƒ€์ผ ๋„ฃ๊ธฐ : className: props.active ? 'btn on' : 'btn'

- ์˜ˆ์‹œ :

const Btn = styled.button.attrs(props => ({
    type: 'button',
    // ์›๋ž˜ ํƒœ๊ทธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์†์„ฑ๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ
 
    className: props.active ? 'btn on' : 'btn',
    // ํด๋ž˜์Šค ์ด๋ฆ„๋„ ์ค„ ์ˆ˜ ์žˆ์Œ
    // ๊ทธ๋Ÿฌ๋ฉด ์š”์†Œ๊ฒ€์‚ฌ์—์„œ ๋ณด๋ฉด type ๊ณผ classname ์ด ์ƒ๊ธด ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Œ
}))

 

4) ํ™•์žฅ

- ๋‹ค๋ฅธ ์š”์†Œ์—์„œ ์ ์šฉํ•œ ์Šคํƒ€์ผ์„ ๋™์ผํ•˜๊ฒŒ ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋จ

- ์›๋ž˜๋Š” const Btn = styled.button ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•˜๋ฉด ํƒœ๊ทธ Btn ์˜ styled ๋ฅผ button ์œผ๋กœ ๋žฉํ•‘ํ•œ๋‹ค๊ณ  ์”€

- ํ™•์žฅ ๊ธฐ๋Šฅ์€ style(Btn) ํ•ด์ฃผ๋ฉด Btn ์Šคํƒ€์ผ์„ ํ™•์žฅํ•˜์—ฌ ์‚ฌ์šฉ๋จ

- ๊ทธ๋ฆฌ๊ณ  ๋”ฐ๋กœ ์ฃผ๊ณ  ์‹ถ์€ style ์€ ์›๋ž˜ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์ด ` `(๋ฐฑํ‹ฑ) ์•ˆ์— ๋„ฃ์–ด์ฃผ๋ฉด ๋จ

- ์˜ˆ์‹œ :

const AniBtn = styled(Btn)`
    width: 400px;
    animation: ${colorChange} 1.5s alternate infinite;
`

5) ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ

- import ๋จผ์ € : import styled, { keyframes } from 'styled-components'; ํ•ด์ค˜์•ผ keyframes ์“ธ ์ˆ˜ ์žˆ์Œ

- ๊ทธ๋ฆฌ๊ณ  styled ์˜ animation ์— ๋ฆฌํ„ฐ๋Ÿด ๋ฐฑํ‹ฑ์œผ๋กœ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋„ฃ์–ด์ฃผ๊ณ  ๋”ฐ๋กœ ๋ณ€์ˆ˜๋กœ keyframes ์— ๋„ฃ์„ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ˆœ์„œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ์ ์šฉ!

- ์˜ˆ์‹œ :

const colorChange = keyframes`
    0%{
        background-color: salmon;
    }
    100%{
        background-color: seagreen;
    }
`

6) ๊ธ€๋กœ๋ฒŒ styled ์ ์šฉ

- import { createGlobalStyle } from "styled-components"; ํ•ด์ฃผ๊ณ 

- const GlobalStyle = createGlobalStyle` `  ์•ˆ์— reset.css ๋„ฃ์–ด์ฃผ๋ฉด ๋จ

- app.js ์— ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•จ, ๊ฐ์‹ผ div ๋ฐ”๋กœ ๋ฐ‘์— <GlobalStyle /> ํ•ด์ค˜์•ผํ•จ

 

7) ๊ทธ ์™ธ๋Š” scss ์™€ ๋˜‘๊ฐ™์Œ

 

 

 

2. ์Šค์™€์ดํผ

- terminal ์—์„œ npm i swiper ์„ค์น˜

- div ์•ˆ์— ์Šค์™€์ดํผ ํ™ˆํŽ˜์ด์ง€์— ์žˆ๋Š” Usage ๋„ฃ์–ด์ฃผ๋ฉด ๋จ  ๊ธฐ๋ณธํ‹€

- navigation ์€ js ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์žˆ์—ˆ์ง€๋งŒ ๋ฆฌ์•กํŠธ๋Š” props ํ•ด์ค˜์•ผ ํ•จ ๊ทธ๋ฆฌ๊ณ  import ๋กœ ๊บผ๋‚ด์™€์•ผ ํ•จ

- ๋ฐ˜๋ณตํ• ๊ฑฐ๋ฉด ์Šค์™€์ดํผ ํ™ˆํŽ˜์ด์ง€์— demo์— ๋ณด๋ฉด loop={true} ํ•ด์ฃผ๋ฉด ๋ฌดํ•œ ๋ฃจํ”„

- import ๋ž‘ modules ์— ์“ฐ๋Š” ๊ธฐ๋Šฅ ์ž˜ ๋„ฃ์–ด์ฃผ๊ณ  ์•ˆ ์“ฐ๋Š” ๊ธฐ๋Šฅ์€ ์ž˜ ๋นผ์ฃผ๊ธฐ

 

1) Mainbanner : ๋ฌดํ•œ๋ฃจํ”„๋ž‘ ์˜คํ† ํ”Œ๋ ˆ์ด, ์ด๋™ ๋ถˆ๋ฆฟ ํ•ด์ฃผ๋Š” ๊ฒƒ๊นŒ์ง€

import { Swiper, SwiperSlide } from 'swiper/react';
import { Navigation, Pagination, Autoplay } from 'swiper';
<Swiper
                modules={[Navigation, Pagination, Autoplay]}
                pagination={{ clickable: true }} // ์ด๋™ ๋ถˆ๋ฆฟ ์ƒ๊น€
                navigation
                loop={true} // ๋ฌดํ•œ ๋ฃจํ”„
                autoplay={{
                    delay: 2500,
                    disableOnInteraction: false, // ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์„ ๋•Œ ๋ฉˆ์ถ”๋„๋ก
                }} // 2.5์ดˆ์”ฉ ์ด๋™ํ•˜๊ฒŒ ํ•ด์ฃผ๊ธฐ
                spaceBetween={0} // ์Šฌ๋ผ์ด๋” ์‚ฌ์ด ๋งˆ์ง„
                slidesPerView={1} // ํ•œ๋ฒˆ์— ๋ณด์—ฌ์ง€๋Š” ์Šฌ๋ผ์ด๋”
                onSlideChange={() => console.log('slide change')} // ์Šฌ๋ผ์ด๋“œ๋ฅผ ๋„˜๊ธธ ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋จ
                onSwiper={(swiper) => console.log(swiper)}
            >

 

2) SubBanner : ์ธ๋„ค์ผ ์ด๋ฏธ์ง€๋กœ pagination(์ด๋™๋ถˆ๋ฆฟ) ๋ฐ”๊ฟ”์ฃผ๊ธฐ

- ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์žˆ์Œ : ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ, ์š”์†Œ๊ฒ€์‚ฌํ•ด์„œ ํด๋ž˜์Šค ๋„ค์ž„ ๋ณด๊ณ  ๊ฑฐ๊ธฐ๋‹ค๊ฐ€ ์ ์šฉํ•ด์ฃผ๋ฉด ๋จ

// swiper ์•ˆ์ด ์•„๋‹Œ ๋ฆฌํ„ด๋ฌธ ๋ฐ–์— ๋”ฐ๋กœ ์ฃผ๊ณ  swiper ์•ˆ์—๋Š” pagination={{ pagination }} ์ฝœ๋ฐฑ ํ•ด์ฃผ๊ธฐ
    const pagination = {
        clickable: true,
        el: '.pagination-box', // element: ํด๋ž˜์Šค๋„ค์ž„ pagination-box(๋‹ค๋ฅธ ๊ฑธ๋กœ ์ค˜๋„ ์ƒ๊ด€x)
        renderBullet: function (index, className) {
            return '<span class="' + className + '">' + (index + 1) + "</span>";
        },
    }
<Swiper
                className='mySwiper' // ๋ฐ๋ชจ์—๋„ ๋‚˜์™€์žˆ์Œ ์“ธ ์ˆ˜ ์žˆ๋‹ค๊ณ , ํ•ด์ฃผ๋Š” ์ด์œ ๋Š” ์ •ํ™•ํ•œ ๊ฒฝ๋กœ๋ฅผ ์œ„ํ•ด
                modules={[Navigation, Pagination, Autoplay]}
                pagination={{ pagination }}
                navigation
                loop={true} // ๋ฌดํ•œ ๋ฃจํ”„
                autoplay={{
                    delay: 2500,
                    disableOnInteraction: false, // ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์„ ๋•Œ ๋ฉˆ์ถ”๋„๋ก
                }} // 2.5์ดˆ์”ฉ ์ด๋™ํ•˜๊ฒŒ ํ•ด์ฃผ๊ธฐ
                spaceBetween={0} // ์Šฌ๋ผ์ด๋” ์‚ฌ์ด ๋งˆ์ง„
                slidesPerView={1} // ํ•œ๋ฒˆ์— ๋ณด์—ฌ์ง€๋Š” ์Šฌ๋ผ์ด๋”
                onSlideChange={() => console.log('slide change')} // ์Šฌ๋ผ์ด๋“œ๋ฅผ ๋„˜๊ธธ ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋จ
                onSwiper={(swiper) => console.log(swiper)}
            >
 

3) ์ด๋™ ํ™”์‚ดํ‘œ ๋ฐ”๊พธ๊ธฐ

- ์ง์ ‘ ๋ฐ”๊พธ๊ธฐ

- ํด๋ž˜์Šค ์ด๋ฆ„

 

๊ธฐ๋ณธ css ์ž…ํžˆ๋ฉด์„œ position ์„ ์คŒ ๊ทธ๋ž˜์„œ nav์–ด์ฉŒ๊ตฌ ์ปดํฌ๋„ŒํŠธ๋Š” position ์•ฑ์†”๋ฃจํŠธ ์ฃผ๋ฉด ์ž๋™์œผ๋กœ ๋”ฐ๋ผ๊ฐ, ๋ถ€๋ชจ์š”์†Œ์— ๋ž ๋Ÿฌํ‹ฐ๋ธŒ ์•ˆ์ค˜๋„ ๋จ

 

 

 

3. ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ

1) ListTotal.jsx

const [lists, setLists] = useState([]);

    // ๋ฐ์ดํ„ฐ๋Š” ํ•œ๋ฒˆ๋งŒ ๋ถˆ๋Ÿฌ์˜ฌ๊ฑฐ๋‹ˆ๊นŒ ๋ฌด์กฐ๊ฑด useeffect

    useEffect(() => {

        fetch('https://jsonplaceholder.typicode.com/posts')

            .then((res) => res.json()) // (res) ๋ณ€์ˆ˜ ์ด๋ฆ„์ด๋‹ˆ๊นŒ ์•„๋ฌด ์ด๋ฆ„ ์จ๋„ ๋จ

            .then((data) => setLists(data)) // (data) ๋ณ€์ˆ˜ ์ด๋ฆ„์ด๋‹ˆ๊นŒ ์•„๋ฌด ์ด๋ฆ„ ์จ๋„ ๋จ

    }, [])

    // async await ์•ˆ ๋„ฃ์—ˆ๋Š”๋ฐ ํ•ด์ค˜๋„ ์ƒ๊ด€ ์—†์Œ

    console.log(lists) // ๋ฐ์ดํ„ฐ 100 ๊ฐœ ๋“ค์–ด์˜ด

๋ฐ์ดํ„ฐ ๊ณ„์† ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋žœ๋”๋ง์— ๋ฌด๋ฆฌ๊ฐ€๋‹ˆ๊นŒ ํ•œ๋ฒˆ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๋ผ๊ณ  useEffect ์‚ฌ์šฉ

 ์›๋ž˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ import ํ•ด์„œ ๋ณ€์ˆ˜ ์ง€์ •ํ•œ ๋‹ค์Œ map ์œผ๋กœ ๋Œ๋ฆฐ ํ›„ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š” ๋ณต์žกํ•œ ์ž‘์—…์„ ํ–ˆ์—ˆ์Œ

 ๊ทธ๊ฑธ useEffect ๋กœ

!!!!!๋‹ค์‹œ ์ •๋ฆฌ

 

2) ๊ฒŒ์‹œํŒ ๊ณต์‹

- ๊ฒŒ์‹œ๋ฌผ ์ธ๋ฑ์Šค 0~9, 10~19, 20~29… ํ•ด์„œ ํŽ˜์ด์ง€๋‹น 10๊ฐœ ๊ฒŒ์‹œ๋ฌผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ

- ๊ฒŒ์‹œํŒ ๊ณต์‹์ด ์žˆ์Œ : ํ•œํŽ˜์ด์ง€๋‹น ๊ฐœ์ˆ˜์™€ ์‹œ์ž‘๋ฒˆํ˜ธ์™€ ๋๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„์•ผํ•จ

// ๊ฒŒ์‹œํŒ ๊ณต์‹

    // ์…€๋ ‰ํŠธ ๋ฐ•์Šค ๋ญ 10๊ฐœ 20๊ฐœ ๋ณด์ด๋„๋ก ํ• ๊ฑฐ๋ฉด usestate ๋กœ ํ•ด์•ผํ•จ

    const LIST_PER_PAGE = 10; // ํ•œ ์žฅ์— ๋ณด์—ฌ์งˆ ๋ฆฌ์ŠคํŠธ ์ˆ˜

    const [page, setPage] = useState(1) // ํŽ˜์ด์ง€, ์ดˆ๊ธฐ๊ฐ’์€ 1๋กœ ํ•ด์„œ 1๋กœ ์‹œ์ž‘

 

    // startNum ์€ ํ•œํŽ˜์ด์ง€ ๋‹น ์‹œ์ž‘ํ•˜๋Š” ๋„˜๋ฒ„, endNum ๋Š” ํ•œํŽ˜์ด์ง€ ๋‹น ๋๋‚˜๋Š” ๋„˜๋ฒ„

    const startNum = (page - 1) * LIST_PER_PAGE // 1-1*10 => 0 10 20 30...

    const endNum = startNum + LIST_PER_PAGE // 0+10 => 10 20 30 40...

- 1-1x10  10์€ ํŽ˜์ด์ง€ ๊ฐœ์ˆ˜

 

- disabled ๊ฐ€ ๋ญ์ง€..? ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„ ๋•Œ? ๋” ํ•  ์ˆ˜ ์—†์„ ๋•Œ?

 

3) fill ๋ฉ”์„œ๋“œ

// ๋น„์–ด์žˆ๋Š” ๊ฑธ ์ฑ„์›Œ์ฃผ๋Š” ๋ฉ”์„œ๋“œ fill

    PagesNumArray.fill();

    console.log(PagesNumArray) // (10) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]

→ PagesNumArray.fill();

 

 

 

 

๊ณผ์ œ : ํ•˜๋‚˜์”ฉ ๋„˜์–ด๊ฐ€๋Š” ํด๋ž˜์Šค ๋งŒ๋“ค์–ด์„œ ์ ์šฉํ•ด๋ณด๊ธฐ, ์ˆซ์ž ํด๋ฆญํ•˜๋ฉด ํ•˜๋‚˜์”ฉ css ํšจ๊ณผ ๋„ฃ๊ธฐ

๊ทธ๋ฆฌ๊ณ  5๊ฐœ์”ฉ๋งŒ ํŽ˜์ด์ง€์ˆ˜ ๋ณด์—ฌ์ฃผ๊ณ  ๊ทธ ๋‹ค์Œ ๋ˆ„๋ฅด๋ฉด ๋˜ 5๊ฐœ์”ฉ ๋ณด์ด๊ณ  ์ด๋Ÿฐ ๊ฒƒ๋„ ํ•ด๋ณด๊ธฐ ex) 1,2,3,4,5 ๋‹ค์Œ 6,7,8,9,10