๐ ๊ฐ๋ฐ ๊ฒฝ๋ ฅ 14๋ , ์ฌ์ ํ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ ต๋ค (2)
Piglei๋์ ๋ธ๋ก๊ทธ๋ฅผ ์์ญ/์์ฝํ ๊ธ์ ๋๋ค. --- 3) ํจ์จ์ ์ธ ์ํ์ฐฉ์ค ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ฒ์ ์ค์ํ๋ค ํ ๋ ๋๋ ์ ๋ช ํ ์ ํ์ ๊ฐ๋ฐํ์๋ค. ๋์์ธ์ด ์ธ๋ จ๋๊ณ , ๊ธฐ๋ฅ์ด ํ๋ถํ์ผ๋ฉฐ, ๋งค์ผ ์ฌ์ฉํ๋ ์ฌ๋์ ์๋ ์์ฒญ๋ฌ๋ค. ์์ฅ์์์ ์ฑ๊ณต๊ณผ๋ ๋ฌ๋ฆฌ, ์์ง๋์ด๋ง์ ์ฒ์ฐธํ๋ค. ๋ฐฑ์๋๋ ๊ฐ๋จํ ๋จ์ ํ ์คํธ์กฐ์ฐจ ์์๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ๋ณต์กํ์ผ๋ฉฐ ๊ทธ๋ก ์ธํด ๊ฐ๋นํ์ง ๋ชปํ ์ ๋์ ์์กด์ฑ์ด ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์์๋ค. ์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ํ๋ฉด ๊ธฐ์กด ์ฝ๋ ์ด๋๊ฐ๋ฅผ ๋ง๊ฐ์ง๊ฒ ํ๋ค. ๊ทธ๋์ ๋ฐฐํฌํ ๋ ๋ง๋ค ๊ฐ๋ฐํ๊ณผ ์ ํํ์ ์๋นํ ๊ธด์ฅ๊ฐ ์์์ ์๋ฏผํ ์ ๋ฐ์ ์์๋ค. ๋ฐฐํฌ ๊ณผ์ ์ ํญ์ ์ด์ผ์ํ ๊ฐ์๊ณ ๋กค๋ฐฑ์ ๋ฐฅ ๋จน๋ฏ์ด ํ๋ค. ์ด๋ฐ ํ๊ฒฝ์์ ์ผํ๋ค ๋ณด๋ฉด, ๊ธฐ์ ์ ์ผ๋ก ์ฑ์ฅํ๊ธฐ ์ด๋ ต๊ณ ๋ฉํ๋ง ๊ฐํด์ง ๋ฟ์ด๋ค. ๊ฐ๋ฐ์ ์ฌ๋ฏธ์์ด์ผ ํ๋ค. ๊ทผ๋ฐ ์ด๋ฐ ํ๊ฒฝ์ด๋ผ๋ฉด ๋ฌด์จ ์ฌ๋ฏธ๊ฐ ๋จ์์๋๊ฐ? ์ด๋ค ์์๊ฐ ์ฌ๋ฏธ๋ฅผ ๋ฐ๊ฐ์ํค๋๊ฑธ๊น? ์ด์์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๊ฒฝํ์ LeetCode ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค. LeetCode๋ ์ธํฐ๋ท ๋ฌธ์ ํ์ด ์ฌ์ดํธ์ด๋ฉฐ ํ๋์ ๋ฌธ์ ๊ฐ ์ฃผ์ด์ง ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ์ถํ๋ฉด ์ฆ๊ฐ์ ์ธ ๋จ์ ํ ์คํธ๋ฅผ ๊ฑฐ์น ๋ค ํฉ/๋ถ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ค. ์ด๋ ๊ฒ์์ ํ๋ ๊ฒ๊ณผ๋ ๊ฐ๋ค. ์ ๋นํ ์ด๋ ต๊ณ ์ฌ๋ฐ์ผ๋ฉฐ ๊ณผ์ ์์ฒด๊ฐ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ถ์ ์์ผ ๋์ ๊ฒ ๊ฐ๋ค. * ๊ด์ฌ์ฌ ๋ถ๋ฆฌ: ๊ฐ ๋ฌธ์ ๋ ์๋ก ๋ค๋ฅธ ๋ฌธ์ ์ ์ํฅ์ ์ฃผ์ง ์์์ ๊ฐ๋ฐ์๊ฐ ํ๋ฒ์ ํ๋์ฉ ์ง์ค ํ ์ ์๊ฒ ํด์ค๋ค. * ๋น ๋ฅด๊ณ ์ ํํ ํผ๋๋ฐฑ: ์ฝ๋ ์์ ํ ์ ์ถํ๋ฉด ๋จ์ ํ ์คํธ๋ฅผ ํตํด ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ป์ ์ ์๋ค. * ๋ฌด๋น์ฉ ์ํ์ฐฉ์ค: ๋ก์ง์ ํ์ ์ด ์๊ฑฐ๋ syntax ์๋ฌ๊ฐ ์์ด๋ ๋ง๋ํ ๋น์ฉ์ ๊ฐ๋นํ์ง ์์์ ์ฌ๋ฆฌ์ ์๋ฐ๊ฐ์ด ์ ๋ค. ํน์๋ โLeetCode ๋ฌธ์ ๋ ์ค์ ํ์ ๋ฌธ์ ๋ ๊ฐ๋? ๋ณต์ก๋์ ์ค์ผ์ผ์ด ์ฐจ์์ด ๋ค๋ฅธ๋ฐ?โ ๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ๋ง๋ ๋ง์ด๋ค. ์ค์ ์ฐ๋ฆฌ๊ฐ ์ ํ๋ ๋ฌธ์ ๋ LeetCode ๋ฌธ์ ์ฒ๋ผ ๋ต์ด ์ ํด์ ธ ์๋ ๊ฒ๋ ์๋๊ณ ์ฝ๊ฒ ๊ฒฐ๋ก ์ง์ ์ ์๋ ๊ฒ๋ ๋ง๋ค. ํ์ง๋ง ์ด๊ฑฐ๋ฅผ ํ๊ณ ์ผ์ ์ฐ๋ฆฌ๊ฐ ์ผํ๋ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์ ๋ฐฉ์นํด๋๋ ๊ฑด ๋ง์ด ์๋๋ค. ์ด๋ค ํ๊ฒฝ์ด๋ ๋ ๋์ ๊ณณ์ผ๋ก ๋ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ ๋ฐ์ ์ํค๊ธฐ ์ํด ๊ณ ๋ คํด๋ณผ ๋งํ ๊ฒ๋ค์: * ๋ชจ๋์ ์ฌ๊ณ : ๊ฐ ๋ชจ๋์ ์ ๋๋ก ์ค๊ณํด์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ง๊ต์ฑ (๋ ๋ฆฝ์ฑ)์ ๋์ฌ๋ผ * ๋์์ธ ์์น: ๋ง์ดํฌ๋ก ๋ ๋ฒจ์์ ๊ฒ์ฆ๋ ๋์์ธ ํจํด์ด๋ ์์น์ ์ ์ฉํด๋ผ. ex) SOLID ์์น * ํ ์คํธ ์๋ํ: ์ข์ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ํ์ ์ ์ ์ ํ mocking ๊ธฐ๋ฒ์ ํ์ฉํด์ ๋น์ฆ๋์ค ๋ก์ง์ ํต์ฌ์ ํ ์คํธํ๊ณ ์๋ํํด๋ผ * ํผ๋๋ฐฑ ์ฌ์ดํด์ ๋น ๋ฅด๊ฒ ํด๋ผ: ๋ ๋น ๋ฅธ ์ปดํ์ผ ํด์ ์ฌ์ฉํ๊ณ , ๋จ์ ํ ์คํธ๋ฅผ ์ต์ ํํด๋ผ. ํผ๋๋ฐฑ์ ์ป๊ธฐ๊น์ง์ ์๊ฐ์ ๋จ์ถํ ์ ์๋ ๊ฒ์ด ์๋ค๋ฉด ๋ญ๋ ์ง ๊ฐ๋ฆฌ์ง ๋ง๊ณ ๋ค ๋ฐ์ํด๋ผ * ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ: ํ์ ์ ๋ชจ๋๋ฆฌ์ํ ์๋น์ค๋ฅผ ๋ ์์ ์๋น์ค ์ฌ๋ฌ ๊ฐ๋ก ๋ถ๋ฆฌ ์์ผ ์ฑ ์์ ๋๋๊ณ ๋ณต์ก์ฑ์ ๋ถ์ฐ ์์ผ๋ผ ์ํ์ฐฉ์ค๋ฅผ ๋ ์ฝ๊ฒ ๊ฒฝํํ๊ณ , ๋ ๊ฐ๋ฐํ๊ธฐ ํธํ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ฉด LeetCode ๋ฌธ์ ๋ค์ ํธ๋ ๊ฒ์ฒ๋ผ ํ์ ์์๋ ์ฌ๋ฏธ๋ฅผ ์ป์ ์ ์๋ค. ์ด๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ฑด ๊ฒฝ๋ ฅ ์๋ ๊ฐ๋ฐ์๋ค์ด ํ์ ์ํด ๊ธฐ์ฌํ ์ ์๋ ์ต๊ณ ์ ๋ฐฉ๋ฒ ์ค ํ๋๋ค. 4) ์ฝ๋ ์๋ฒฝ์ฃผ์์ ๋น ์ง์ง ๋ง๋ผ ์ฝ๋ ํ๋ฆฌํฐ๋ฅผ ์ถ๊ตฌํ๋๊ฑด ์นญ์ฐฌ ๋ฐ์ ๋ง๋ ํ๋ค. ๋ค๋ง, ์๋ฒฝ์ฃผ์์ ๋น ์ง์ง ์๋๋ก ๊ฒฝ๊ณํด์ผ ํ๋ค. ์ฝ๋ฉ์ ์๋ฒฝํจ์ ๋์์์ด ์ถ๊ตฌํ๋ ์์ ์ํ์ด ์๋๋ค. ์๊ฐ๋ ๊ธ์ ์์ฑ๋๋ฅผ ๋์ด๊ธฐ ์ํด ์๋ ๋์ ๊ฑธ์์ ๋ถ๋ค๊ณ ์์ ์ ์์ง๋ง, ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ฐ ์๋ฒฝํจ์ ์ถ๊ตฌํ๋ค๋ฉด ๋ฌธ์ ๊ฐ ๋๋ค. ์๋ฒฝํ ์ฝ๋๋ ์๋ค. ๋๋ถ๋ถ ๋น์ฆ๋์ค ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๊ณ ๋ฐ์ ์ ์ฌ์ง๊ฐ ์๋ ์ฝ๋๋ผ๋ฉด ๋ฐฐํฌํด๋ ๋๋ค. ๊ฐ๋ โํด๋ฆฐ ์ฝ๋์ ์ถฉ์คํจโ ์ด๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ์ด๋ ฅ์์์ ๋ณผ ๋๋ฉด ์ผ๋ง๋ ์ฝ๋ ํ๋ฆฌํฐ์ ์ง์ฌ์ธ์ง ์๋ฟ์ผ๋ฉด์ ํํธ์ผ๋ก๋ ์๋ฒฝ์ฃผ์์๊ฐ ์๋๊ธธ ๋น๋ค. 5) ๊ธฐ์ ์ ์ค์ํ๋ค. ํ์ง๋ง ์ฌ๋์ด ๋ ์ค์ํ ๋๋ ์๋ค Single Responsibility Principle (SRP, ๋จ์ผ ์ฑ ์ ์์น)์ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ ๋ช ํ ์์น์ด๋ค. ์ด๋ ๊ณง โ๋ชจ๋ ์ํํธ์จ์ด ๋ชจ๋์ ๋จ ํ ๊ฐ์ง ์ด์ ๋ก๋ง ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.โ ๋ผ๋ ๋ฌธ์ฅ์ผ๋ก ํด์ํ ์ ์๋ค. SRP๋ ๊ฒฐ๊ตญ ๋ฌด์์ด โ๋ณ๊ฒฝโ์ ์ ๋ฐํ๋์ง ์ดํดํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค. ํ๋ก๊ทธ๋จ์ ์ค์ค๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ๋ณ๊ฒฝ์ ์๊ตฌํ๋ ๊ฑด ์ฌ๋์ด๋ค. ์๋ฅผ ๋ค์ด๋ณด์๋ฉด, ์๋ ๋ ๊ฐ์ง ํด๋์ค์์ SRP๋ฅผ ์๋ฐํ๋ ๊ฒ์ ๋ฌด์์ผ๊น? * Dictionary ๋ฐ์ดํฐ ํด๋์ค: ๋ฐ์ดํฐ ์ ์ฅ, ๋ฐ์ดํฐ ์กฐํ๋ฅผ ์ง์ํ๋ค * Employee ํด๋์ค: ๊ฐ์ธ์ ๋ณด ์์ , ์ฌ์ฉ์ ํ๋กํ ์นด๋ ๋ ๋๋ง์ ์ง์ํ๋ค ๋๋ถ๋ถ, ์ ์๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ์ง๋ง ํ์๋ SRP๋ฅผ ์๋ฐํ๋ค๊ณ ์๊ฐํ๋ค. ์ด๋ ๊ฑฐ์ ์ง๊ด์ ์ผ๋ก ์ ์ ์๋๋ฐ ๊ทธ ์ด์ ๋ฅผ ์ข ๋ ์๊ฐํด๋ณด๋ฉด ์ ๊ทธ๋ฐ์ง ์ ์ ์๋ค. ํ์์ ๊ฒฝ์ฐ ๋ณ๊ฒฝ์ ์ ๋ฐํ๋ ์ฃผ์ฒด๊ฐ ๋ค์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค๋ฉด, * ๋งค๋์ ๋ ํ๋กํ์ ์๋ โํธ๋ํฐโ ํญ๋ชฉ์ ์ซ์ ์ธ์ ํ์ฉ๋์ง ์์ ๋ฌธ์๊ฐ ๋ค์ด๊ฐ๋ฉด ์๋๋ค๊ณ ์๊ฐํด์ ๊ฐ๋จํ ๊ฒ์ฆ ๋ก์ง์ ์ถ๊ฐํ ๊ฒ์ ์๊ตฌํ๋ค * Employee (์ง์)๋ ํ๋กํ์์ ์ด๋ฆ ์์ญ์ด ๋๋ฌด ์์ ๊ฒ ๊ฐ์ ํฐํธ ํฌ๊ธฐ๋ฅผ ํค์์ค ๊ฒ์ ์๊ตฌํ๋ค โ๋ณ๊ฒฝ์ ์๊ตฌํ๋ ๊ฑด ์ฌ๋์ด๋ค. ์๋ก ๋ค๋ฅธ ์ด์ ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ ์ฝ๋๋ฅผ ์์ด์ ๋ค๋ฅธ ์ฌ๋๋ค์ ํท๊ฐ๋ฆฌ๊ฒ ํ์ง ๋ง์๋ผโ - ๋จ์ผ ์ฑ ์ ์์น SRP๋ฅผ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด ์ฌ๋๋ค์ ์ดํดํ๊ณ ์ด๋ค์ด ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ด๋ค ์ญํ ์ธ์ง ์๊ฐํด๋ด์ผ ํ๋ค. ๋ค๋ฅธ ์์๋ก๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๊ฐ ์๋ค. ์๋ค์ํผ MSA๋ ๊ทผ ๋ช ๋ ๋์ ํซํ ํฝ์ด์๋ค. ์ ์ํ๊ฒ๋ ๋ง์ ๊ธ๋ค์ด ๊ธฐ์ ์ ์ธ ๊ด์ ์์ MSA๋ฅผ ๋ถ์ํ๊ณ ๋ ผํ์ ๋ฟ, MSA์ ์ฌ๋์ ๊ด๊ณ์ ์ง์คํ๋ ๊ธ์ ๋ง์ด ๋ชป ๋ดค๋ค. MSA์ ๋ณธ์ง์ ๊ฐ๋นํ๊ธฐ ํ๋ ๊ฑฐ๋ํ ๋ชจ๋๋ฆฌ์ํ ์๋น์ค๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์๋น์ค๋ก ๋ถํ ํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฑฐ๋ํ ๋ชจ๋๋ฆฌ์ ์๋น์ค์ ๋ช ๋ฐฑ ๊ฐ์ ๊ฐ๋ฐํ์ด ๋ถ์ด์ ์ผํ๋ ๊ฒ๋ณด๋ค ์๋น์ค๋ฅผ ๋๋๊ณ ๋ด๋น ํ์ ๋๋ ์ ์ผ์ ํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค. MSA์ ๊ฐ์ ๊ธฐ์ ์ ์ธ ๊ฐ๋ ์ ๋ ผํ๋ฉด์ ์ฌ๋์ ๊ณ ๋ คํ์ง ์๋ ๊ฒ์ ์ด์น์ ๋ง์ง ์๋๋ค. ๊ธฐ์ ์ ์ค์ํ๋ค. ๊ธฐ์ ์ ๋ค๋ฃจ๋ ์ฌ๋์ผ๋ก์ ์ ๋ช ํ ์ํคํ ์ฒ๋ ์ ๊ธฐํ๊ณ ์ ์ฉํ ์ฝ๋๋ฅผ ๋ณด๋ฉด ํฅ๋ฏธ๊ฐ ๊ฐ๋ ๊ฒ์ ๋น์ฐ์ง์ฌ๋ค. ํ์ง๋ง โ์ฌ๋โ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋นผ๋์ง๋ ๋ง์. ๋๋ก๋ ๊ธฐ์ ์ค์ฌ ๊ด์ ์ ์ฌ๋ ์ค์ฌ์ผ๋ก ๋ฐ๊ฟ๋ณด๋ ๊ฒ๋ ์์ฒญ๋ ์ฐจ์ด๋ฅผ ๋ง๋ค ์ ์๋ค. --- (TBC) ์๊ธ: https://www.piglei.com/articles/en-programming-is-still-hard-after-14-years/