๐ ๋ค์ด๊ฐ๋ฉฐ React + Typescript ํ๊ฒฝ์์ React Testing library์ jest๋ฅผ ์ด์ฉํด์ ํ ์คํธ ์ฝ๋ ์์ฑ์ ๋ํด์ ๊ณต๋ถํ๋ ค๋ ๋์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด ํด์ผ ํ ๊ฒ์ ๋ณ ๊ฑฐ ์๋์์ง๋ง ํ๋ค๊ฒ(?) ํด๊ฒฐ ๋ฐฉ์์ ์ฐพ์์ ๊ธฐ๋ก์ ํด๋๋ ค๊ณ ํ๋ค. 1. ๋ฌธ์ ๋ฐ์ CRA typescript๋ก ํจํค์ง๋ค์ ์ค์นํ๊ณ ๋ ํ์ npm test ๋ช ๋ น์ด๋ฅผ ํตํด์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋์ด ์๋ ํ ์คํธ ์ฝ๋๋ค์ด ์ ์คํ์ด ๋๋์ง ํ์ธ์ ํด๋ดค๋ค. ํ์ง๋ง ReactDOM.render is no longer supported in React 18 ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ํ ์คํธ ์ฝ๋ ์์ฒด๋ PASS๊ฐ ๋๋ฉด์ ์ ์คํ์ด ๋์์ง๋ง ์์ ๊ฐ์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋งค์ฐ ์ ๊ฒฝ ์ฐ์๋ค. 2. ๋ฐ์ ์์ธ Rea..
ํด๋ฆฐ ์ฝ๋ ์ฝ์ผ๋ฉฐ ๋ผ๋ง์๋ ๋ด์ฉ ์ค 3๊ฐ์ง ์ง๋ฆฌ ๋ฅผ ๊ณ ๋ฅด๊ณ , ์ง๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์ ์ด 3๊ฐ์ง๋ฅผ ๋ง๋ค๊ธฐ. ์ง๋ฆฌ 1. try/catch ๋ธ๋ก์ ๋ณ๋ ํจ์๋ก ๋ฝ์๋ด๋ ํธ์ด ์ข๋ค. (p.58) ๋ฌด์์ ๊ณ ์ณค๋๊ฐ? ๐ Before const saveAsImageHandler = async () => { const target = document.getElementById('content'); if (!target) return alert('๊ฒฐ๊ณผ ์ ์ฅ์ ์คํจํ์ต๋๋ค.'); alert( '์๋ก์ด ์ฐฝ์ด ์ด๋ฆฌ๋ฉด\nPC์์๋ ์ฐํด๋ฆญ -> ์ด๋ฏธ์ง ์ ์ฅํ๊ธฐ\n๋ชจ๋ฐ์ผ์ ์ด๋ฏธ์ง๋ฅผ ๊พน ๋๋ฌ์ฃผ์ธ์!\n*์๋ก์ด ์ฐฝ์ด ์ ์ด๋ฆฐ๋ค๋ฉด ํ์ ์ ํด์ ํด์ฃผ์ธ์*' ); try { const canvas = await html2canvas(target..
Day 20, 21 ๐ ์ค๋ ์ฝ์ ๋ฒ์ : 10์ฅ ํด๋์ค(p.172 ~ p.192) ๐ ์ฑ ์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ ํด๋์ค๋ฅผ ๋ง๋ค ๋ ์ฒซ๋ฒ์งธ ๊ท์น์ ํฌ๊ธฐ๋ค. ํด๋์ค๋ ์์์ผ ํ๋ค. ๋ ๋ฒ์งธ ๊ท์น๋ ํฌ๊ธฐ๋ค. ๋ ์์์ผ ํ๋ค.(p.172) ํด๋์ค ์ค๋ช ์ ๋ง์ผ("if"), ๊ทธ๋ฆฌ๊ณ ("and"), -(ํ)๋ฉฐ("or), ํ์ง๋ง("but")์ ์ฌ์ฉํ์ง ์๊ณ ์ 25๋จ์ด ๋ด์ธ๋ก ๊ฐ๋ฅํด์ผ ํ๋ค.(p.175) ๋จ์ผ ์ฑ ์ ์์น์ ํด๋์ค๋ ๋ชจ๋์ ๋ณ๊ฒฝํ ์ด์ ๊ฐ ํ๋, ๋จ ํ๋๋ฟ์ด์ด์ผ ํ๋ค๋ ์์น์ด๋ค.(p.175) ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ ์์ ์ ํ๋ก๊ทธ๋จ๋ง์ด ์๋๋ผ ํ๋ก๊ทธ๋๋ฐ ํ๋์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค์ํ๋ค.(p.176) "๋๊ตฌ ์์๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๊ณ ์ถ์๊ฐ? ์์ ์๋์ ๋ง์ด ๋๊ณ ๊ธฐ๋ฅ๊ณผ ์ด๋ฆ์ด ๋ช ํํ ์ปดํฌ๋ํธ๋ฅผ ๋๋ ๋ฃ๊ณ ์ถ์๊ฐ? ์๋..
๐ ๋ค์ด๊ฐ๋ฉฐ DFS ๊น์ด ์ฐ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋จธ์ค 'ํ๊ฒ ๋๋ฒ' ๋ฌธ์ ํ์ด๋ฅผ ํด๋ณด๊ฒ ๋ค. โ ๋ฌธ์ ๋ฌธ์ ์ค๋ช n๊ฐ์ ์์ด ์๋ ์ ์๋ค์ด ์์ต๋๋ค. ์ด ์ ์๋ค์ ์์๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ ์ ํ ๋ํ๊ฑฐ๋ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด [1, 1, 1, 1, 1]๋ก ์ซ์ 3์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ค์ฏ ๋ฐฉ๋ฒ์ ์ธ ์ ์์ต๋๋ค. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 ์ฌ์ฉํ ์ ์๋ ์ซ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers, ํ๊ฒ ๋๋ฒ target์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ์ซ์๋ฅผ ์ ์ ํ ๋ํ๊ณ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ์ ํ ์ฌํญ ์ฃผ์ด์ง๋ ์ซ..
Day 17, 18 ๐ ์ค๋ ์ฝ์ ๋ฒ์ : 9์ฅ ๋จ์ ํ ์คํธ(p.153 ~ p.170) ๐ ์ฑ ์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ TDD ๋ฒ์น ์ธ ๊ฐ์ง(p.155) ์ฒซ์งธ ๋ฒ์น: ์คํจํ๋ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ ๋๊น์ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๋๋ค. ๋์งธ ๋ฒ์น: ์ปดํ์ผ์ ์คํจํ์ง ์์ผ๋ฉด์ ์คํ์ด ์คํจํ๋ ์ ๋๋ก๋ง ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ค. ์ ์งธ ๋ฒ์น: ํ์ฌ ์คํจํ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ๋๋ก๋ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ํ ์คํธ ์ฝ๋๊ฐ ๋ณต์กํ ์๋ก ์ค์ ์ฝ๋๋ฅผ ์ง๋ ์๊ฐ๋ณด๋ค ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ถ๊ฐํ๋ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฌ๊ธฐ ์ญ์์ด๋ค. ์ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด ๊ธฐ์กด ํ ์คํธ ์ผ์ด์ค๊ฐ ์คํจํ๊ธฐ ์์ํ๋ฉด, ์ง์ ๋ถํ ์ฝ๋๋ก ์ธํด, ์คํจํ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ ์ ํต๊ณผ์ํค๊ธฐ ์ด๋ ค์์ง๋ค.(p.156) ํ ์คํธ ์ฝ๋๋ ์ค์ ์ฝ๋ ๋ชป์ง์๊ฒ ์ค์ํ๋ค.(p.157) ์ฝ..
๐ ์ถ์ฒํ๋ TIL @Flynn ๋ ๋งํฌ: Day11 ๋ด๊ฐ ์์ฑํ๋ Day11์ ๋ฆฌํฉํ ๋ง ๋ถ๋ถํ๊ณ ๊ตฌ์กฐ ์์ฒด๋ ๋น์ทํ์ง๋ง ๋ด ์ฝ๋์์ ๋ญ๊ฐ ์ข ๋ ๋ถ์กฑํ์ง ์๊ฒ ํด์ฃผ์๋ Flynn๋์ ์ฝ๋์๋ค. ๋ณ์๋ช , ํจ์๋ช , ํจ์ ๊ธฐ๋ฅ ๋ถ๋ถ์์ ์ต~๋ํ ๋ช ํํ๊ฒ ์ด๋ฆ์ ์ง๊ณ ์ธ๋ถํ ํ ๊ฒ์ ๋ณด๊ณ ์ด๋ ๊ฒ๊น์ง ํ ์ ์์๊ตฌ๋ ๋๊ผ๋ Flynn๋์ ์ฝ๋์๋ค. @์น์ ๋ ๋งํฌ: Day12 ์ง๊ธ๊น์ง ์ฝ์ผ๋ฉด์ ๊ฐ์ธ์ ์ผ๋ก ์ ์ผ ์ด๋ ค์ ๋ ๋ถ๋ถ์ด '๊ฐ์ฒด์ธ ์๋ฃ๊ตฌ์กฐ' ๋ถ๋ถ์ด์๋๋ฐ ์น์๋๊ป์๋ ์ธ๋ฐํ๊ฒ ์ฝ๋ ๋ถ๋ถ๋ ์ธ์ฉํ๊ณ ์ ๋ฆฌ๋ ์ ํ์ ๊ฒ ๊ฐ๋ค. @Arthur Coker ๋ ๋งํฌ: Day15 '์ค๋ฅ ์ฒ๋ฆฌ'์ฅ์์ ์ง์ ์ฝ๊ณ ์์ ์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ ๊ฒ์ ์์ฑํ๊ณ ๋ฌธ์ ์ ๊น์ง ์ ์ํ๋ ๋ถ๋ถ์ด ์ธ์๊น์๋ค.
Day 13, 15 ๐ ์ค๋ ์ฝ์ ๋ฒ์ : 7์ฅ ์ค๋ฅ ์ฒ๋ฆฌ(p.130~p.142) ๐ ์ฑ ์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ ๊นจ๋ํ ์ฝ๋์ ์ค๋ฅ ์ฒ๋ฆฌ๋ ํ์คํ ์ฐ๊ด์ฑ์ด ์๋ค. ์๋น์ ์ฝ๋ ๊ธฐ๋ฐ์ ์ ์ ์ผ๋ก ์ค๋ฅ ์ฒ๋ฆฌ ์ฝ๋์ ์ข์ฐ๋๋ค.(p.130) ์ค๋ฅ ์ฝ๋๋ณด๋ค ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ.(p.130) ์์ธ๊ฐ ๋ฐ์ํ ์ฝ๋๋ฅผ ์งค ๋๋ try-catch-finally ๋ฌธ์ผ๋ก ์์ํ๋ ํธ์ด ๋ซ๋ค. ๊ทธ๋ฌ๋ฉด try ๋ธ๋ก์์ ๋ฌด์จ ์ผ์ด ์๊ธฐ๋ ์ง ํธ์ถ์๊ฐ ๊ธฐ๋ํ๋ ์ํ๋ฅผ ์ ์ํ๊ธฐ ์ฌ์์ง๋ค.(p.131) ์ค๋ฅ ๋ฉ์์ง์ ์ ๋ณด๋ฅผ ๋ด์ ์์ธ์ ํจ๊ป ๋์ง๋ค. ์คํจํ ์ฐ์ฐ๊ณผ ์คํจ ์ ํ๋ ์ธ๊ธํ๋ค.(p.135) ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค๋ฅ๋ฅผ ์ ์ํ ๋ ํ๋ก๊ทธ๋๋จธ์๊ฒ ๊ฐ์ฅ ์ค์ํ ๊ด์ฌ์ฌ๋ ์ค๋ฅ๋ฅผ ์ก์๋ด๋ ๋ฐฉ๋ฒ์ด ๋์ด์ผ ํ๋ค.(p.135) null์ ๋ฐํํ๋ ์ฝ๋๋..
Day 12 ๐ ์ค๋ ์ฝ์ ๋ฒ์ : 6์ฅ ๊ฐ์ฒด์ ์๋ฃ๊ตฌ์กฐ(p.118~p.128) ๐ ์ฑ ์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ ๊ฐ๋ฐ์๋ ๊ฐ์ฒด๊ฐ ํฌํจํ๋ ์๋ฃ๋ฅผ ํฌํํ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ฌ๊ฐํ๊ฒ ๊ณ ๋ฏผํด์ผ ํ๋ค.(p.119) ๊ฐ์ฒด๋ ์ถ์ํ ๋ค๋ก ์๋ฃ๋ฅผ ์จ๊ธด ์ฑ ์๋ฃ๋ฅผ ๋ค๋ฃจ๋ ํจ์๋ง ๊ณต๊ฐํ๋ค.(p.119) ์๋ฃ ๊ตฌ์กฐ๋ ์๋ฃ๋ฅผ ๊ทธ๋๋ก ๊ณต๊ฐํ๋ฉฐ ๋ณ๋ค๋ฅธ ํจ์๋ ์ ๊ณตํ์ง ์๋๋ค.(p.119) ์ ์ฐจ์ ์ธ ์ฝ๋๋ ๊ธฐ์กด ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ์ ํจ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ฝ๋ค. ๋ฐ๋ฉด, ๊ฐ์ฒด ์งํฅ ์ฝ๋๋ ๊ธฐ์กด ํจ์๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ฝ๋ค.(p.122) ์ ์ฐจ์ ์ธ ์ฝ๋๋ ์๋ก์ด ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ด๋ ต๋ค. ๊ทธ๋ฌ๋ ค๋ฉด ๋ชจ๋ ํจ์๋ฅผ ๊ณ ์ณ์ผ ํ๋ค. ๊ฐ์ฒด ์งํฅ ์ฝ๋๋ ์๋ก์ด ์ด ํจ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ด๋ ต๋ค. ๊ทธ๋ฌ๋ ค๋ฉด ๋ชจ๋ ํด๋์ค๋ฅผ ๊ณ ์ณ..
DAY 11 ๐ ๋ฏธ์ : ๋๋ฌ์ด ์ฝ๋๋ฅผ ๊ณ ์น์ ๐ฉ ๋๋ฌ์ด ์ฝ๋ const merry = document.querySelector(".js-clock"); function getClock() { const christmas = new Date("2021, 12, 25"); const date = new Date(); const timeGap = christmas - date; const xDay = Math.floor(timeGap / (1000 * 60 * 60 * 24)); const xHours = Math.floor( (timeGap - xDay * 1000 * 60 * 60 * 24) / (1000 * 60 * 60) ); const xMinutes = Math.floor((timeGap % (60..