๊ธฐํ (8) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [ํ๋ฆฌ์ฝ์ค 4์ฃผ์ฐจ] ํฌ๋ฆฌ์ค๋ง์ค ํ๋ก๋ชจ์ ํ๊ณ ๐4์ฃผ์ฐจ ๋ชฉํ 1, 2, 3์ฃผ์ฐจ์ ํ์ตํ ๋ชจ๋ ๊ฒ๋ค์ ์ฝ๋์ ๋ น์ฌ๋ด์ ์์ฌ์์ด ๋จ์ง ์๋๋ก ์ต์ ์ ๋คํ๊ธฐ! ๐4์ฃผ์ฐจ ๋ชฉํ โ ์ฝ๋์ ์ ๋ฌธ์ ๋๋ค. โ ์ด๋ ค์ธ ์๋ก ๋น๋ฌ๋ ํ ์คํธ ์ฝ๋ ์ด๋ฒ ์ฃผ์ฐจ๋ ์ ์งํค๋ฉด์ ํ ์คํธ ์ฝ๋์ ์ฅ์ ์ธ ์ฝ๋์ ๋ํ ํผ๋๋ฐฑ์ ๋นจ๋ฆฌ ๋ฐ๊ณ ์ ํ๋ค. ๊ทธ๋ ๊ฒ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ๋๋ฆฌ๊ฒ ๋์๋ค. ๋๋ค์์ผ๋ก ์์ธ๋ฅผ ํฐ๋จ๋ฆฌ๊ฑฐ๋ map ์ ์ํํ๋ ๋๋ค์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์์๋ ์ด๋ฉด์๋ ์ด๋ก๋ถ์ด ๋ค์ด์ฌ ๋๊น์ง ํ ์คํธ ์ฝ๋๋ฅผ ๋๋ ค๋ดค๊ธฐ ๋๋ฌธ์ด์๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์ฒ์ ํ์ตํ๋ 2์ฃผ์ฐจ์์ ์๊ฒ๋ "์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ '์ด๋ป๊ฒ ํ ์คํธ๋ฅผ ํ ๊ฒ์ธ๊ฐ?' ๋ฅผ ์๋ฌธํ๊ธฐ" ๋ฅผ ์งํค๊ฒ ๋์๋ค. ๊ตฌํ ์ ์ ์ด๋ป๊ฒ ํ ์คํธ๋ฅผ ์์ฑํ ์ง ๋ฏธ๋ฆฌ ์๊ฐํ๊ฒ ๋์๊ณ , ์ด๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ด๋ ค์ด ๊ธฐ๋ฅ์ ๋ ์์ ๋จ์์.. [ํ๋ฆฌ์ฝ์ค 3์ฃผ์ฐจ] ๋ก๋ ๊ฒ์ ํ๊ณ ๐ 3์ฃผ์ฐจ ๋ชฉํ ์์ ์งํค๊ธฐ ๊ฐ์ฒด์งํฅ ์ฝ๋๋ฅผ ์ํด ๋ ธ๋ ฅํ๊ธฐ 1์ฃผ์ฐจ ๋ฐ 2์ฃผ์ฐจ ํผ๋๋ฐฑ๋ฐ์ํ๊ธฐ ์์ด ๊ฐ๋๋๋ก ์ฝ๋๋ฅผ ์์ฑํ์ง ๋ง๊ณ ๋ฏธ๋ฆฌ ์๊ฐํ๊ธฐ ๐ ๋ก๋ ๊ฒ์ ๊ตฌํ โ ์ฝ๋์ ์ ๋ฌธ์ ๋๋ค. โ ์ฌ์ฉ์๋ฅผ ์ํ ์ด๋ค ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ฑด์ง ์๊ฐํ๊ธฐ ์ด๋ฒ ์๊ตฌ์ฌํญ์ 1๋ฑ ๋น์ฒจ๊ธ(20์ต)๋งํผ์ ๋์ ์ฐ๋ฉด ์ผ๋งํผ์ ์์ต๋ฅ ์ด ์๊ธธ์ง ๊ถ๊ธํดํ๋ ์ฌ์ฉ์๊ฐ ์ด ๋ก๋๊ฒ์์ ๋ง์ด ์ด์ฉํ ๊ฒ์ด๋ผ ์๊ฐํ๊ณ ์ด์ ๋ง๊ฒ ์ค๊ณ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค. โ MVC ์ฌ์ฉ [ํ์ต] 3์ฃผ์ฐจ ์๊ตฌ์ฌํญ์ "๋๋ฉ์ธ ๋ก์ง์ ๋ํด ๋จ์ํ ์คํธ ํ๊ธฐ, ๋๋ฉ์ธ ๋ก์ง๊ณผ UI ๋ก์ง์ ๋ถ๋ฆฌํด๋ผ" ๊ฐ ๋์๊ธฐ ๋๋ฌธ์ ๋๋ฉ์ธ ๋ก์ง์ ๋ํด ์์๋ดค๋ค. ์ด ๊ธ์์ ์ํ ์ ๋ฌด๋ฅผ ์์๋ก ์ด๋ค ๋ก์ง์ด ๋๋ฉ์ธ์ด๊ณ , UI ์ธ์ง ์ค๋ช ํด์ค์ ๋์์ ๋ง์ด ๋ฐ์๋ค. ๋๋ฉ์ธ๋ก์ง์ ๋ํด ์ ํํ ๋ชจ.. [ํ๋ฆฌ์ฝ์ค 3์ฃผ์ฐจ] - ์ข์ ๋ค์ด๋ฐ์ ์ํ ๊ท์น โงํ์ตํ ๊ธ์ ์๋ณธ โท ๊ธฐ๋ณธ ๊ท์น โ [S-I-D] ๋ฐ๋ฅด๊ธฐ ๊ธฐ์ตํ๊ธฐ ์ฝ๊ฒ Short ์์ฐ์ค๋ฝ๊ฒ ์ฝํ๋๋ก Intuitive(์ง๊ด์ ์ผ๋ก) ๋ฌด์์ ํ๊ณ ์์ ํ๋์ง ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก Descriptive(์์ ํ๊ธฐ) โ ์ถ์ฝํ ์ด๋ฆ ํผํ๊ธฐ - onItmClk (x) - onItemClick (o) โ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํฌํจํ ์ด๋ฆ ํผํ๊ธฐ - List itemList (x) - List items (o) โ ๋ฌธ๋งฅ ์ ์ค๋ณต์ด ์๋ ์ด๋ฆ ํผํ๊ธฐ class MenuItem{ handleMenuItemClick = ... (x) handleClick = ... (o) } MenuItem.handleMenuItemClick (x) MenuItem.handleClick (o) โ ์์๋ ๊ฒฐ๊ณผ ๋ฐ์ํ๋ ์ด๋ฆ ์ง๊ธฐ /* Bad *.. [ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ] 1์ฃผ์ฐจ ๊ณตํต ํผ๋๋ฐฑ ํ์ต โท ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์๋ฏธ ์๊ฒ ์์ฑํ๋ค. โ ์ข์ ์ปค๋ฐ ๋ฉ์์ง ์์ฑ๋ฒ : ์ด๋ป๊ฒ ํ๋์ง ๋ณด๋ค๋ ๋ฌด์์ ํ๊ณ ์ ํ๋์ง๋ฅผ ์ค๋ช ํ๊ธฐ 1. ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ๋น ํ์ผ๋ก ๊ตฌ๋ถํ๊ธฐ. - ์ ๋ชฉ์ ๋ณ๊ฒฝ์ฌํญ์ ์์ฝ, ๋ณธ๋ฌธ์ ๋ณ๊ฒฝ์ฌํญ์ ์ธ๋ถ๋ด์ฉ์ ์ค๋ช 2. ์ ๋ชฉ์ 50๊ธ์ ์ด๋ด๋ก ์ ํ 3. ์ ๋ชฉ์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์์ฑํ์ง ์๊ธฐ 4. ์ ๋ชฉ์ ๋์๋ ๋ง์นจํ, ๋๋ํ ๋ฃ์ง ์๊ธฐ 5. ์ ๋ชฉ์ ๋ช ๋ น๋ฌธ์ผ๋ก ํ๊ณ , ๊ณผ๊ฑฐํ ์ฌ์ฉํ์ง ์๊ธฐ 6. ๋ณธ๋ฌธ์ ๋ด์ฉ์ 72๊ธ์ ๋ด๋ก ์์ฑํ๊ธฐ โ ์ปค๋ฐ ์ ํ feat: ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ fix: ๋ฒ๊ทธ ์์ docs: ๋ฌธ์ ์์ style: ์ฝ๋ ์คํ์ผ ์์ - ๊ณต๋ฐฑ๊ณผ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํด ์ฝ๋๋ฅผ ์ ๋ฆฌ - ์ฝ๋์ ์ฃผ์์ ์์ฑ - ๋ณ์ ์ด๋ฆ์ ๋ช ํํ๊ฒ ์์ฑ refactor: ์ฝ๋ ๊ตฌ์กฐ ๊ฐ์ - ์ค๋ณต๋ ์ฝ๋๋ฅผ.. [ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ] ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์ ํ๊ณ ๐ 2์ฃผ์ฐจ ๋ชฉํ ์๊ตฌ์ฌํญ์ ์ถฉ์คํ๊ณ , 2์ฃผ์ฐจ ๋ชฉํ์ธ ํจ์ ๋ถ๋ฆฌํ๊ธฐ์ ํจ์๋ณ๋ก ํ ์คํธ ์์ฑ์ ์ต์ํด์ง๊ธฐ! 1์ฃผ์ฐจ ๊ณตํต ํผ๋๋ฐฑ ์ ์ฉํ๊ธฐ! ์ฝ๋๋ฅผ ํ ์ค ํ ์ค, ๊ณ ๋ฏผํ๋ฉฐ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๊ธฐ! ์ค๋ฅ๋ฅผ ๋ฌด์์ํ์ง ๋ง๊ณ ์ฑ์ฅ์ ๊ณผ์ ์ด๋ผ ๋ฏฟ๊ธฐ! ์ฒ์ฒํ ๊ทธ๋ฆฌ๊ณ ๊ผผ๊ผผํ ๋ฌธ์ ์ฝ๊ธฐ! ๐ ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์ ๊ตฌํ โ ์ฝ๋์ ์ ๋ฌธ์ ๋๋ค. โ ์ข์ ํ๋ก๊ทธ๋จ์ด๋? 2์ฃผ์ฐจ๋ ์๊ตฌ์ฌํญ ๋ง๋ค "~ํ ์ ์๋ค." ๋ก ๋๋์ ์ฐธ ์ ๋งคํ๋ค. ์ด๋ป๊ฒ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ผํ ์ง ์ป์ ๋๋, ์๊ธฐ ์ ์๋, ๊ตฌํ ๋์ค์๋ ์ง์ง ๊ณ์ ๊ณ ๋ฏผํ๋ค. ๊ทธ ๊ณผ์ ์์ Console.readLine() ๋ด๋ถ ์์ ๋ค์ด๊ฐ ๋ณด๊ธฐ๋ ํ๊ณ , escape ๋ฌธ์๋ ์ถ๋ ฅ๊ณผ ๋ค๋ฅด๊ฒ ๊ทธ๋๋ก ์ ๋ ฅ์ด ๋๋์ง ์๊ฒ ๋๊ณ , BigDecimal์ BigInteger ์๋ฃํ์ ํจ์๋ค๋ ์ฐพ๊ณ , .. [ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ] ์๋ฐ ์ฝ๋ฉ ์ปจ๋ฒค์ (ํด์ค) [โ์๋ฐ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ ์ง์ผ์ผ ํ๋๊ฐ? ] ์๋ฅผ ๋ค์ด, ๋ํ์ ์์ ์ ์กฐ๋ณ๊ณผ์ ppt๋ฅผ ๋ง๋ค๊ธฐ ์ํด 5๋ช ์ด ๋ชจ์๋ค๊ณ ๊ฐ์ ์ ํฉ๋๋ค. ppt๋ฅผ 5๋ถํ ํด์ ๊ฐ์ ๋งก์ ํํธ๋ฅผ ์ ํ๊ณ , 3์ผ ๋ค์ ๊ฐ์ ppt๋ฅผ ์์ฑํ์ฌ ๋ง๋ฌ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ, ppt์ ๋ฐฐ๊ฒฝ ์, ๊ธ์ ํฌ๊ธฐ์ ์๋ฑ์ ํต์ผํ์ง ์๊ณ ๊ฐ์ ์ทจํฅ๊ป ๋ง๋ค์ด์์ต๋๋ค. ์ด ์ํ๋ก ppt๋ฅผ ํฉ์น๋ค๋ฉด ์ข์ ์ ์๋ฅผ ๋ชป ๋ฐ์ ๊ฒ์ ๋ถ๋ช ํฉ๋๋ค. ์ฝ๋ฉ๋ ๋๊ฐ์ต๋๋ค. ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํ์ ํ๋ ๊ณผ์ ์์ ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์์ ํ๊ฑฐ๋, ๋ฐ๋๋ก ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์์ ํ ์ฝ๋๋ฅผ ๋ด๊ฐ ์์ ํ ๋๋ ์์ต๋๋ค. ์ด ๋, ์๋ฐ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ ํต์ผํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ์ด๋ ค์ ์์ด ์๋๋ฐฉ์ ์ฝ๋๋ฅผ ์ฝ๊ณ , ์ถ๊ฐ ์์ ์ ํ ์ ์์ต๋๋ค. ์ฆ, ์๋ฐ ์ฝ๋ฉ ์ปจ๋ฒค์ ๋ ๊ฐ๋ฐ์๋ค์ ํ์ .. [ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ] ์ซ์ ์ผ๊ตฌ ๊ฒ์ ํ๊ณ ๐ 1์ฃผ์ฐจ ์์ ์ ์ทจ์ค ๊ธฐ๊ฐ ์ค 1๋ฌ์ด๋ ์๊ฐ์ ํ๋ฆฌ์ฝ์ค์ ํฌ์ํ๋ ๋งํผ ๊ผญ ์ฑ์ฅํ๊ณ ์ถ์๊ธฐ์ ์ด๋ป๊ฒ ํ๋ฉด ํ๋ฆฌ์ฝ์ค์ ์ ๋ณด๋ค ์ฑ์ฅํ ์ ์์์ง ๊ณ ๋ฏผํ๊ณ ์ด๋ฒ ์ฃผ์๋ 2๊ฐ์ ๋ชฉํ๋ฅผ ์ธ์ ๋ค. โ ๋ชฉํ ์ฒซ ๋ฒ์งธ๋ ํ๋ฆฌ์ฝ์ค๋ฅผ ์งํํ๋ฉฐ ๋ชจ๋ฅด๋ ์ฉ์ด๋ค์ ๋ค ์ฐพ์๋ณด๊ณ ์ดํด ํ๊ธฐ. ๋ ๋ฒ์งธ๋ ์ต๊ทผ์ ํ์ตํ ๋๋ค์๊ณผ ๊ฐ์ฒด์งํฅ์ ํ์ฉํด์ 1์ฃผ์ฐจ ๋ณด๋ด๊ธฐ. ์ต์ ์ด 2๊ฐ๋ฅผ ์ทจ์ค์์ด์ด์ ํ๋ฆฌ์ฝ์ค์๋ง ์ง์คํ ์ ์๋ ์๊ฐ๊ณผ ๋ ํ์ด๋ ๊ธธ์ ๊ฑธ์ด์จ ๋ ธ๋ ฅ๊ณผ ๊ทผ์ฑ์ ๊ฐ์ง๊ณ ์ด๋ฃจ๊ณ ์ ํ๋ค. ๋ถ๋ช ํ ์ฑ์ฅํด์๊ฒ ์ง!? ๐ ์ซ์ ์ผ๊ตฌ ๊ฒ์ ๊ตฌํ โ ๊ตฌํ ์ค์ ๋ง๋ ์ค๋ฅ ํด๊ฒฐ๊ณผ ์์ฌ์ ๋๋ ์ด์ ๊ธฐ์ ํ๋ฆฌ์ฝ์ค ๋ฌธ์ ๋ค ์ค ์ ์ผํ๊ฒ ๋ฑ ํ ๋ฌธ์ ๋ฅผ ํ๋ฃจ๋์ ํ์ด๋ดค์๋๋ฐ, ๊ทธ๊ฒ ์ซ์ ์ผ๊ตฌ ๊ฒ์์ด์๋ค. ๊ทธ๋ฌ๋, ๊ตฌํํ๋ฉด์ ๊ณ์ ์๋ฌ๋ฅผ ๋ง์ฃผํ์์ง๋ง ํด๊ฒฐํ์ง.. [ํ๋ฆฌ์ฝ์ค ํ๋ฆฌ๋ทฐ] ํ๋ฆฌ์ฝ์ค๋ฅผ ์์ํ๋ ๋น์ ๊ณต์๋ฅผ ์ํ ๊ฐ์ด๋ โ๊ฐ ์ฉ์ด๋ง๋ค ๊น์ด ๋ค์ด๊ฐ๋ ์ ๋๋ ๋น์ ๊ณต์๊ฐ ํ๋ฆฌ์ฝ์ค๋ฅผ ํ๋๋ฐ์ ์ด๋ ค์์ด ์์ ์ ๋๊น์ง๋ง ๋ค์ด๊ฐ๋๋ค. โ ๊ฐ ์ฉ์ด๋ค์ ํ๋ฆฌ์ฝ์ค์ ๋ง์ถฐ ์ค๋ช ๋๋ฆผ์ ๋ฏธ๋ฆฌ ์๋ ค๋๋ฆฝ๋๋ค. ๐ถ๏ธ[ํ๋ฆฌ์ฝ์ค ๊ณผ์ ์ ์ถ ๋ฌธ์ ๊นํ๋ธ ์ฉ์ด ์ ๋ฆฌ] โท fork ์ฐ์ํ ์ฝ์ค ๊นํ๋ธ์ ์๋ Repository๋ฅผ ์์ ์ ๊นํ๋ธ๋ก ๊ฐ์ ธ์ค๊ธฐ *์์ ์ ๊นํ๋ธ๋ก ๊ฐ์ ธ์ค์ง ์์ผ๋ฉด Repository์์ ์๋ ์ฝ๋๋ฅผ ์์ ํ ์ ์๋ ๊ถํ์ด ์๋ค. โทRepository ์ฝ๋๊ฐ ๋ค์ด์๋ ํด๋(ํ์ผ)์ ๋งํ๋ค. 5๊ธฐ ํ๋ฆฌ์ฝ์ค์์๋ java-baseball, java-onboarding ๊ฐ์ ๊ฒ๋ค์ ๋งํ๋ค. ex) ํํ ์๊ณ ์๋ ๋ฐํํ๋ฉด์ ํด๋๋ฅผ ์์๋ก ๋ค์์ต๋๋ค. ์์์ ํด๋์ ๋ค์ํ ์๋ ๋ฌธ์๋ค์ด ์๋ค. ์์์ ํด๋๊ฐ Repository, ์๋ ๋ฌธ์๋ค์ด.. ์ด์ 1 ๋ค์