์ฐฝ๋ฐ์ฑ
๋จ์ํ ๊ฒฐํฉ์ด ๋ณต์กํ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ๊ฒ์
๋ด๋ฐ ํ๋๋ง์ผ๋ก ์๋ฏธ๊ฐ ์์๊น? ๋ด๋ฐ์ด ๋ชจ์ฌ ์ด๋ ํ ์ธ์์ ํ๊ธฐ ์ํด์๋ ์์ญ์ต๊ฐ์ ๋ด๋ จ์ด ์ํธ์์ฉํด์ผ ํ๋ค. ์ฆ, ๋ฏธ์์ ์ธ ๋ถ๋ถ์ ๊ฐ๊ฐ์ ํน์ฑ๋ง์ผ๋ก๋ ์ค๋ช ํ ์ ์๋ ์ ์ฒด๋ก์ ๋ํ๋๋ ๋ณต์กํ ํ์์ ๋งํ๋ค.
์ฐฝ๋ฐ์ ์ค๊ณ๋ก ๊น๋ํ ์ฝ๋๋ฅผ ๊ตฌํํ์
์ฐฝ๋ฐ์ฑ์ ์ด๋ฌํ ๋ป์์ ๋ฏธ๋ฃจ์ด ๋ณผ ๋, ์ ์๊ฐ ๋งํ๊ณ ์ ํ๋ ๊ฒ์ ์ด๋ค ์ข์ ๊ท์น๊ณผ ์์น์ ๋ฐ๋ผ ์ค๊ณ๋ฅผ ํ์ ๋, ๊ทธ๊ฒ๋ค์ด ๋ชจ์ฌ ์์ฃผ ์ข์ ๊ฑฐ์์ ์ค๊ณ๊ฐ ๋ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ฐ ๊ท์น์ด ์์๊น? ์ฐ๋ฆฌ๋ค ๋๋ค์๋ ์ผํธ ๋ฒก์ด ์ ์ํ ๋จ์ํ ์ค๊ณ ๊ท์น ๋ค๊ฐ์ง๊ฐ ์ค๊ณ ํ์ง์ ๋์ฌ์ค๋ค๊ณ ๋ฏฟ๋๋ค.
- ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๋ค.
- ์ค๋ณต์ ์์ค๋ค.
- ํ๋ก๊ทธ๋๋จธ ์๋๋ฅผ ํํํ๋ค.
- ํด๋์ค์ ๋ฉ์๋ ์๋ฅผ ์ต์๋ก ์ค์ธ๋ค.
์ ๋ชฉ๋ก์ ์ค์๋ ์์ด๋ค.
๋จ์ํ ์ค๊ณ ๊ท์น 1: ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๋ผ
๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์๋ ๋๋ก ๋์๊ฐ๋ ์์คํ ์ ๋ง๋๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ํ ๊ฒ์ฆ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด, ์์คํ ์ค๊ณ ๋ฌธ์๋ ๊ทธ๋งํผ์ ๊ฐ์น๋ฅผ ์ธ์ ๋ฐ๊ธฐ ์ด๋ ต๋ค. ํ ์คํธ๋ฅผ ์ฒ ์ ํ ๊ฑฐ์ณ ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํญ์ ํต๊ณผํ๋ ์์คํ ์ด โํ ์คํธ๊ฐ ๊ฐ๋ฅํ ์์คํ โ์ด๋ค. ๊ฒ์ฆ์ด ๋ถ๊ฐํ ์์คํ ์ ์ถ์ํ๋ฉด ์๋๋ค.
ํ ์คํธ๊ฐ ๊ฐ๋ฅํ ์์คํ ์ ๋ง๋ค๋ ค๊ณ ์ ์ฐ๋ฉด ์ค๊ณ ํ์ง์ด ๋์์ง๋ค.
- ํฌ๊ธฐ๊ฐ ์๊ณ ๋ชฉ์ ํ๋๋ง ์ํํ๋ ํด๋์ค๊ฐ ๋์จ๋ค. SRP ์ค์ ํด๋์ค๋ ํ ์คํธ๊ฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ ์คํธ ์ผ์ด์ค๊ฐ ๋ง์ ์๋ก ์ฝ๋๋ฅผ ์ฝ๊ฒ ์์ฑํ๋๋ก ๋๋๋ค.
- DI, Interface, ์ถ์ํ ๋ฑ์ ํตํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ค. ๊ฒฐํฉ๋๊ฐ ๋์ผ๋ฉด ํ ์คํธ๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ด๋ค.
ํ ์คํธ๊ฐ ๊ฐ๋ฅํ ์์คํ ์ ๋ง๋๋ ๊ฒ์ด ๊ณง, ๋์ ์์คํ ํ์ง์ ๋ง๋ ๋ค.
๋จ์ํ ์ค๊ณ ๊ท์น 2~4: ๋ฆฌํฉํฐ๋ง
ํ ์คํธ ์ผ์ด์ค๊ฐ ๋ชจ๋ ์์ฑ๋์๋ค๋ฉด ์ด์ ์ฝ๋์ ํด๋์ค๋ฅผ ์ ๋ฆฌํด๋ ์ข๋ค. ์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ฉด์ ์์คํ ์ด ๊นจ์ง ๊ฑฑ์ ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋จ๊ณ์์๋ ๋ฌด์์ด๋ ์ ์ฉํด๋ ๋๋ค.
์ค๋ณต์ ์์ ๋ผ
isEmpty()
๋ฉ์๋๋ฅผ ๋ง๋ค๋ ค๊ณ ํ ๋, ์ด์ ์ ๋ง๋ size()
ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ณต์ ์ค ์ผ ์ ์๋ค.
์ค๋ณต์ด ๋ฐ์ํ๋ ๋ถ๋ถ์ ์๋์ฒ๋ผ ๊ณ ์ณ๋ณด์.
์ด๋ ๊ฒ ๋๋ ๋๊ณ ๋ณด๋, ํด๋์ค๊ฐ SRP๋ฅผ ์๋ฐํ๋ค. ์ด๋ฏธ์ง ๋ณ๊ฒฝ ์์๋ ํด๋น ํด๋์ค๋ฅผ ๊ฑด๋ค์ฌ์ผ ํ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ค๋ฅธ ํด๋์ค๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด ๋ซ๊ฒ ๋ค๋ ์๊ฐ๋ ๋ ๋ค. ์ด๋ฐ ์๊ท๋ชจ ์ฌ์ฌ์ฉ ๋ถํฐ ์ ๋๋ก ์ตํ์ผ ๋๊ท๋ชจ ์ฌ์ฌ์ฉ์ ๋ฐฐ์ธ ์ ์๋ค.
๋ค์์ผ๋ก๋ TEMPLATE METHOD์ด๋ค. TEMPLATE METHOD ํจํด์ ๊ณ ์ฐจ์ ์ค๋ณต์ ์ ๊ฑฐํ ๋ชฉ์ ์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ด๋ค. ์๋ฅผ ์ดํด๋ณด์.
์ต์ ๋ฒ์ ์ผ์๋ฅผ ๊ณ์ฐํ๋ ์ฝ๋๋ง ์ ์ธํ๋ฉด ๋ ๋ฉ์๋๋ ๊ฑฐ์ ๋์ผํ๋ค. ์ต์ ๋ฒ์ ์ผ์๋ฅผ ๊ณ์ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ์ ํ์ ๋ฐ๋ผ ์ด์ง ๋ณํ๋ค. ์ฌ๊ธฐ์ TEMPLATE METHOD ํจํด์ ์ ์ฉํด ๋์ ๋ค์ด์ค๋ ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
ํ์ ํด๋์ค๋ ์ค๋ณต๋์ง ์๋ ์ ๋ณด๋ง ์ ๊ณตํด accrueVacation
์๊ณ ๋ฆฌ์ฆ์์ ๋น ์ง โ๊ตฌ๋ฉโ์ ๋ฉ์ด๋ค.
ํํํ๋ผ
- ์ข์ ์ด๋ฆ์ ์ ํํ๋ค.
- ํจ์์ ํด๋์ค ํฌ๊ธฐ๋ฅผ ๊ฐ๋ฅํ ์ค์ธ๋ค.
- ํ์ค ๋ช ์นญ์ ์ฌ์ฉํ๋ค. ๋์์ธ ํจํด์ ์์ฌ์ํต๊ณผ ํํ๋ ฅ ๊ฐํ๊ฐ ์ฃผ์ ๋ชฉ์ ์ด๋ค. ์ ์ฌํ ์ด๋ฆ์ ์ฌ์ฉํด๋ผ.
- ๋จ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๊ผผ๊ผผํ ์์ฑํ๋ค.
์์ ๋ฐฉ๋ฒ๋ก ๋ณด๋ค ๋ ์ค์ํ ๊ฒ์ ๋ ธ๋ ฅ์ด๋ค. ๋ง์ ๊ณ ๋ฏผ์ํ๊ณ ๋ง๋ค์ด์ง ์ํ์ ์กฐ๊ธ ๋ ์๋ํ์. ์ฃผ์๋ ๋๋จํ ์ฌ๋ฅ์ด๋ค.
ํด๋์ค์ ๋ฉ์๋ ์๋ฅผ ์ต์๋ก ์ค์ฌ๋ผ
์ค๋ณต์ ์ ๊ฑฐํ๊ณ , ์๋๋ฅผ ํํํ๊ณ , SRP๋ฅผ ์ค์ํ๋ค๋ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ๋ ๊ทน๋จ์ผ๋ก ์น๋ฌ์ผ๋ฉด ๋๋ณด๋ค ์ค์ด ๋ง์์ง๋ค. ํด๋์ค์ ๋ฉ์๋ ํฌ๊ธฐ๋ฅผ ์ค์ด์๊ณ ์กฐ๊ทธ๋ง ํด๋์ค์ ๋ฉ์๋๋ฅผ ์์์ด ๋ง๋๋ ์ฌ๋ก๋ ์์ง ์๋ค. ๊ทธ๋์ ์ด ๊ท์น์ ํจ์์ ํด๋์ค ์๋ฅผ ๊ฐ๋ฅํ ํ ์ค์ด๋ผ๊ณ ์ ์ํ๋ค.
๋๋ก๋ ๋ฌด์๋ฏธํ๊ณ ๋ ๋จ์ ์ธ ์ ์ฑ ํ์ ํด๋์ค ์์ ๋ฉ์๋ ์๊ฐ ๋์ด๋๊ธฐ๋ ํ๋ค. ํด๋์ค๋ง๋ค ๋ฌด์กฐ๊ฑด ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๋ผ๊ณ ์๊ตฌํ๋ ๊ตฌํ ํ์ค์ด ์ข์ ์๋ค. ์๋ฃ ํด๋์ค์ ๋์ ํด๋์ค๋ ๋ฌด์กฐ๊ฑด ๋ถ๋ฆฌํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ๋ ๊ฐ๋ฐ์๋ ์ข์ ์๋ค. ๊ฐ๋ฅํ ๋ ๋จ์ ์ธ ๊ฒฌํด๋ ๋ฉ๋ฆฌํ๊ณ ์ค์ฉ์ ์ธ ๋ฐฉ์์ ํํด์ผ ํ๋ค.
๋ชฉํ๋ ํจ์์ ํด๋์ค ํฌ๊ธฐ๋ฅผ ์๊ฒ ์ ์งํ๋ฉด์ ๋์์ ์์คํ ํฌ๊ธฐ๋ ์๊ฒ ์ ์งํ๋ ๋ฐ ์๋ค. ํ์ง๋ง ์ด ๊ท์น์ ๊ฐ๋จํ ์ค๊ณ ๊ท์น ๋ค ๊ฐ ์ค ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ๋ค. ๋ค์ ๋งํด, ํด๋์ค์ ํจ์ ์๋ฅผ ์ค์ด๋ ์์ ๋ ์ค์ํ์ง๋ง, ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ง๋ค๊ณ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์๋๋ฅผ ํํํ๋ ์์ ์ด ๋ ์ค์ํ๋ค๋ ๋ป์ด๋ค.
๊ฒฐ๋ก
๊ฒฝํ์ ๋์ ํ ๋จ์ํ ๊ฐ๋ฐ ๊ธฐ๋ฒ์ด ์์๊น? ๋น์ฐํ ์๋ค. ํ์ง๋ง ์ด ์ฅ, ์๋ ์ด ์ฑ ์์ ์๊ฐํ๋ ๊ธฐ๋ฒ์ ์ ์๋ค์ด ์์ญ ๋ ๋์ ์์ ๊ฒฝํ์ ์ ์๋ค. ๋จ์ํ ์ค๊ณ ๊ท์น์ ๋ฐ๋ฅธ๋ค๋ฉด (์ค๋ ๊ฒฝํ ํ์์ผ ์ตํ) ์ฐ์ํ ๊ธฐ๋ฒ๊ณผ ์์น์ ๋จ๋ฒ์ ํ์ฉํ ์ ์๋ค.