๐ฉ๐ช ๋ณ์๋ช ์ ๋ง๋ค ๋๋ ๋ ์ผ ์ฌ๋์ฒ๋ผ // ๋ ์ผ์ ํ๊ธฐ๋ฒ
๋ ์ผ์ ์ด๊ณ ์์ผ๋, ์ฒซ ๊ฒ์๊ธ์ ๋ ์ผ์ด์ ๊ด๋ จ๋ ์ด์ผ๊ธฐ๋ฅผ ์ ์ด๋ณผ๊น ํฉ๋๋ค. ๋ ์ผ์ด ์ฌ์ ์ ํ๊ธฐ๋ ๊ฐ์ฅ ๊ธด ๋จ์ด๋ ์๋์ฐจ ์ฑ ์๋ฐฐ์ Kraftfahrzeughaftpflichtversicherung (ํฌ๋ผํํธํ์ด์ด๊ทธ -ํํํธํ๋ฆฌ์ํธ-ํ์ด์ง์ ๋ฃฝ)๋ผ๊ณ ํฉ๋๋ค. ๋ฐ์ ์กฐ์ฐจ๋ ํ๋ ๋ฐ์. ์ฌ์ ์ ๋ฑ๋ก๋์ง ์์์ง๋ง ๋ฌด๋ฃ 79๊ธ์์ ์ก๋ฐํ๋ ๋จ์ด๋ ์์ต๋๋ค. ์๋ฅผ๋ค๋ฉด Donaudampfschiffahrtselektrizitรคtenhauptbetriebswerkbauunterbeamtengesellschaft๏ผ๋๋์ฐ๋ดํ์ฝํ์ธ ์ผ๋ ํธ๋ฆฌ์นํ ํ ํ์ฐํํธ๋ฒ ํธ๋ฆฌ๋ธ์ค๋ฒ ๋ฅดํฌ๋ฐ์ฐ์ดํฐ๋ฒ ์ํ ๊ฒ์ ค์คํํธ, ํ๊ตญ์ด๋ก ๋๋์ฐ ๊ธฐ์ ์ ๊ธฐ์ฌ์ ๋ณธ๊ณต์ฅ ๊ณต์ฌ๋ถ๋ฌธ ํ๊ธ๊ด๋ฆฌ์กฐํฉ) ๊ฐ์ด์. ์ด์ฒ๋ผ ๋ ์ผ์ด๋ ๋จ์ด์ ๋จ์ด๊ฐ ํฉ์ณ์ง ํฉ์ฑ์ด์๋ ๋์ด์ฐ๊ธฐ๋ฅผ ํ์ง ์๋ ํน์ง์ด ์์ต๋๋ค. ์ด์ฉ์ง ๋จ์ด์์ฒด๋ ๋ง์น ํ๋ก๊ทธ๋๋ฐ์์์ ๋ณ์๋ช ๊ฐ์ด ๋ณด์ด์ฃ ? ๊ตณ์ด ๋ถํธํ๋๋ผ๋ ๋ช ์์ ์ด๋ฉฐ ๊ตฌ์ฒด์ ์ผ๋ก ํํํ๊ณ ์ ํ๋ ๋ ์ผ ์ฌ๋๋ค์ ์ธ์ด์ ์ต๊ด ๋๋ฌธ์ ์ ๋ฝ์์๋ ํด๋ฆฐ ์ฝ๋๋ฅผ ๋ ผํ ๋ '๋ ์ผ์ฌ๋์ฒ๋ผ ๋ณ์ ์ด๋ฆ์ ์ง์ด๋ผ'๊ณ ๋งํฉ๋๋ค. ์ด๋ฅผ ๋ ์ผ์ ํ๊ธฐ๋ฒ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ต๋๋ค. ๊ณผ๊ฑฐ์๋ ํ๊ฐ๋ฆฌ์ ํ๊ธฐ๋ฒ์ฒ๋ผ ์ ๋์ด/ํ์ ๋ช ๋ฑ์ ์ฌ์ฉํด ๋ณ์๋ช ์ ๋ฌด์กฐ๊ฑด ์ต๋ํ ์งง๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ฐ๋ ๊ฒ์ด ์ ํํ๋๋ฐ์. ์ต๊ทผ์๋ ๋ณ์, ํจ์ ๋ฑ ์ด๋ฆ์ ์ํธํ ๊ฐ์ด ๋ณด์ด๋ ์ถ์ฝ์ด ์ฌ์ฉ์ ์ต๋ํ ์ง์ํ๋ผ๊ณ ๋งํฉ๋๋ค. ๋จ์ด ์๊ฐ ๊ฝค ๊ธธ๋๋ผ๋ ๊ตฌ์ฒด์ ์ด๊ณ ๋ช ์์ ์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ธ๋ค๋ ์ด์ ์ด์ง์. ์ด๋ฅผ ํ ๋ฉด ํ์ผ์ ์ฌ๋ ๋ฉ์๋ ์ด๋ฆ์ fopen ๋์ openFile์ ์ฌ์ฉํ๊ณ , ์ ํจ์ฑ ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ throwVE ๋์ throwValidationError์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ฐ๋จํ ํจ์๋ Foo/Bar/Baz ์ฌ์ฉํ์ง ๋ง๋ผ๊ณ ํฉ๋๋ค. ์ค์ ๋ก ์ ๋ ์ค๋ฌด์์ ์๋ฐ์คํฌ๋ฆฝํธ reduce, filter, map ๊ฐ์ iterators ์์๋ acc, cur, i, n์ ๊ฐ์ ๋ณ์๋ช ์ ์ต๋ํ ์ฌ์ฉํ์ง ๋ง๋ผ๊ณ ์ฌ๋ฌ๋ฒ ํผ๋๋ฐฑ์ ๋ฐ์์ต๋๋ค. UI ์์๋ btn ๋ง๊ณ button์ด๋ผ๊ณ ํ๋ ๊ฒ์ด ๋ฐ๋์งํ๊ณ ์. ๊ทธ๋ผ ์๋ ์ฝ๋๋ฅผ ๋ณด๊ณ ๋ ์ผ์ ํ๊ธฐ๋ฒ์ ์ ์ฉํด ๋ณผ๊น์? ์๋ ํจ์๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ ํด ๋ณผ ์ ์์๊น์? const one = (a) => { let n = a .split('\n') .map(x => parseInt(x)); for (let i = 0; i x == foo); if (n.filter(x => x == foo).length == 1) { return n[i] * bar; } } } ์ด ํจ์๋ ๋ฌธ์์ด ์ ๋ ฅ๊ฐ ์ค ์ ์๋ง ์ถ์ถํ์ฌ ๋ฐฐ์ด์ ๋ง๋ ๋ค์, ๋ ๊ฐ์ ์ซ์๊ฐ์ ์ด ํฉ์ด 2020์ด ๋๋ ์์๋ฅผ ์ฐพ๊ณ ๋ ํฉ์ ๊ณฑ์ ๊ณ์ฐํ๋ค์. ์ฐ์ฐ ๊ณผ์ ์ด ๊ฝค ๋ณต์กํฉ๋๋ค. ์ด์ ์ด ํจ์์ ๋ ์ผ์ ํ๊ธฐ๋ฒ์ ์ ์ฉํด๋ณผ๊น์?. const findProductOfTwoEntriesWhoseSumIs2020 = (input) => { let numbers = input .split('\n') .map(x => parseInt(x)); for (let i = 0; i x == partOneOf2020); if (numbers.filter(x => x == partOneOf2020).length == 1) { return numbers[i] * partTwoOf2020; } } } ์ ๋งค๋ชจํธํ ํจ์ ์ด๋ฆ์ธ one๋ฅผ findProductOfTwoEntriesWhoseSumIs2020์ผ๋ก ๋ฐ๊พธ์์ด์. ํจ์ ์ด๋ฆ์ด ๊ฝค ๊ธธ์ด์ก์ง๋ง ํจ์ ๋ณธ๋ฌธ์ ์ฝ์ง ์๊ณ ๋ ํจ์๊ฐ ์ด๋ค ์ผ์ ํ๋์ง ๋ฐ๋ก ์ดํดํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด์ฒ๋ผ ๋ชฉ์ ๊ณผ ์๋๋ฅผ ๋ช ํํ๊ฒ ์์ฑํ๋ ๊ฒ์ด ๋ ์ผ์ ํ๊ธฐ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค. foo์ bar๊ฐ์ ๋๋คํ ๋ณ์ ์ด๋ฆ๋ partOneOf2020, partTwoOf2020์ผ๋ก ๋ฐ๊พธ์ด ๊ฐ ๋ณ์๊ฐ ๋ฌด์์ ์ง์นญํ๋์ง ์ ์ ์๊ฒ ๋์์ต๋๋ค. ํจ์์ ์ธ์ a๋ input์ผ๋ก ๋ฐ๊พธ์ด ์ด๋ค ๋ฐ์ดํฐ์ธ์ง ์ ์ ์๊ณ ์. ์ํธ ๊ฐ์ ๋ณ์ ์ด๋ฆ์ ํด์ํ์ง ์์๋ ๋๊ณ ์. ์์ฑ๋ ๊ทธ๋๋ก๋ฅผ ์ฝ์ด๋ ๋๊ตฌ๋ ์ดํดํ ์ ์๊ฒ ๋์์ด์. 'ํ๋ฒํ ์ธ์ด(์์ด)'๋ก ๋ง์ด์ฃ . ------- ์ฐธ๊ณ ๋งํฌ https://chrisdone.com/posts/german-naming-convention/ https://slides.com/adriennetacke/documentation-the-missing-pieces/fullscreen#/20