ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”์Šค 2์ฃผ์ฐจ ํšŒ๊ณ  (1) — TypeScript
    ETC 2022. 3. 2. 23:13

    ์„ค๋‚  ์—ฐํœด์— ํ‘น~ ์‰ฌ๋Š” ์ฒ™ ์ด๊ฒƒ์ €๊ฒƒ ๊ณต๋ถ€๋„ ๋งŽ์ด ํ•˜๊ณ  ๋‚˜์„œ ๋‹ค์‹œ ๋“ฃ๊ฒŒ ๋œ 2์ฃผ์ฐจ ์ˆ˜์—….

    TypeScript ์ˆ˜์—…์ด์—ˆ๋Š”๋ฐ ์‚ฌ์‹ค ๋ฐ”๋กœ ์‹ค์ „ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ฒŒ ๋  ์ค„์€ ๋ชฐ๋ž๋‹ค. ๊ทธ๋‚˜๋งˆ ์„ค ์—ฐํœด์— React with TS๋กœ TodoList ๋งŒ๋“œ๋Š” ๊ฐ•์˜๋ผ๋„ ๋ณด๊ณ  ๋”ฐ๋ผํ•ด์„œ ๋ง์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Œ. ๊ทธ๋ฆฌ๊ณ  ์ง์ ‘ ํ•ด ๋ณด๋‹ˆ๊นŒ ๋” ์–ด๋ ค์› ๋”ฐ......

     


     

     

    TypeScript

    ์‚ฌ์‹ค ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” C์–ธ์–ด, Java, Python ๊ทธ๋ฆฌ๊ณ  ์•ฝ๊ฐ„์˜ C++๊นŒ์ง€ ๋ฐฐ์› ๋˜ ์ „๊ณต์ƒ์œผ๋กœ์จ ์ต์ˆ™ํ•œ ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•˜๋‹ค. ๋‹น์—ฐํ•จ. ๊ทธ๊ฒƒ์ด OOP์ด๋‹ˆ๊นŒ. ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋˜๊ฒŒ ํฌํ•œํ•œ ์–ธ์–ด๋‹ค. ๋ณ€์ˆ˜์˜ ํƒ€์ž…๋„ ์ง€์ •ํ•ด ์ฃผ์ง€ ์•Š์•„๋„ ๋˜๊ณ , ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์ธํ•ด ๋ณ€์ˆ˜ ์„ ์–ธ์„ ํ˜ธ์ถœ๋ณด๋‹ค ๋ฐ‘์— ํ•ด๋„ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ ๋‚œ๋‹ค๋“ ์ง€ ๊ทธ๋Ÿฐ ์ ์„ ๋ณด๋ฉด ๋ง์ด๋‹ค.

    ๊ทธ์น˜๋งŒ React+TypeScript๋ผ๋ฉด ๋ง์ด ๋‹ฌ๋ผ์ง„๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๊ธธ๋“ค์—ฌ์ง„ ์ฝ”๋”ฉ ์ž…๋ง›์œผ๋กœ๋Š” ์ฒ˜์Œ์—” ์ •๋ง ์–ด๋ ค์› ๋‹ค. ์ œ๋„ค๋ฆญ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” Java ์ˆ˜์—…์„ ๋“ค์—ˆ์„ ๋•Œ๋„ ๋งŽ์ด ์‚ฌ์šฉํ•ด ๋ณด์ง€ ์•Š์•˜๋˜ ๋ถ€๋ถ„์ด๋ผ ์–ด๋ ค์› ๊ณ , ์‚ฌ์‹ค ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด ๊ฐ•์˜๋“ค์€ 2018๋…„์— ๊ฐœ๋… ๊ฐ•์˜ ๋“ค์€ ๊ฒŒ ๋งˆ์ง€๋ง‰์ด๋ผ...... ์ข€ ๋งŽ์ด ๊นŒ๋จน์—ˆ๋‹ค. ^^; ๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ ๊ณผ์ œ์—์„œ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด ๋ดค๋‹ค.... 2019๋…„ ๋•Œ๋ถ€ํ„ฐ ์จ๋ณด๋ผ๊ณ  ์–˜๊ธฐ๋งŒ ๋“ฃ๋‹ค๊ฐ€ ์ด์ œ์„œ์•ผ.... ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ‘ํ•œ ์‚ฌ๋žŒ๋“ค์€ ๋‹ค์‹œ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์œผ๋กœ๋Š” ๋ชป ๋Œ์•„๊ฐ„๋‹ค๊ณ ๋“ค ํ•œ๋‹ค. ์•„์ง JavaScript๋งŒ ์“ฐ๋‹ค๊ฐ€ TS๋Š” ๋ง›๋ณด๊ธฐ ์ˆ˜์ค€์œผ๋กœ ๊ฑด๋“œ๋ ค ๋ณธ ์ •๋„๋ผ ํƒ€์ž…์„ ์ž…๋ ฅํ•˜๋Š” ๊ณผ์ •์ด ์กฐ๊ธˆ ๋ฒˆ๊ฑฐ๋กญ์ง€๋งŒ ์ง์ ‘ ์ฒด๊ฐํ•ด ๋ณผ ๋•Œ๊นŒ์ง€ ์‚ฌ์šฉํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

     

     

     

     

     

    1. json-server

    ์„ค ์—ฐํœด์— ๋ฒจ๋กœํผํŠธ ๋ฆฌ์•กํŠธ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฑธ ๋”ฐ๋ผ ํ•ด ๋ดค๋Š”๋ฐ, ์—ฌ๊ธฐ json-server๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•ด์„œ API ์—ฐ๋™ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค. json-server์˜ ์“ฐ์ž„์ด ์–ด๋ ต์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์จ ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์›”ํ•˜๊ฒŒ mock data๋กœ ์„œ๋ฒ„๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

     

     

     

     

     

     

    2. ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ ๊ตฌํ˜„

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

    ๊ทธ์น˜๋งŒ ๋‚ด๊ฐ€ ๊ฒช๋Š” ๋ฌธ์ œ๋Š” ์ด๋ฏธ ์ด์ „์— ๋ˆ„๊ฐ€ ํ•œ ๋ฒˆ ๊ฒช์€ ๋ฌธ์ œ๋ผ๊ณ ...... ์—ญ์‹œ ๊ตฌ๊ธ€์€ ๋ชจ๋ฅด๋Š” ๊ฒŒ ์—†์Œ.

    map.reduce ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•„ํ„ฐ๋œ ๋ถ€๋ถ„์„ ๋ˆ„์ ์‹œ์ผฐ๋‹ค. 

     

    const onFilter = () => {
        if (!selected) {
            setData(originData);
        } else {
            const newData = originData.reduce<IRequests[]>((acc, curr) => {
                const selectedMethodCondition =
                    name === 'method' && selected && selected.length > 0
                        ? selected.every((i) =>
                              curr.method.includes(i.toString())
                          )
                        : true;
                const selectedMaterialCondition =
                    name === 'material' && selected && selected.length > 0
                        ? selected.every((i) =>
                              curr.material.includes(i.toString())
                          )
                        : true;
                if (selectedMaterialCondition && selectedMethodCondition) {
                    acc.push(curr);
                }
                return acc;
            }, []);
            setData(newData);
        }
    };

    ์ด๋Ÿฐ ์‹์œผ๋กœ acc์— ๋ˆ„์ ์‹œํ‚ค๋Š” ํ˜•์‹์„ ํƒํ–ˆ๋‹ค. 

     

    ์ด ๋ถ€๋ถ„์—์„œ ์•„์‰ฌ์› ๋˜ ์ ์€ TypeScript๋ฅผ ํŒ€์›๋“ค์ด ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์—†์–ด์„œ, redux๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งŽ์ด ์–ด๋ ค์›Œ์งˆ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ props๋ฅผ ๋ถ€๋ชจ์—์„œ ์ž์‹์ด ์ „๋‹ฌํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์„ ํƒํ–ˆ๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ์ „๋‹ฌํ•ด ์ฃผ๋Š” props๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ๊ฒจ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์•ˆ ์ข‹์•„์ง„๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. 3์ผ ์•ˆ์— ์™„์„ฑํ•ด์•ผ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ๊ธ‰ํ•˜๊ฒŒ ์งฐ๋˜ ๊ฒƒ๋„ ์žˆ์—ˆ๋‹ค. ์™„์„ฑํ•˜๊ณ  ๋ณด๋‹ˆ ํ•œ props๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•  ์ˆ˜ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ตณ์ด ๋‚˜๋ˆ ์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ–ˆ๋˜ ๊ฒŒ ๋ณด์˜€๋‹ค.

    ์ดํ›„์— ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” props๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ๋งŒํผ ์ค„์—ฌ์„œ ๋ฆฌํŒฉํ† ๋งํ–ˆ๋‹ค.

     

     

     

     

     

    3. ๋ฆฌํ”„๋ ˆ์‹œ ๊ธฐ๋Šฅ

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

    ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ๋œ props๋ฅผ ์ถœ๋ ฅํ•ด ๋ดค์„ ๋•Œ ์ „๋‹ฌ์ด ์•„์˜ˆ ์•ˆ ๋˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๊ณ  ๊ฐ€๊ณต๋ฐฉ์‹/์žฌ๋ฃŒ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด ์ฒดํฌ๋ฐ•์Šค ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—ด๋ ค ์žˆ์–ด์•ผ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋ƒˆ๋‹ค.

    // ์ด๋Ÿฐ ์‹์œผ๋กœ...
    {isMethodOpen && (
        <FilterButton
        ... 
        />
    )}

    ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํด๋ฆญํ•  ๋•Œ๋งŒ ์ƒ๊ฐํ•˜๊ณ  ์ฒดํฌ๋ฐ•์Šค ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—ด๋ ค ์žˆ์„ ๋•Œ๋งŒ FilterButton์„ ํ˜ธ์ถœํ–ˆ๋Š”๋ฐ, FilterButton์—์„œ ๋˜ ํ˜ธ์ถœ๋˜๋Š” ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์•ผ๋งŒ ๋ฆฌ์…‹ ๊ธฐ๋Šฅ์ด ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ”๋˜ ๊ฑฐ๋‹ค......

    ์—„์ฒญ ์‚ฝ์งˆ ํ–ˆ์—ˆ๋Š”๋ฐ ์•„๋ฌดํŠผ ์ด ์ฝ”๋“œ ์ € ์ฝ”๋“œ ์˜ˆ์ „ ์ฝ”๋“œ ๋‹ค ๋น„๊ตํ•ด ๊ฐ€๋ฉด์„œ ๊ฒจ์šฐ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

     

     

     


     

    ์™ธ์—๋Š” ๋ฐ˜์‘ํ˜• ๊ตฌํ˜„๋„ ์žˆ์—ˆ๋Š”๋ฐ...... ์ง€๊ธˆ๋„ ๋ฐ˜์‘ํ˜• width๋‚˜ height ์กฐ์ ˆ์€ ์–ด๋–ค ๊ฑธ๋กœ ํ•ด์•ผ ํ• ์ง€ ์ •๋ง ์–ด๋ ต๋‹ค. vw๋ฅผ ์“ฐ๋Š” ๊ฒŒ ์ข‹์€๊ฐ€? rem? em? ๋” ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋ฌด๋ž˜๋„ ํ•œ ๋‹ฌ ์ •๋„ ์ง€๋‚˜์„œ ์“ฐ๋‹ˆ๊นŒ ์ƒ๊ฐ์ด ์•ˆ ๋‚˜์„œ github ์ปค๋ฐ‹ ๊ธฐ๋ก์„ ๋”๋“ฌ๋”๋“ฌ ์ฐพ์•„๋ณด๋ฉด์„œ ์ผ๋‹ค. ๋‹ค๋ฅธ ํšŒ๊ณ ๋„ ๋” ๊นŒ๋จน๊ธฐ ์ „์— ์–ผ๋ฅธ ์จ์•ผ ํ•  ๋“ฏ. ^^;

     

    ์จŒ๋“  TypeScript๋Š” ์ฒ˜์Œ ์จ ๋ดค๋Š”๋ฐ, ์‹ค๋ฌด์—์„œ๋Š” TypeScript๋ฅผ ์ •๋ง ๋งŽ์ด ์“ด๋‹ค๊ณ  ํ•œ๋‹ค. JavaScript๋กœ๋งŒ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ™•์‹คํžˆ ๋ฒ ๋„คํ•์ด ์žˆ์œผ๋‹ˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ , ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋„“ํžˆ๊ธฐ ์œ„ํ•ด์„œ๋ผ๋„ ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์•ž์œผ๋กœ ๊ฑฐ์˜ ๋ชจ๋“  React ํ”„๋กœ์ ํŠธ๋Š” TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.

     

     

     

    ์ „์ฒด ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์„œ ํ™•์ธํ•ด ์ฃผ์„ธ์š”. ๐Ÿฅฐ

     

    GitHub - ttaerrim/requests-for-partner: ์š”์ฒญ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณผ์ œ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ๋‹ด์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค

    ์š”์ฒญ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณผ์ œ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ๋‹ด์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค . Contribute to ttaerrim/requests-for-partner development by creating an account on GitHub.

    github.com

     

    ์ฐธ๊ณ 

    ์—ฌ๋Ÿฌ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง

    ๋Œ“๊ธ€

Designed by Tistory.