[์ฐ์ํํ ํฌ์ฝ์ค 6๊ธฐ] ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ ์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ํ๊ธฐ
by rlaehddnd0422๐ก 2์ฃผ์ฐจ๋ ์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ์ ๋๋ค.
์๋์ฐจ ๊ฒฝ์ฃผ์ ์ฐธ๊ฐํ ์๋์ฐจ๋ค์ ์ด๋ฆ๊ณผ ์๋ํ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ์๋ ํ์ ๋์ 0-9์ฌ์ด์ ์ซ์ ์ค ๋๋คํ๊ฒ ์ซ์๋ฅผ ํ๋ ๋ฝ์ 4์ด์์ด๋ฉด ํ ์นธ ์์ผ๋ก ์ ์ง์์ผ ์๋ํ์๊น์ง ๋๋ฌํ๋ฉด ๊ฐ์ฅ ๋ง์ด ์ ์งํ ์๋์ฐจ๋ค์ ์ด๋ฆ์ ์ถ๋ ฅํ๋ ๋ฏธ์ ์ ๋๋ค.
์ด๋ฒ ์ฃผ์ฐจ ๋ฏธ์ ์๋ ์ ๋ฒ 1์ฃผ์ฐจ ๊ณผ์ ์์ ํผ๋๋ฐฑ ๋ฐ์ ๋ด์ฉ๋ค์ ์ข ํฉํด ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๋ฏธ์ ์ ์งํํ์ต๋๋ค.
๐ก ์ฒดํฌ ๋ฆฌ์คํธ
- [ ] ์๊ตฌ์ฌํญ์ ์ ํํ ์ค์ํ๋๊ฐ?
- [ ] ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์๋ฏธ์๊ฒ ์์ฑํ๋๊ฐ?
- [ ] git์ ํตํด ๊ด๋ฆฌํ ์์์ ๋ํด์ ๊ณ ๋ คํ๋๊ฐ?
- .class ํ์ผ์ java ์ฝ๋๊ฐ ์์ผ๋ฉด ์์ฑํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ตณ์ด git์ ํตํด ๊ด๋ฆฌํ์ง ์์๋ ๋๋ค.
- [ ] Pull Request๋ฅผ ๋ณด๋ด๊ธฐ ์ ๋ธ๋์น๋ฅผ ํ์ธํ๋๊ฐ?
- [ ] PR์ ํ ๋ฒ ์์ฑํ๋ค๋ฉด ๋ซ์ง ๋ง๊ณ ์ถ๊ฐ ์ปค๋ฐ์ ํ๋ค.
- [ ] ๋ค์ด๋ฐ์ ์ ๊ฒฝ์ ์ผ๋๊ฐ?
- [ ] ์ถ์ฝ์ผ๋ก ์ธํด ์๋ฏธ๊ฐ ํด์๋์ง ์์๋๊ฐ?
- [ ] ๊ณต๋ฐฑ ์ฝ๋ฉ ์ปจ๋ฒค์
์ ์ ์ฉํ๋๊ฐ?
- if, for, while๋ฌธ ์ฌ์ด์ ๊ณต๋ฐฑ๋ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ด๋ค.
- [ ] ๋ฌธ๋งฅ์ ๋ถ๋ฆฌํ๋ ๋ถ๋ถ์ ๊ณต๋ฐฑ์ ์ ์ ํ ์ฌ์ฉํ๋๊ฐ?
- [ ] ์๋ฏธ ์๋ ์ฃผ์์ ๋ฌ์ง ์์๋๊ฐ?
- [ ] Java์์ ์ ๊ณตํ๋ API๋ฅผ ์ ๊ทน ํ์ฉํ๋๊ฐ?
- [ ] Collection์ ์ ์ ํ๊ฒ ํ์ฉํ๋๊ฐ? ๋ฐฐ์ด์ ์ด ๋ถ๋ถ์ ์๋์ง?
- [ ] README.md๋ฅผ ์์ธํ ์์ฑํ๋๊ฐ?
- [ ] ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์ฌ๊ฒํ ํ๋๊ฐ?
- ๊ธฐ๋ฅ ๋ชฉ๋ก์ ํด๋์ค ๊ตฌํ, ๋ฉ์๋ ์๊ทธ๋์ฒ์ ๋ฐํ๊ฐ๊ณผ ๊ฐ์ด ์์ธํ๊ฒ ์ ์ง ์๋๋ค. ์ธ์ ๋ ์ง ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- [ ] ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์์ ์
๋ฐ์ดํธ ํ๋๊ฐ?
- ์์ํ ๋ ๋ชจ๋ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์๋ฒฝํ๊ฒ ์ ๋ฆฌํ๋ค๋ ๋ถ๋ด ๋ณด๋ค๋ ๋ฌธ์๋ฅผ ๊ณ์ ์ ๋ฐ์ดํธํ๋ค.
- [ ] ๊ฐ์ ํ๋ ์ฝ๋ฉํ์ง๋ ์์๋๊ฐ?
- [ ] ํด๋์ค๋ ์์, ๋ฉค๋ฒ๋ณ์, ์์ฑ์, ๋ฉ์๋ ์์ผ๋ก ์์ฑํ๋๊ฐ?
- [ ] ๋ณ์ ์ด๋ฆ์ ์๋ฃํ์ด ์์ง๋ ์์๊ฐ?
- ๋ณ์ ์ด๋ฆ์ ์๋ฃํ์ ์ฌ์ฉํ์ง ์๋๋ค.
- [ ] ํ ํจ์๊ฐ ํ ๊ฐ์ง ๊ธฐ๋ฅ๋ง ๋ด๋นํ๊ฒ ํ๋๊ฐ?
- [ ] main( ) ํจ์๋ ๊ธธ๊ฒ ์์ฑํ์ง ์๋๋ค.
- [ ] ๋ฐ์ํ ์ ์๋ ์์ธ ์ํฉ์ ๋ํด ๊ณ ๋ฏผํ๋๊ฐ?
- [ ] ๋น์ฆ๋์ค ๋ก์ง๊ณผ UI ๋ก์ง์ ๋ถ๋ฆฌํ๋๊ฐ?
- [ ] ์ฐ๊ด์ฑ์ด ์๋ ์์๋ static final ๋์ enum์ ํ์ฉํ๋๊ฐ?
- ๊ทธ๋ ์ง ์๋ค๋ฉด enum์ ํ์ฉํ์.
- [ ] final ํค์๋๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋ณ๊ฒฝ์ ๋ง์๋๊ฐ?
- [ ] ๊ฐ์ฒด์ ์ํ ์ ๊ทผ์ ์ ํํ๋๊ฐ?
- ์ธ์คํด์ค ๋ณ์์ ์ ๊ทผ ์ ์ด์๋ private
- [ ] ๊ฐ์ฒด๋ ๊ฐ์ฒด์ค๋ฝ๊ฒ ์ฌ์ฉํ๋๊ฐ?
- [ ] ํ๋(์ธ์คํด์ค ๋ณ์)์ ์๋ฅผ ์ค์ด๊ธฐ ์ํด ๋
ธ๋ ฅํ๋๊ฐ?
- ํ๋์ ์๊ฐ ๋ง์ ๊ฒ์ ๊ฐ์ฒด์ ๋ณต์ก๋๋ฅผ ๋์ด๊ณ , ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ๋์ผ ์ ์๋ค.
- [ ] ์ฑ๊ณต ์ผ์ด์ค ๋ฟ๋ง ์๋๋ผ ์์ธ ์ผ์ด์ค๋ ํ ์คํธํ๋๊ฐ?
๐ก1์ฃผ์ฐจ ํผ๋๋ฐฑ
ํผ๋๋ฐฑ ๋ฐ์ ๋ด์ฉ ์ค ์ค์ํ๋ ํผ๋๋ฐฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. View์ Model์ ์๋ก๊ฐ ๋ฌด์์ ํ๋ ์ง ๋ชจ๋ฅด๋๋ก ๋ ๋ฆฝ์ ์ด์ด์ผ ํ๋ค.
์ง๋ ๋ฏธ์ ์ ์ค์ํ ๋ถ๋ถ์ด ์์ต๋๋ค. ๋ฐ๋ก ์ถ๋ ฅ์ ๋ด๋นํ๋ OutputView์์ ๋๋ฉ์ธ์ ๊ทธ๋๋ก ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ ์ถ๋ ฅํ๋ ๊ฒ์ธ๋ฐ์, ์ธ์ธํ ๋ถ๋ถ๊น์ง ์ ๊ฒฝ์ผ๋ค๊ณ ์๊ฐํ๋๋ฐ View์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ณธ๋ก ๋ถํฐ ๋งํ์๋ฉด View์ Model์ ์๋ก๊ฐ ์ด๋ค ์ญํ ์ ํ๋ ์ง ์ ์ ์๋๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ง์ฝ ๋ทฐ๋ฅผ ํตํด ๋ชจ๋ธ์ด ๊ดํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
์ปจํธ๋กค๋ฌ์์ Model์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ์ฌ View์๊ฒ ์ ๋ฌํด์ฃผ๋ ๋ฐฉ์์ ์ฑํํด์ผ ํฉ๋๋ค.
์ฆ, ์ปจํธ๋กค๋ฌ์์๋ Model์ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ๋๊ฒจ์ฃผ๋ ๊ฒ์ด ์๋, Model์ ์ ๋ณด๋ฅผ ํ์ด์ View์๊ฒ ์ ๋ฌํด์ฃผ์ด์ผ ํฉ๋๋ค.
๐ฉ ์ ๊ทธ๋ ๊ฒ ํด์ผํ ๊น?
View์์ Model์ ์ง์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํฌ๊ฒ ๋ ๊ฐ์ง ์ํ์์๊ฐ ์์ต๋๋ค.
1. Model์ ๋ณ์ง ์ฐ๋ ค๊ฐ ์๋ค.
View๋ ์ถ๋ ฅ์๋ง ์ง์คํด์ผ ํฉ๋๋ค. ๋ง์ฝ View์์ ๋ชจ๋ธ์ ์ง์ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ๋ชจ๋ธ์ ์ง์ ์ ๊ทผํ์ฌ ๊ฐ์ ๋ณ๋ํ๋ค๊ฑฐ๋ ์ญ์ ํ๋ค๊ฑฐ๋ ํ๋ ๋ฑ ์ํ์์ธ์ผ๋ก ์์ฉํ ์ ์์ต๋๋ค.
2. ๊ฒฐํฉ๋๊ฐ ์ฆ๊ฐํ๋ค.
View๊ฐ Model์ ์ง์ ์์กดํ๋ฉด ๋ ๊ตฌ์ฑ ์์ ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ์ฆ๊ฐํ๊ณ , ์ด๋ ์ฝ๋ ์ ์ง ๋ณด์ ๋ฐ ํ์ฅ์ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. Model์ ๋ณ๊ฒฝ์ด View์ ์ํฅ์ ๋ฏธ์น๋ฉด View์ ๋ณ๊ฒฝ๋ ํ์ํ๊ฒ ๋๊ณ , ์ด๊ฒ์ ์ ์ง ๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ์กด์ฌํ๋ ๊ฒ์ด ์ปจํธ๋กค๋ฌ์ด๊ธฐ์, ์ด ์ปจํธ๋กค๋ฌ์ ์ญํ ์ ์ ํ์ฉํด์ผ ํฉ๋๋ค.
๐ฉ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํ์ฑํ ๊น?
์ด ์ ์งํํ๋ ํ๋ก์ ํธ์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด๋ณด๊ฒ ์ต๋๋ค. ํด๋น ๋ฉ์๋๋ ํ์์ ํ๋กํ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
๋ฉ์๋๋ฅผ ์ดํด๋ณด๋ฉด Controller์์ memberService์์ ์ํํ ๋ฉ์๋๋ฅผ View๋ก ๋ฆฌํดํ๋๋ฐ์. ์ด ๋ MemberProfileDto ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ View๋ก ๋ฆฌํดํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ด์ฒ๋ผ Data-Tranfer-Object(DTO)๋ฅผ ์ฌ์ฉํด์ ๊ณ์ธต๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
์ฆ, View์์๋ Member ๋ชจ๋ธ์ ์ง์ ์์กดํ์ฌ ์ถ๋ ฅํ๋ ๊ฒ์ด ์๋ DTO๋ผ๋ ๋ฐ์ดํฐ ์ ๋ฌ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ๊ฐ์ ์ ์ผ๋ก Member์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ ๋๋ค.
DTO๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ธ์๋ Controller๋ฅผ ํตํด Model์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ View์์ ์ถ๋ ฅํ ๋ ์ถ๋ ฅํ ์ ๋ณด(ํ๋)๊ฐ ๋ง์ง ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ์ฑํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
// Controller
String name = item.getName();
String price = item.getPrice();
outputView.printResult(name, price);
// OutputView
public void printResult(String name, String price) {
System.out.println(name + ":" + price);
}
OutputView ๊ณ์ธต์์๋ Model์ ๋ํ ์ ๋ณด๋ ์๋ฌด๊ฒ๋ ๋ชจ๋ฅธ ์ฑ Controller์์ ๋ฐ์์จ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ๋ฐ ์ง์คํ ์ ์๊ฒ ์ฃ .
<์์ฝ>
- View๋ ์ถ๋ ฅ์๋ง ์ง์คํ๋ค.
- Model์ ์์ ์ด ํ ์ ์๋ ์ญํ ์๋ง ์ง์คํ๋ค.
- Controller๋ (DTO๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ Model์ ํ์ฑํ์ฌ) Model๊ณผ View๋ฅผ ๊ฐ์ ์ ์ผ๋ก ์ด์ด์ฃผ๋ ๋ฐ ์ง์คํ๋ค.
2. InputView์ OutputView์ ๋ํด
OutputView๋ ์ด๋ฆ๋ง ๋ด๋ ์ ์ ์๋ฏ์ด '์ถ๋ ฅ'ํ๋ ๊ณ์ธต์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด InputView๋ผ๊ณ ํ๋ค๋ฉด ์ด๋ค ๊ณ์ธต์ผ๊น์? ๋ฐ๋ก '์ ๋ ฅ'ํ๋ ๊ณ์ธต์ ๋๋ค.
์ ๋ 1์ฃผ์ฐจ ๋ฏธ์ ์์๋ ์ด๋ ๊ฒ ์๊ฐํ์ต๋๋ค.
- Player๊ฐ ์ ๋ ฅํ๋ ๊ฐ์ Player ๊ฐ์ฒด ์์์ ์ํํด์ผ ํ๋ค.
- View๋ '์ ๋ ฅ'์ ์ํํ์ง ์๊ณ '์ถ๋ ฅ'๋ง ์ํํด์ผ ํ๋ค.
์ด ๋ง์ด ํ๋ ธ๋ค๋ ๊ฒ์ ๋ฏธ์ ์ด ๋๋๊ณ ์ผ ๋ฐ๋ก ์์์ฑ ์ ์์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ํตํด ์น์ ์ด์ฉํ๊ณ ์์ต๋๋ค. ๊ฐ๋จํ ์์๋ฅผ ํ๋ ๋ค์ด๋ณด์๋ฉด ์๊ฐ๋๋ ๊ฒ์ด ๋ก๊ทธ์ธ์ ๋๋ค. ๋ก๊ทธ์ธ ์ฐฝ์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ Input์ ๋ฐ๊ณ , ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ทธ์ ๋ฐ๋ฅธ OutputView๋ฅผ ๋ฐ์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ๋ ฅ๋ 'View'๋ผ๊ณ ๋ณผ ์ ์๊ฒ ์ฃ . View๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ๋ง ํ๋ ๊ฒ์ด ์๋ ๊ฐ์ ์ ๋ ฅํด ์ฃผ๊ธฐ๋ ํ๋๊น์.
์ด ์ ์ ํฌ๊ฒ ๊ฐ๊ณผํ๊ณ ์์์ต๋๋ค. ๊ฐ์ฒด์ ๋ํ ๊ฐ์ ๊ฐ์ฒด ์์์ ๊ด๋ฆฌํด์ผ ํ๋ค๋ ๋ง์ด, ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด ์๋๋ค๋ ๋ง์ ์๋๋๊น์.
์ด๋ ๊ฒ ์ ๋ฒ ์ฃผ์ฐจ์์๋ View์ ๊ดํ ์๋ชป๋ ์ดํด๋ก ๋์น๋ ๋ถ๋ถ๋ค์ด ์์๋๋ฐ, ์ด๋ฒ ์ฃผ์ฐจ์์๋ ์ด ์ ๋ค์ ์ ์๊ฐํ๋ฉฐ ๋ฏธ์ ์ ์งํํ์ต๋๋ค!
๐ก์ด๋ฒ ๋ฏธ์ ์์ ๋ฐฐ์ด ์
๐ฉValue Object(=VO)์ record
"์์๊ฐ์ ํฌ์ฅํ์." ๊ฐ์ฒด์งํฅ ์ํ์ฒด์กฐ 3๋ฒ ๊ท์น์ ๋๋ค. ์ด ๊ท์น์ ์๋ชป ์ดํดํ๊ณ ์์์ต๋๋ค.
'์์๊ฐ, primitive'๋ผ๊ณ ํ๋ค๋ฉด int, long, double๊ณผ ๊ฐ์ ํ์ ๋ง ์์ ํ์ ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ, ๊ท์น์์ ๋งํ ๊ฒ์ ๊ทธ๊ฒ ์๋์์ต๋๋ค. ๊ท์น์์ ๋งํ๋ ์์๊ฐ์ Integer, Long, String์ ํฌํจํ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์ ๋๋ค.
์ฆ, ๋๋ฉ์ธ์์ Integer, String๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ ํ์ ์ ํ๋๋ฅผ ๊ฐ์ง๋ค๋ฉด ๊ทธ ํ๋๋ฅผ ๋ํํ์ฌ ์๋ก์ด ํ์ ์ผ๋ก ์ ์ํด์ ์ฌ์ฉํ์ฌ, ๊ฐ๋ ์ฑ๊ณผ ๋ช ์์ฑ์ ๋์ด๋ผ๋ ๊ฒ์ด์์ต๋๋ค.
์ฝ๋๋ก ์์๋ฅผ ํ๋ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
์์ ์
public class GameAnswer {
private List<Integer> answer;
...
}
์์ ํ
public class GameAnswer {
private List<AnswerNumber> answerNumberList;
}
public class AnswerNumber {
private Integer number;
public Answer(Integer number){
...
}
public Integer getNumber(){
return number;
}
}
ํ์คํ ์์ ํ ์ฝ๋๊ฐ Integer๊ฐ ๋ฌด์์ ๋ปํ๋์ง ๋ฐ๋ก ์บ์นํ ์ ์์ด์ ๊ฐ๋ ์ฑ๋ฉด์์ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฟ๋ง ์๋๋ผ ๊ฐ์ ๋ํ ๊ฒ์ฆ์ GameAnswer์์ ํ์ง ์๊ณ AnswerNumber ํด๋์ค ๋ด์์ number์ ๋ํด ์์ฒด์ ์ผ๋ก ๊ฒ์ฆํ ์ ์์ด , ์ญํ ๊ณผ ์ฑ ์๋ถ๋ฆฌ ์ธก๋ฉด์์๋ ๋ ์ด์ ์ ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฒ ๋ฏธ์ ์์๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ๋ชจ๋ ๊ฐ๋ค๊ณผ ๋ชจ๋ธ์์ ์ธ์คํด์ค ํ๋๋ก ๊ฐ์ง๋ ๋ชจ๋ ๋ณ์๋ค์ ์๋ก์ด ํด๋์ค๋ก ๋ํํ์ฌ ์งํํ์ฌ ๊ฐ๋ ์ฑ๊ณผ ์ญํ ๋ถ๋ฆฌ์ ์ด์ ์ ๊ฐ์ ธ์ค๋๋ก ๋ ธ๋ ฅํ์ต๋๋ค. ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์์์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ์ค๊ฐ์ ๋ณํ์ง ์๋ '๋ถ๋ณ ๊ฐ์ฒด'์ธ๋ฐ์. ์ด ์ ์ ๊ณ ๋ คํด์ final ํค์๋๋ฅผ ์ฌ์ฉํ๋ ์ค Java 17์ ์๋ก์ด ๋ฌธ๋ฒ์ ์๊ฒ ๋์์ต๋๋ค. ๋ฐ๋ก 'record' ์ ๋๋ค.
์๋ ํ์์ ๋ํ ๋ํ ํด๋์ค์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์๋ ํ์๋ ์ค๊ฐ์ ๋ณํ๋ฉด ์๋๋ ๊ฐ์ด๋ฏ๋ก ํ๋์ final ํค์๋๋ฅผ ๋ถ์ฌ์ฃผ์๋๋ฐ์. final ํค์๋๋ฅผ ๋ถ์ด๋ ํด๋์ค ์ด๋ฆ์ ๋ ธ๋ ๋ฐ์ค์ด ๋จ๊ธธ๋ ์ค๋ช ์ ๋ณด์ํ๋ 'Convert to a record'๋ผ๊ณ ๋จ๋ ๊ฑธ ๋ณผ ์ ์์์ต๋๋ค. ๋ญ์ง ๊ถ๊ธํด์ ํด๋ฆญ์ ํด๋ณด๋ IDE๊ฐ ์ ์ํด์ฃผ๋ ๋ฌธ๋ฒ์ผ๋ก ๋ฐ๋๋ ๊ฑธ ๋ณผ ์ ์์์ต๋๋ค.
๋ ์ฝ๋?? ์ฒ์ ๋ณด๋ ํค์๋๋ผ ๊ฒ์์ ํด๋ณด๋ ์๋ฐ 14์ ๋์ ๋ ํด๋์ค๋ฅผ ์ ์ํ๊ธฐ ์ํ ์๋ก์ด ํํ์ ๋ฐ์ดํฐ ํ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์ฅํ๊ณ ์ ๊ทผํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ค๊ณ๋ ๋ฌธ๋ฒ์ธ๋ฐ, ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ Value Object, VO ๋ผ๊ณ ํ๋ฉฐ record๋ฅผ ์ ์ฉํ ๊ฒฝ์ฐ, ๋ถ๋ณ์ฑ๊ณผ ์๋ ์์ฑ์ ๋ฐ ์ ๊ทผ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค๊ณ ํฉ๋๋ค. ๋ฟ๋ง ์๋๋ผ ํ๋ ๊ฐ์ด ๊ฐ์ผ๋ฉด ๋ ๊ฐ์ฒด๋ฅผ ๋์ผํ๋ค๊ณ ํ๋จํ๋ equals(), hashCode(), toString() ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์์ฑํ์ฌ ์ ์ฉ์์ผ์ค๋ค๊ณ ํ๋๋ฐ์. ๋ฌด์๋ณด๋ค๋ ๊ฐ๊ฒฐํ ์ ์์ ํจ๊ป ๊ฐ์ ๋ถ๋ณ์ฑ๊น์ง ๋ณด์ฅํด์ฃผ๋ ๊ทธ์ผ๋ง๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๊ธฐ์ ์์ฃผ ์ข์ ๊ธฐ๋ฅ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ฒ๋ผ ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์์์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ๋ํ ํ๋๋ฅผ ๋ํํ๋ ์ค ์ด ๊ฐ๋ค์ ์ค๊ฐ์ ๋ฐ๋์ง ์๋๋ค๋ ์ ์ ๊ณ ๋ คํ์ฌ ํ๋์ final ํค์๋๋ฅผ ๋ถ์ฌ ์ฃผ์์ต๋๋ค. final ํค์๋๋ฅผ ๋ถ์ด๊ณ getter๋ฅผ ์์ฑํ๋ ํด๋์ค ์ด๋ฆ์ ๋ ธ๋ ๋ฐ์ค๊ณผ ํจ๊ป IDE๊ฐ record๋ผ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ ์ํด์ฃผ๋ ๊ฒ์ ๋ณผ ์ ์์์ต๋๋ค. IDE๊ฐ ์๋ ๋ณํํด์ฃผ๋ ๊ฒ์ ํ์ธํด๋ณด์๋๋ฐ, ์ฝ๋๊ฐ ์์ฒญ ๊น๋ํ๊ฒ ๋ณํ๋๋ ๊ฒ์ ๋ณผ ์ ์์์ต๋๋ค. ์ด ๊ณ๊ธฐ๋ก record ํค์๋์ VO์ ๋ํด ๊ณต๋ถํ ์ ์์์ต๋๋ค. record๊ฐ ๋ฌด์๋ณด๋ค๋ ๊ฐ๊ฒฐํ ์ ์์ ํจ๊ป ๊ฐ์ ๋ถ๋ณ์ฑ๊น์ง ๋ณด์ฅํด์ฃผ๋ ๊ทธ์ผ๋ง๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๊ธฐ์ ์์ฃผ ์ข์ ๊ธฐ๋ฅ์ด๋ผ๊ณ ํ๋จํ์๊ณ , ์ด์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์๋์ฐจ์ ์ด๋ฆ๊ณผ ์๋ ํ์์ ๋ํ ๊ฐ์ ์ ์ฅํ ๋ ์์ฑ์๋ฅผ ํตํด ๊ฒ์ฆํ์ฌ ์ญํ ์ ๋ถ๋ฆฌํ ์ ์์์ต๋๋ค. ๋ฟ๋ง ์๋๋ผ DTO ๊ณ์ธต์๋ ๋ถ๋ณ์ฑ์ ์ฃผ๋ record๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ฌ ๊ฐ๋ ์ฑ์ ํฅ์์์ผ ์ฝ๋๋ฅผ ๊ฐ์ ํ ์ ์์์ต๋๋ค.
๐ฉ UnmodifiableList์ toList()
์ ๋ ฅํ ์๋์ฐจ ์ด๋ฆ๋ค์ ๋ฆฌ์คํธ๋ก ๋ณํํ์ฌ ์ผ๊ธ์ปฌ๋ ์ ์ ํ๋๊ฐ์ผ๋ก ์ค์ ํ๋ ๊ณผ์ ์์ ์ค์ ํ ๋ฆฌ์คํธ๋ฅผ ์ธ๋ถ์์ ์์ ํ์ง ๋ชปํ๊ฒ ๋ง์์ผ ํ์ต๋๋ค. ์ด ๊ณผ์ ์์ UnmodifiableList์ ๋ํด ๋ฐฐ์ธ ์ ์์์ต๋๋ค. ์ฐ์ ์๋ณธ ํ๋๊ฐ ์์ ๋์ง ์๋๋ก final ํค์๋๋ฅผ ๋ถ์ฌ์ค ํ, ์์ฑ์์์ ํ ๋นํ๊ธฐ ์ํด ์๋ก ์์ฑํ ๋ฆฌ์คํธ์๋ UnmodifiableList๋ฅผ ๋ถ์ธ ํ ์๋ณธ ํ๋์ ํ ๋นํ์ฌ ์๋ณธ ํ๋์, ์๋ก ์์ฑํ ๋ฆฌ์คํธ ๋ชจ๋ ์ค๊ฐ์ ๋ณํ ์ ์๋ ์ฌ์ง๋ฅผ ๋ง์์ฃผ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ค ์๋ก ์์ฑํ ๋ฆฌ์คํธ๋ฅผ ๋ง์ง๋ง์ UnmodifiableList๋ฅผ ๋ถ์ฌ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ด ์๋ ์คํธ๋ฆผ์ ํตํด ๋ฆฌ์คํธ๋ฅผ ์์ฑํ ๋ toList()๋ฅผ ๋ถ์ฌ์ฃผ๊ธฐ๋ง ํ๋ฉด ์์ ์ ๋ง์์ฃผ๋ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค๋ ์ ๊น์ง ์๊ฒ ๋์ด toList๋ฅผ ์ ์ฉ์์ผ ํ ๋นํ๋ ๊ฐ์ฒด์ ํ ๋น๋ฐ๋ ํ๋ ๋ชจ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ง์ ์ ์์์ต๋๋ค!
๐ฉ Mock๊ณผ MockitoStatic
Mock
๊ธฐ์กด์ Mock์ด ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค๋ ๊ฐ๋ ์ ์๊ณ ์์์ง๋ง, ‘์ธ์ , ์ ์ฌ์ฉํด์ผ ํ๋์ง’์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํ์๋๋ฐ, ์ต๊ทผ ํ ์คํธ์ ๋ํด ๊ณต๋ถํ๋ฉด์, Mock์ ์ธ์ ํ๋์ง์ ๋ํด ๋ฐฐ์ธ ์ ์์์ต๋๋ค. Mock์ ์์กด์ฑ ๊ด๋ฆฌ์ ์๋ ํฅ์ ์ธก๋ฉด์์ ์ด์ ์ ์ ๊ณตํ๊ธฐ๋ ํ์ง๋ง, ๋ฌด์๋ณด๋ค๋ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์์ด์ ๊ฐ์ฒด์ ๋์์ ์ง์ ํต์ ํ ์ ์๋ ์ด์ ์ด ์ปธ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์๋๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์กดํ๋ ๊ฒฝ์ฐ, Mock์ ์ฌ์ฉํ์ฌ ํด๋น ๊ฐ์ฒด์ ๋์์ ์ง์ ์ ์ดํ ์ ์์์ต๋๋ค. ์ด๋ ๊ฒ ํด์ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ ๋ ๋ฉ์๋๊ฐ ์์กดํ๋ ๊ฐ์ฒด์ ๋์์ ๋ํด ๊ณ ๋ฏผํ ํ์๊ฐ ์์ด ์ด๋ก์จ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ณ , ํ ์คํธ ์ฝ๋์ ๋น์ฆ๋์ค ๋ก์ง ์ฌ์ด์ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ๊ฒ ์ ์งํ์ฌ ์ญํ ์ ์ ๋ถ๋ฆฌํ ์ ์์์ต๋๋ค.
MockitoStatic
0-9์ฌ์ด์ ๋์ ์์ฑ์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก ๊ตฌํํ์๋๋ฐ, ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ๋ํด์๋ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋์์ ์ ์ดํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋์ static์ ์ ๊ฑฐํ๊ณ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์๋์ฐจ ํด๋์ค๊ฐ ๋์ ์์ฑ ํด๋์ค๋ฅผ ์์กดํ๊ฒ ํจ์ผ๋ก์จ, ํ ์คํธ ์ฝ๋์์ Mock์ ์ด์ฉํด ๋ชจ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ํน์ ๋์ ๊ฐ์ ๋ฆฌํดํ๋ ๋ฐฉ์์ผ๋ก ํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค. ํ์ง๋ง util ํจํค์ง ๊ตฌ์กฐ์ ๋๋ถ์ด ์์กด์ฑ์ ๊ณ ๋ คํ์ ๋ ๋์ ์์ฑ๊ธฐ๋ ๋ถ๋ช ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก ๊ด๋ฆฌ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์๊น ๊ฒ์ํ๋ ์ค MockitoStatic์ ์ฌ์ฉํ๋ฉด ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋ ํด๋์ค๋ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค๋ ์ ์ ์๊ฒ ๋์๊ณ , ์ด MockitoStatic์ ํ ์คํธ ์ฝ๋์ ์ ์ฉํ์ฌ ๋ฉ์ธ ์ฝ๋์๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ์งํจ๊ณผ ๋์์ ํ ์คํธ๊น์ง ์๋ฒฝํ ์ํํ ์ ์์์ต๋๋ค ๐
๐ฉ@ParameterizedTest
์ง๋ ํผ์ด ๋ฆฌ๋ทฐ๋ฅผ ํด์ฃผ์ จ๋ ํ ๋ถ๊ป์ @ParameterizedTest์ ๋ํด ๊ณต๋ถํด๋ณด๋ผ๊ณ ์๋ ค์ฃผ์ ์ ์ด๋ฒ ์ฃผ์ฐจ ๋ฏธ์ ์์๋ ์ด ๋ถ๋ถ์ ๊ณต๋ถํ๊ณ ์ ์ฉ์์ผ๋ณด์์ต๋๋ค. ๊ธฐ์กด์๋ given ์ ์ ํ ์คํธํ ์ ๋ ฅ๊ฐ์ ์ง์ ํ ๋นํด์ ํ ์คํธ๋ฅผ ์ํํ๋๋ฐ, ํ๋ผ๋ฏธํฐ ๊ฐ์ผ๋ก ํ ์คํธ ํจ์ผ๋ก์จ, ํ๋์ ํ ์คํธ์ ์ฌ๋ฌ ๊ฐ๋ค์ ํ ์คํธํ ์ ์์๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์กฐ๊ธ ๋ ๊น๋ํ๊ฒ ๊ตฌํํ ์ ์์์ ๋ฟ๋ง ์๋๋ผ ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ ์ฌ๋ฌ๊ฐ ์ฃผ๋ฉด์ ํ ์คํธ์ ์ ํ๋๋ฅผ ๋์ผ ์ ์์์ต๋๋ค.
๐ฉํ ์คํธ ์ฝ๋์ Reflection Util
ํ ์คํธ ์ฝ๋์์๋ ํน์ ํ๋์ ๊ฐ์ ํ ๋นํด์ฃผ์ด์ผ ํ์ง๋ง ๋ฉ์ธ ์ฝ๋์์ setter๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๊ฐ์ ํ ๋นํ ์ง์ ๋ํ ์ด์๊ฐ ์์์ต๋๋ค. ํ ์คํธ ๋๋ฌธ์ ๋ฉ์ธ ์ฝ๋๋ฅผ ์์ ํ๋ ๊ฒ์ ๋น๋๋ฅผ ์ก์ผ๋ ค๋ค ์ด๊ฐ์ผ๊ฐ์ ํ์ฐ๋ ๊ฒฉ์ด์๊ธฐ์ ๋ง์ ๊ณ ๋ฏผ์ด ํ์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋คํํ ํ ์คํธ ๋๊ตฌ ์ค์ ํ๋๊ฐ์ ์ง์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ค์ ํ ์ ์๋ ๋๊ตฌ๊ฐ ์์์ ์๊ฒ ๋์์ต๋๋ค. ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด private์ผ๋ก ์ ๊ทผ ์ ์ด์๊ฐ ๋งํ ์๊ณ , setter๋ ์๋ ํ๋์ ๊ฐ์ ์์๋ก ํ ๋นํ ์ ์๋ค๋ ๊ฒ์ด ๋งค์ฐ ํฅ๋ฏธ๋ก์ ์ต๋๋ค. ์ด ์ ํธ์ ์ฌ์ฉ๋ฒ์ ์ตํ๊ณ ์ ์ฉํ ๊ฒฐ๊ณผ, ๊ธฐ๋ฅ ์์ฒด์ ๋ํ ํ ์คํธ์ ์ง์คํ ์ ์์๊ณ , ๋ฉ์ธ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ์ํ๋ ์ํฉ์ ์๋ฎฌ๋ ์ด์ ํ๊ณ ํ ์คํธํ ์ ์์์ต๋๋ค.
๐ฉ๊ทธ ์ธ ๋ฐฐ์ด ์ ๋ค
๋ฉ์ธ ์ฝ๋
- ์ํ๊ฐ์๋ ํด๋์ค private์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
- DTO๋ ๋๋ฉ์ธ๊ณผ ๊ฐ์ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
- ๋ถํ์ํ ๋ผ์ธ์ ์ ๊ฑฐํ์.
- ์ ํธ์ฑ์ด ์ง์ ํด๋์ค๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํ์.
- DTO์ ๋ถ๋ณ์ฑ์ ์ฃผ์. record๋ฅผ ์ฌ์ฉํ๋์ง final ํค์๋๋ฅผ ์ฌ์ฉํ๋์ง
- Getter ์ฌ์ฉ ์ง์ (๊ฐ์ฒด์์ ํด๊ฒฐํ ์ ์๋ ์ผ์ ๊ฐ์ฒด์์ ํด๊ฒฐํ์)
- ์์ฑ์์์ ๋ฉค๋ฒ๋ณ์๋ฅผ ์์ฒด์ ์ผ๋ก ๋ง๋ค๊ธฐ๋ณด๋จ ์ธ๋ถ์์ ์ฃผ์ ํ๋ ๋ฐฉ์์ ๊ณ ๋ คํ์.
- ๋ชจ๋ ์์๊ฐ๊ณผ ๋ฌธ์์ด์ ํฌ์ฅํ์.
- ์ค๋ณต์ด ์๋ ๋ฆฌ์คํธ๋ฅผ ๊ณ ๋ คํ๋ค๋ฉด Set์ ์ ๊ทน ์ด์ฉํ์.
- toString์ ์ด์ฉํ๊ธฐ๋ณด๋ค ๋ทฐ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด ๊ทธ๋ฆฌ๋ ๊ฒ์ ์ง์คํ์.
- ๊ณต๋ฐฑ ๋ผ์ธ์ ์ ํ์ฉํ์.
- ์ฝ๋์ ์ค๋ณต์ ์ ๊ฑฐํ์. ํ ์คํธ์ฝ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
ํ ์คํธ ์ฝ๋
- ํ ์คํธ ์ฝ๋๋ ์ฝ๋๋ค.
- ํ ์คํธ ์ฝ๋๋ ๋ฆฌํฉํฐ๋ง์ ํตํด ๊ฐ์ ํด๋๊ฐ์ผ ํ๊ณ , ํนํ ๋ฐ๋ณต์ ์ผ๋ก ํ๋ ๋ถ๋ถ์ ์ค๋ณต๋์ง ์๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
- ํ ์คํธ๋ฅผ ์ํ ์ฝ๋๋ ๊ตฌํ ์ฝ๋์์ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค.
- ํ
์คํธ๋ฅผ ์ํ ํธ์ ๋ฉ์๋๋ฅผ ๊ตฌํ ์ฝ๋์ ๊ตฌํํ์ง ๋ง์.
- ํ ์คํธ๋ฅผ ์ํด ๊ตฌํ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๋๋ค๋ ์๋ฏธ. ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฐพ์๋ณด์.
- ๋จ์ ํ ์คํธํ๊ธฐ ์ด๋ ค์ด ์ฝ๋๋ฅผ ๋จ์ ํ ์คํธ ํด๋ณด์.
- ํ ์คํธํ๊ธฐ ์ด๋ ค์ด ๊ฒ์ ํด๋์ค ๋ด๋ถ๊ฐ ์๋ ์ธ๋ถ๋ก ๋ถ๋ฆฌํ๋ ค๋ ์๋๋ฅผ ํด๋ณธ๋ค.
- private ํจ์๋ฅผ ํ ์คํธํ๊ณ ์ถ๋ค๋ฉด, ํด๋์ค ๋ถ๋ฆฌ๋ฅผ ๊ณ ๋ คํด๋ณด์.
- ํ ์คํธํ๊ธฐ ์ฝ๊ฒ ๊ตฌํํ๊ธฐ ์ํด์๋ ํด๋น ์ญํ ์ ์ํํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ํ์ด๋ฐ์ด ์๋์ง ๊ณ ๋ฏผํด ๋ณผ ์ ์๋ค. ๋๋ฌด ๋ง์ ์ญํ ์ ํ๊ณ ์๋ ํจ์๋ ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ์๋ฏธ์๋ ๋จ์๋ก ๋ถํ ํ ์ง ์ด์ ์ ๋ง์ถฐ๋ณด์.
- ์ฒ์๋ถํฐ ํฐ ๋จ์์ ํ ์คํธ๋ฅผ ๋ง๋ค์ง ์๋๋ก ํ์.
๐ก๊ณ ๋ฏผํ๋ ์ ๋ค
๐ฉ DTO๊ฐ VO๋ฅผ ์ฌ์ฉํด๋ ๋ ๊น?
DTO์ ํ๋์ VO๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ ๊ฒฝ์ฐ, View ๊ณ์ธต์์๋ DTO๋ฅผ ํตํด VO ๊ฐ์ ์ถ๋ ฅ์ ํ๋ค๊ณ ํ๋ฉด, VO์ ๋ํ ์ ๋ณด๋ฅผ ์๊ฒ ๋ฉ๋๋ค. ๋ง์ฝ VO ์์ฑ์์ “๊ฐ์ ๋ํ ๋น์ฆ๋์ค ๊ฒ์ฆ”๊น์ง ๊ตฌํ๋์ด์๋ค๋ฉด DTO๋ VO๋ฅผ ์์กดํ๊ณ VO๋ util๊น์ง ์์กดํ๊ฒ ๋๋๋ฐ ๊ทธ๋ ๋ค๋ฉด DTO์์ VO๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋น์ฆ๋์ค ๋ก์ง๊ณผ UI์ ๋ถ๋ฆฌ๊ฐ ์ ์ด๋ฃจ์ด ์ก๋ค๊ณ ํ ์ ์์๊น์ ๋ํ ์๊ฐ์ด ๋ง์์ต๋๋ค. ์ฐ์ DTO์์๋ VO๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ํ์ ์ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ์ ์ง์คํ๋๋ก ๊ตฌํํ์ง๋ง, VO๋ ์์ํ์ ์ ํฌ์ฅํ ๊ฐ์ผ ๋ฟ์ธ ํด๋์ค๋ผ๋ ์ ์ ์ค์ ์ ๋๋ฉด ์ฌ์ฉํด๋ ๋ ๊ฒ ๊ฐ๋ค๋ ์ ๋๋ฌธ์ ์์ฑ์์์ VO์์ ๊ฒ์ฆ๋ก์ง์ ๋ถ๋ฆฌํด์ผ ํ ์ง์ ๋ํด ์๊ฐํด๋ณด์์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
๐ฉ util์ ๊ธฐ์ค์ด ๋ฌด์์ธ๊ฐ?
ํ์ฌ์๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ํฉํ ๋ฆฌ ํด๋์ค๋ฅผ util ํจํค์ง๋ก ๋ถ๋ฆฌํ์์ต๋๋ค. ํ์ง๋ง util์ด๋ ๋ค์ด๋ฐ์ ๋ชจํธํ ๋๋์ ๋ง์ด ์ค๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ํํ ‘์ด๋ค’๊ธฐ๋ฅ์ ํ๋ ํด๋์ค๋ค์ ์งํฉ์ธ์ง ํ๋จํ๊ธฐ์๋ ๋ง์ด ๋ถ์กฑํ ์ด๋ฆ์ ๋๋ค. ๊ทธ๋์ util ํจํค์ง๋ก ๋ฌถ์ ๊ฒ์ด ์๋๋ผ ์ฐจ๋ผ๋ฆฌ ํจํค์ง๋ฅผ ๋๋๋๋ผ๋ ํจํค์ง ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ์ข์ ์ง ๊ณ ๋ฏผ์ด์์ต๋๋ค. util์ ๊ธฐ์ค์ด ๋ฌด์์ธ์ง ๊ณต๋ถํด๋ณด์์ผ ํ๊ฒ ์ต๋๋ค.
๐ฉํจํค์ง
๊น๋ํ ํจํค์ง๋ฅผ ์ค๊ณํ๊ณ ์ถ์์ต๋๋ค. ๊ทธ ๊ณผ์ ์์ DTO ํจํค์ง๋ฅผ Controller๋ก ๋ฃ์์ง, View์ ๋ฃ์์ง, ์๋๋ฉด ๋ฐ๊นฅ์ ๋ ์ง ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค. Controller์์๋ DTO๋ฅผ ์ฐ๊ณ View์์๋ DTO๋ฅผ ๋ฐ์์ ์ฐ๊ธฐ ๋๋ฌธ์ ์ด๋ ํ ๊ณณ์ ๋ฃ์๊น ํ๋ค๊ฐ, ๋ชจํธํ๋ฉด ๋ฐ๊นฅ์ ๋๋ ๊ฒ ์ต์ ์ด๋ผ ์๊ฐํ์ฌ ์ฐ์ ๋ฐ๊นฅ์ ๋์๋๋ฐ, ์ด๋์ ๋๋ ๊ฒ ์ข์ ํจํค์ง์ธ ๊ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค. ํจํค์ง๋ ์์ง ๋ง์ด ๋ถ์กฑํ๋ค ๋๊ปด ํจํค์ง๋ฅผ ๋๋๋ ๊ธฐ์ค๊ณผ ์ค๊ณ์ ๊ณต๋ถํ๊ณ ๋ ๊ณ ๋ฏผํด ๋ณด์์ผ๊ฒ ์ต๋๋ค.
๐ฉ๋น์ฆ๋์ค ๊ฒ์ฆ๊ณผ ์ ํจ์ฑ ๊ฒ์ฆ์ ๋ถ๋ฆฌ
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ๋ํด ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ๊ฒ๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ์๊ฑฐํ ๊ฒ์ฆ์ ๋ถ๋ฆฌํ์์ต๋๋ค. ์ ํจ์ฑ๊ณผ ๋น์ฆ๋์ค ๊ฒ์ฆ, ์ด ๋ ๊ฐ์ง์ ๊ฒ์ฆ์ ํ ํด๋์ค์์ ์ํํ๋ ๊ฒ์ด ์ข์ ์ง, ์๋๋ฉด ์ง๊ธ์ฒ๋ผ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์ ์ง ๊ณ ๋ฏผ์ ๋๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ํญ์ ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ์ ์ ์๊ฐํด์ ์ ํจ์ฑ ๊ฒ์ฆ ์ดํ ์์ฑ์์์ ๋น์ฆ๋์ค ๊ฒ์ฆ์ ์ํํ๋๋ก ํ์๋๋ฐ ‘๊ฒ์ฆ’์ด๋ผ๋ ๊ณตํต๋ ๊ธฐ๋ฅ ์๋ ์ด๋ ๊ฒ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์ ๋ก์ง์ผ๊น์? ‘๊ณตํต’์ ์ง์คํ ๊ฒ์ธ์ง, UI/๋น์ฆ๋์ค ‘๋ถ๋ฆฌ’์ ์ง์คํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค.
๐ฉ๋ค์ด๋ฐ
์ข์ ๋ค์ด๋ฐ์ ๊ฒฝํ์ผ๋ก๋ถํฐ ๋์ค๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ฌ์๋ ์ข์ ๋ฉ์๋๋ช , ์ข์ ํ๋๋ช , ์ข์ ํด๋์ค๋ช ์ ์ง๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ง๋ง, ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ ๋ง ๋ง๋ ํ ๋ค์ด๋ฐ์ด ๋ ์ค๋ฅด์ง ์๋๋ค๋ฉด, ์ค๊ณ๊ฐ ์๋ชป๋ ๊ฒ์ด ์๋ ์ง ์์ฌ๋ ํด๋ณด๊ณ ๋ค์ด๋ฐ์ ๋ํด ๋ง์ด ๊ณต๋ถํ๊ณ ์๊ฐํ๊ณ ๊ณ ๋ฏผํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
๐กํ ์ค ์๊ฐ
์ฆ๊ธฐ๋ฉด ์๊ฐ์ด ์๊ฐ๋ค๊ณ ํ์ง๋ง, ์ด ์๊ฐ์ ์ฆ๊น๊ณผ ๋์์ ์ค๋ ์๊ฐ์ ๋ชฐ์ ํ๋ ๋ง๋ฅ ์งง์ง๋ ์์๋ ํ ์ฃผ์๊ณ ์งง์ง ์์๋ ๋งํผ ๋ฐฐ์ ๋ ์ ๋ค๋ ๋ง์ ํ ์ฃผ์์ต๋๋ค. 3์ฃผ์ฐจ๋ ํ์ดํ ใ
'๐ Etc > Rev' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422