# [์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 6๊ธฐ] ํ”„๋ฆฌ์ฝ”์Šค 2์ฃผ์ฐจ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์…˜ ํ›„๊ธฐ
Study Repository

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 6๊ธฐ] ํ”„๋ฆฌ์ฝ”์Šค 2์ฃผ์ฐจ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์…˜ ํ›„๊ธฐ

by rlaehddnd0422

๐Ÿ’ก 2์ฃผ์ฐจ๋Š” ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์…˜์ž…๋‹ˆ๋‹ค.

 

GitHub - woowacourse-precourse/java-racingcar-6

Contribute to woowacourse-precourse/java-racingcar-6 development by creating an account on GitHub.

github.com

 

์ž๋™์ฐจ ๊ฒฝ์ฃผ์— ์ฐธ๊ฐ€ํ•  ์ž๋™์ฐจ๋“ค์˜ ์ด๋ฆ„๊ณผ ์‹œ๋„ํšŸ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ์‹œ๋„ ํšŸ์ˆ˜ ๋™์•ˆ 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
Service
DTO

์ด ์ „ ์ง„ํ–‰ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋Š” ํšŒ์›์˜ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์†Œ๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด 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๋„ ์—†๋Š” ํ•„๋“œ์— ๊ฐ’์„ ์ž„์˜๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋งค์šฐ ํฅ๋ฏธ๋กœ์› ์Šต๋‹ˆ๋‹ค. ์ด ์œ ํ‹ธ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๊ณ  ์ ์šฉํ•œ ๊ฒฐ๊ณผ, ๊ธฐ๋Šฅ ์ž์ฒด์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋ฉ”์ธ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์›ํ•˜๋Š” ์ƒํ™ฉ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿšฉ๊ทธ ์™ธ ๋ฐฐ์šด ์ ๋“ค 

๋ฉ”์ธ ์ฝ”๋“œ

  1. ์ƒํƒœ๊ฐ€์—†๋Š” ํด๋ž˜์Šค private์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  2. DTO๋Š” ๋„๋ฉ”์ธ๊ณผ ๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. 
  3. ๋ถˆํ•„์š”ํ•œ ๋ผ์ธ์„ ์ œ๊ฑฐํ•˜์ž.
  4. ์œ ํ‹ธ์„ฑ์ด ์ง™์€ ํด๋ž˜์Šค๋Š” ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜์ž.
  5. DTO์— ๋ถˆ๋ณ€์„ฑ์„ ์ฃผ์ž. record๋ฅผ ์‚ฌ์šฉํ•˜๋˜์ง€ final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋˜์ง€
  6. Getter ์‚ฌ์šฉ ์ง€์–‘ (๊ฐ์ฒด์—์„œ ํ•ด๊ฒฐํ• ์ˆ˜ ์žˆ๋Š” ์ผ์€ ๊ฐ์ฒด์—์„œ ํ•ด๊ฒฐํ•˜์ž)
  7. ์ƒ์„ฑ์ž์—์„œ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์ž์ฒด์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋ณด๋‹จ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ คํ•˜์ž.
  8. ๋ชจ๋“  ์›์‹œ๊ฐ’๊ณผ ๋ฌธ์ž์—ด์„ ํฌ์žฅํ•˜์ž.
  9. ์ค‘๋ณต์ด ์—†๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค๋ฉด Set์„ ์ ๊ทน ์ด์šฉํ•˜์ž.
  10. toString์„ ์ด์šฉํ•˜๊ธฐ๋ณด๋‹ค ๋ทฐ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•ด ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•˜์ž.
  11. ๊ณต๋ฐฑ ๋ผ์ธ์„ ์ž˜ ํ™œ์šฉํ•˜์ž.
  12. ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์ž. ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

 

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ์ฝ”๋“œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ†ตํ•ด ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€์•ผ ํ•˜๊ณ , ํŠนํžˆ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ๋Š” ๊ตฌํ˜„ ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. 
  • ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํŽธ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ ์ฝ”๋“œ์— ๊ตฌํ˜„ํ•˜์ง€ ๋ง์ž. 
    •  ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๊ตฌํ˜„์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ์˜๋ฏธ. ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ฅผ ์ฐพ์•„๋ณด์ž.
  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์ž.
  • ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์„ ํด๋ž˜์Šค ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€๋กœ ๋ถ„๋ฆฌํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ํ•ด๋ณธ๋‹ค.
  • 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์ฃผ์ฐจ๋„ ํ™”์ดํŒ…ใ…‡

 

 

GitHub - Dongwoongkim/java-racingcar-6

Contribute to Dongwoongkim/java-racingcar-6 development by creating an account on GitHub.

github.com

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ