-
์ํฐ๋ ํ๋ฆฌ์จ๋ณด๋ฉ ํ๋ก ํธ์๋ ์ฝ์ค 2์ฃผ์ฐจ ํ๊ณ (1) — TypeScriptETC 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๋ฅผ ์ฌ์ฉํ์ง ์์๊น ์ถ๋ค.
์ ์ฒด ์ฝ๋๋ ์ฌ๊ธฐ์ ํ์ธํด ์ฃผ์ธ์. ๐ฅฐ
์ฐธ๊ณ
'ETC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ