๐Ÿช ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 6๊ธฐ ํ”„๋ฆฌ์ฝ”์Šค - 1์ฃผ์ฐจ ํšŒ๊ณ 

์ดํ•˜์–€ยท2023๋…„ 10์›” 26์ผ
0
post-thumbnail

โญ๏ธ ํ”„๋ฆฌ์ฝ”์Šค


์ง€์›์„œ ์ž‘์„ฑ์„ ๋งˆ์น˜๊ณ , ํ”„๋ฆฌ์ฝ”์Šค๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค!
1์ฃผ์ฐจ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ 1์‹œ๊ฐ„ ์ „, OT๊ฐ€ ์žˆ์–ด ๋จผ์ € ๋“ฃ๊ณ  ์‹œ์ž‘์„ ํ–ˆ๋„ค์š”๐Ÿ˜Š
์ •๋ฆฌ๋Š” ๋ชปํ–ˆ์ง€๋งŒ ๋‚ด์šฉ ๊ณต์œ ๋“œ๋ฆด๊ฒŒ์š”.
๐Ÿ”— โœจ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 6๊ธฐ ํ”„๋ฆฌ์ฝ”์Šค ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜๋‚ด์šฉ ์ •๋ฆฌ

โšพ๏ธ 1์ฃผ์ฐจ ์˜จ๋ณด๋”ฉ ๋ฏธ์…˜ - ์ˆซ์ž์•ผ๊ตฌ

1์ฃผ์ฐจ ๋ฏธ์…˜์€ ์ˆซ์ž์•ผ๊ตฌ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
์š”๊ตฌ์‚ฌํ•ญ์€ ํฌ๊ฒŒ
๐ŸŸก ๊ธฐ๋Šฅ์š”๊ตฌ์‚ฌํ•ญ
๐ŸŸก ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ
๐ŸŸก ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ์‚ฌํ•ญ

์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์—ˆ์–ด์š”.

์ž์„ธํ•œ ์‚ฌํ•ญ์€ hayannn/java-baseball-6: ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 1์ฃผ์ฐจ ์˜จ๋ณด๋”ฉ ๋ฏธ์…˜ - ์ˆซ์ž์•ผ๊ตฌ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”!!


1๏ธโƒฃ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก ์ •๋ฆฌ

์šฐํ…Œ์ฝ” ์ด์ „์—๋Š” ์Šค์Šค๋กœ ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ๋ฐฉ์‹์„ ํƒํ•ด์™”๊ธฐ ๋•Œ๋ฌธ์— ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ›์•„์„œ ์กฐ๊ฑด์„ ๋งž์ถ”๋Š” ์—ฐ์Šต์„ ํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ์— ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ •๋ฆฌํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ๋– ์˜ค๋ฅด๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด์™”์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ, ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๊ณ  ์ด ๊ธฐ๋Šฅ์€ ์–ด๋–ค ์‚ฌ์šฉ ๋ชฉ์ ์„ ๊ฐ€์ง€๋Š”์ง€ ๋ถ„๋ช…์น˜๋ชปํ•ด ํ•„์š”๊ฐ€ ์—†๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ๋„ ํ–ˆ๊ณ , ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ์—๋„ ํž˜๋“ค์—ˆ์–ด์š”๐Ÿ’ฆ

๊ทธ๋Ÿฌ๋‹ค ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค ํ”„๋ฆฌ์ฝ”์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉฐ ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ์‚ฌํ•ญ ์†
๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „ docs/README.md์— ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ •๋ฆฌํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค.
๋ผ๋Š” ์กฐ๊ฑด์„ ๋ฐ›์œผ๋ฉฐ ๋ฌธ์„œํ™”๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š”, ํฌ๊ฒŒ
๐Ÿ”น ์ˆซ์ž์•ผ๊ตฌ ๊ฒŒ์ž„์˜ ์ •์˜
๐Ÿ”น ์‹œ๋‚˜๋ฆฌ์˜ค
๐Ÿ”น ๊ธฐ๋Šฅ ๋ชฉ๋ก
๐Ÿ”น ๊ถ๊ธˆํ–ˆ์–ด์š”
๐Ÿ”น ๋ฐฐ์› ์–ด์š”

๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์˜ ๊ธฐ๋ณธ์ ์ธ ์ •์˜๋ฅผ ๊นŒ๋จน์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์ •์˜๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ์ ์—ˆ์–ด์š”.
๊ทธ ๋‹ค์Œ ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ ๋ชฉ๋ก์€ ํŒจํ‚ค์ง€ ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์„ฑํ–ˆ์–ด์š”!
๊ทธ๋™์•ˆ spring์„ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐฉ์‹์— ์ต์ˆ™ํ•˜๋‹ค๋ณด๋‹ˆ ์ž์—ฐ์Šค๋ ˆ ํŒจํ‚ค์ง€๋ฅผ ๋‚˜๋ˆ„๊ณ  MVC ํŒจํ„ด์„ ์ ์šฉํ•  ์ƒ๊ฐ๋ถ€ํ„ฐ ํ–ˆ์Šตํ‹ฐ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์‹ค ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ ๋’ค ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ์™ธ์— ๊ฒŒ์ž„์˜ ํ๋ฆ„์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค์–ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋Š” ๊ฑด ์•ˆ๋น„๋ฐ€์ž…๋‹ˆ๋‹ค๐Ÿคซ

  • ์ž‘์„ฑํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”!

    1๏ธโƒฃ ์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์˜ ์‹œ์ž‘์„ ์œ„ํ•œ ๋ฌธ๊ตฌ ์ถœ๋ ฅ
    
    ์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” :
    
    2๏ธโƒฃ ์ปดํ“จํ„ฐ(์ƒ๋Œ€๋ฐฉ) -> 1์—์„œ 9๊นŒ์ง€ ์„œ๋กœ ๋‹ค๋ฅธ ์ž„์˜์˜ ์ˆ˜ 3๊ฐœ ์„ ํƒ
    
    3๏ธโƒฃ ํ”Œ๋ ˆ์ด์–ด -> ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ 3์ž๋ฆฌ์˜ ์ˆ˜ ์ž…๋ ฅ
    
    [E1] ์ž…๋ ฅํ•œ ์ˆ˜๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ
    [E2] ์ˆ˜๊ฐ€ 3์ž๋ฆฌ ๋ฏธ๋งŒ ๋˜๋Š” ์ดˆ๊ณผ๋˜๋Š” ๊ฒฝ์šฐ
    [E3] ์ˆซ์ž์˜ ๋ฒ”์œ„๊ฐ€ 1~9๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ(์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ๋„ ํฌํ•จ)
    
    4๏ธโƒฃ ์ปดํ“จํ„ฐ์™€ ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜๋ฅผ ๋น„๊ตํ•ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ
    
    [Output] ์ŠคํŠธ๋ผ์ดํฌ : ๊ฐ™์€ ์ˆ˜๊ฐ€ ๊ฐ™์€ ์ž๋ฆฌ์— ์žˆ๋Š” ๊ฒฝ์šฐ
    [Output] ๋ณผ : ๊ฐ™์€ ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ž๋ฆฌ์— ์žˆ๋Š” ๊ฒฝ์šฐ
    [Output] ๋‚ซ์‹ฑ : ๊ฐ™์€ ์ˆ˜๊ฐ€ ์ „ํ˜€ ์—†๋Š” ๊ฒฝ์šฐ
    
    5๏ธโƒฃ ํ˜„์žฌ ์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„ ์ข…๋ฃŒ ๋ฐ ๊ฒŒ์ž„ ์žฌ์‹œ์ž‘ ์—ฌ๋ถ€๋ฅผ ๋ฌป๋Š” ๋ฌธ๊ตฌ ์ถœ๋ ฅ
    
    3์ŠคํŠธ๋ผ์ดํฌ ์ถฉ์กฑ ์‹œ ์ถœ๋ ฅ
    3์ŠคํŠธ๋ผ์ดํฌ
    3๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ๋งžํžˆ์…จ์Šต๋‹ˆ๋‹ค! ๊ฒŒ์ž„ ์ข…๋ฃŒ
    ๊ฒŒ์ž„์„ ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๋ ค๋ฉด 1, ์ข…๋ฃŒํ•˜๋ ค๋ฉด 2๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.
    3์ŠคํŠธ๋ผ์ดํฌ ๋ฏธ์ถฉ์กฑ ์‹œ 3๏ธโƒฃ~ 4๏ธโƒฃ ๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ€ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฐ˜๋ณต
    [Caution] 3์ŠคํŠธ๋ผ์ดํฌ๋ฅผ ์ถฉ์กฑํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์•ผ ํ•œ๋‹ค.
    
    6๏ธโƒฃ ์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์˜ ์žฌ์‹œ์ž‘ or ์ข…๋ฃŒ(Complete Shutdown)
    
    ํ”Œ๋ ˆ์ด์–ด์˜ ์ž…๋ ฅ ๊ฐ’์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค.
    1์„ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ -> ๊ฒŒ์ž„ ์žฌ์‹œ์ž‘(New)
    2๋ฅผ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ -> ๊ฒŒ์ž„ ์ข…๋ฃŒ ๋ฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์ข…๋ฃŒ
  • ๊ธฐ๋Šฅ ๋ชฉ๋ก์€ ๊ฐ„๋‹จํžˆ ์ดˆ๊ธฐ ๊ตฌํ˜„ ๊ณ„ํš ๋‹น์‹ฑ ์ ์—ˆ๋˜ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š”!
    (ํ›„์— ๋ฆฌํŒฉํ† ๋ง์„ ๊ฑฐ์ณ View์˜ 2๊ฐ€์ง€ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค๐Ÿ˜ฉ)

    hayannn/java-baseball-6
    โ”œโ”€โ”€  docs
    |    โ””โ”€โ”€ README.md
    |
    โ””โ”€โ”€  src
         โ””โ”€โ”€ main/java/baseball
             โ”œโ”€โ”€ Controller
             |	 โ””โ”€โ”€ BaseballGameController.java        
             |
             โ”œโ”€โ”€ Domain
             |	 โ”œโ”€โ”€ Computer.java
             |   โ””โ”€โ”€ Player.java
             |
             โ”œโ”€โ”€ Exception
             |   โ”œโ”€โ”€ PlayerInputException.java
             |   โ””โ”€โ”€ ReplayOrQuitGameException.java
             |
             โ”œโ”€โ”€ Service
             |   โ”œโ”€โ”€ GameFlowManagementService.java
             |   โ””โ”€โ”€ GameNumberCheckService.java
             |
             โ”œโ”€โ”€ Util
             |   โ”œโ”€โ”€ ComputerNumberGenerator.java
             |   โ””โ”€โ”€ StringToArrayList.java
             |
             โ”œโ”€โ”€ View
             |   โ”œโ”€โ”€ FirstGamePlayerInputView.java
             |   โ”œโ”€โ”€ NextGamePlayerInputView.java
             |   โ””โ”€โ”€ GameScoreView.java
             |
             โ””โ”€โ”€ Application.java
    
  • ๊ถ๊ธˆํ–ˆ์–ด์š” ๋Š” ๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ ๊ถ๊ธˆํ–ˆ๋˜ ๋ถ€๋ถ„์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋ฉฐ, ๋ฐฐ์› ์–ด์š” ๋Š” ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์— ๊ด€๋ จ๋œ ๊ฐ„๋‹จํ•œ ์ •๋ฆฌ์ž…๋‹ˆ๋‹ค!


2๏ธโƒฃ ๊ฐœ๋ฐœ

๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉฐ ์žˆ์—ˆ๋˜ ๋งŽ์€ ์ผ์€ ์ฃผ๋กœ "์ผ๊ธฐ"๋ฅผ ํ†ตํ•ด ์ •๋ฆฌํ–ˆ์—ˆ์–ด์š”.
๊ทธ๋ฆฌ๊ณ  commit์˜ ์ˆœ์„œ๋Œ€๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ๊ณ , ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๊ณผ์ •๋„ commit์— ๋ฐ˜์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ˆœ์„œ
1. Domaian - Computer ๊ฐœ๋ฐœ
2. Util - ComputerNumberGenerator ๊ฐœ๋ฐœ
3. Exception ํŒจํ‚ค์ง€ ๊ฐœ๋ฐœ
4. Util - StringToArrayList ๊ฐœ๋ฐœ
5. Service ํŒจํ‚ค์ง€ ๊ฐœ๋ฐœ
6. View ํŒจํ‚ค์ง€ ๊ฐœ๋ฐœ
7. Controller ๊ฐœ๋ฐœ
8. Application.java ์ฝ”๋“œ ์ถ”๊ฐ€
9. refactoring

๊ทธ๋ ‡๋‹ค๋ณด๋‹ˆ ๋ฌด๋ ค 50๊ฐœ์— ๋‹ฌํ•˜๋Š” commit ๊ธฐ๋ก์„ ์„ธ์›Œ๋ฒ„๋ ธ๋„ค์š”๐Ÿ…
ํ•˜ํ•˜
๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๋” ๊ธฐ๋Šฅ ์œ„์ฃผ์˜ commit์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„ํš์„ ์„ธ์›Œ์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.


3๏ธโƒฃ ๋ฆฌํŒฉํ† ๋ง

๋ฆฌํŒฉํ† ๋ง์€ ์ •๋ง ์ด๋ฒˆ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค๋ฅผ ํ†ตํ•ด ์ฒ˜์Œ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ณด๋‹ˆ ๊ฐ€์žฅ ์•„์‰ฌ์šด ๋ถ€๋ถ„์ด ๋งŽ์€ ๊ฒƒ์ด ์‚ฌ์‹ค์ธ๋ฐ์š”๐Ÿซ 
๊ฐ„๋‹จํ•œ ๋ณ€์ˆ˜๋ช… ์ˆ˜์ •, ํ•„๋“œ์™€ ์ƒ์„ฑ์ž์˜ ๋ถ„๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ๋ถˆํ•„์š”ํ•œ View์˜ ํ•ฉ์น˜๊ธฐ ์ •๋„๋งŒ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ๋ณ€์ˆ˜๋ช…์€ ReplayOrQuitGameException.java ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์— ์žˆ์–ด ์ˆซ์ž์˜ ์ข…๋ฅ˜๊ฐ€ 1,2๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋ฅผ ๋ฌธ์ž ์ž…๋ ฅ์„ ํฌํ•จํ•œ๋‹ค๋Š” ์ ์„ ๋ถ„๋ช…ํžˆ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝํ–ˆ์–ด์š”.

  • ์ด์ „
...
//์ˆซ์ž์˜ ์ข…๋ฅ˜๊ฐ€ 1,2๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ
    public void notRangeOfNumberCase(String numberCasesOfString) {
        if (!numberCasesOfString.matches(RE_NUMBER_REGEX)) {
            throw new IllegalArgumentException("1,2์˜ ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋งŒ์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
        }
    }
}
  • ์ดํ›„ : notRangeOfNumberOrCharacterCase๋กœ ๋ณ€๊ฒฝ
...
    //์ˆซ์ž์˜ ์ข…๋ฅ˜๊ฐ€ 1,2๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์™€ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ
    public void notRangeOfNumberOrCharacterCase(String numberCasesOfString) {
        if (!numberCasesOfString.matches(RE_NUMBER_REGEX)) {
            throw new IllegalArgumentException("1,2์˜ ์ˆซ์ž ์ค‘ ํ•˜๋‚˜๋งŒ์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
        }
    }
}

๊ทธ๋ฆฌ๊ณ  ํ•„๋“œ์™€ ์ƒ์„ฑ์ž๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ง„ํ–‰ํ–ˆ๋‹ต๋‹ˆ๋‹ค๐Ÿ˜‰
๊ทธ ์ค‘ BaseballGameController.java ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ์ฒจ๋ถ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

  • ์ด์ „
public class BaseballGameController {
    private Computer computer = new Computer();
    private Player player = new Player();

    /* ์ˆซ์ž์˜ ๋น„๊ต๋ฅผ ํ†ตํ•œ ๊ฒŒ์ž„ ์ง„ํ–‰์„ ์œ„ํ•ด ๋ณ€์ˆ˜ ์ƒ์„ฑ */
    private static final int STRIKE_COUNT_INDEX = 0; //ํ˜„์žฌ ์ŠคํŠธ๋ผ์ดํฌ ๊ฐœ์ˆ˜ -> ์ธ๋ฑ์Šค๋กœ ์ €์žฅ
    private static final int STRIKE_COUNT_THREE = 3; //ํ˜„์žฌ์˜ ์ŠคํŠธ๋ผ์ดํฌ ๊ฐœ์ˆ˜์™€ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•œ 3์ŠคํŠธ๋ผ์ดํฌ์˜ ๊ฐ’ ์ƒ์„ฑ
    private static final int STRIKE_COUNT_INDEX = 0; //ํ˜„์žฌ ์ŠคํŠธ๋ผ์ดํฌ ๊ฐœ์ˆ˜
    private static final int STRIKE_COUNT_THREE = 3; //๋น„๊ต๋ฅผ ์œ„ํ•œ 3์ŠคํŠธ๋ผ์ดํฌ

    private final GameFlowManagementService gameFlowManagementService = new GameFlowManagementService(); //์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์˜ ํ๋ฆ„ ๋ฐ ๋‹ค์Œ ๊ฒŒ์ž„์˜ 'Replay or Quit' question ๋‹ด๋‹น ์„œ๋น„์Šค๋ฅผ ์—ฐ๊ฒฐ
    private final GameNumberCheckService gameNumberCheckService = new GameNumberCheckService(); //์ปดํ“จํ„ฐ์™€ ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆซ์ž ๋น„๊ต-'์ŠคํŠธ๋ผ์ดํฌ, ๋ณผ'์„ ์นด์šดํŠธํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์—ฐ๊ฒฐ
    private final FirstGamePlayerInputView firstGamePlayerInputView = new FirstGamePlayerInputView(); //ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆซ์ž ์ž…๋ ฅ ์‹ค์ œ ์ฒ˜๋ฆฌ ๋ฐ ์ €์žฅํ•˜๋Š” ๋ทฐ๋ฅผ ์—ฐ๊ฒฐ
    private final GameScoreView gameScoreView = new GameScoreView(); //์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์˜ ํ”Œ๋ ˆ์ด ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์ ์ ˆํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ทฐ๋ฅผ ์—ฐ๊ฒฐ
    private List<Integer> countStrikeBall = new ArrayList<>(); //์ŠคํŠธ๋ผ์ดํฌ์™€ ๋ณผ์˜ ๊ฐœ์ˆ˜ ์นด์šดํŠธํ•˜๋Š” ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
...
  • ์ดํ›„ : ์ด๋ ‡๊ฒŒ ์ดˆ๊ธฐํ™” ์œ„์น˜๋ฅผ BaseballGameController() ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณด๊ธฐ ํŽธ์•ˆํ•˜๊ฒŒ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.
public class BaseballGameController {
    private Computer computer;
    private Player player;
    private GameFlowManagementService gameFlowManagementService;
    private GameNumberCheckService gameNumberCheckService;
    private FirstGamePlayerInputView firstGamePlayerInputView;
    private GameScoreView gameScoreView;
    private List<Integer> countStrikeBall;

    private static final int STRIKE_COUNT_INDEX = 0; //ํ˜„์žฌ ์ŠคํŠธ๋ผ์ดํฌ ๊ฐœ์ˆ˜
    private static final int STRIKE_COUNT_THREE = 3; //๋น„๊ต๋ฅผ ์œ„ํ•œ 3์ŠคํŠธ๋ผ์ดํฌ

    public BaseballGameController() { // ํ•„๋“œ ์„ ์–ธ ์œ„์น˜์™€ ์ดˆ๊ธฐํ™” ์œ„์น˜ ๋ถ„๋ฆฌ
        computer = new Computer();
        player = new Player();
        gameFlowManagementService = new GameFlowManagementService();
        gameNumberCheckService = new GameNumberCheckService();
        firstGamePlayerInputView = new FirstGamePlayerInputView();
        gameScoreView = new GameScoreView();
        countStrikeBall = new ArrayList<>();
    }
...

๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚˜๋ˆ„์—ˆ๋˜ View๋ฅผ ํ•ฉ์ณค์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด์—๋Š” First์™€ Next๋กœ view๋ฅผ ๋‚˜๋ˆ„์—ˆ์ง€๋งŒ, ๊ตณ์ด ๋‚˜๋ˆ„์–ด์„œ view๋ฅผ ๋ณด์—ฌ์ค„ ํ•„์š”์„ฑ์„ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์„ค๋“๋˜๋Š” ๊ทผ๊ฑฐ๊ฐ€ ์—†๋‹ค๋Š” ํŒ๋‹จ์„ ํ•ด ํ•ฉ์ณค์Šต๋‹ˆ๋‹ค!

  • ์ด์ „ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

    ...
               |
               โ”œโ”€โ”€ View
               |   โ”œโ”€โ”€ FirstGamePlayerInputView.java
               |   โ”œโ”€โ”€ NextGamePlayerInputView.java
               |   โ””โ”€โ”€ GameScoreView.java
               |
               โ””โ”€โ”€ Application.java
  • ๋ณ€๊ฒฝ๋œ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

    ...
               |
               โ”œโ”€โ”€ View
               |   โ”œโ”€โ”€ GamePlayerInputView.java
               |   โ””โ”€โ”€ GameScoreView.java
               |
               โ””โ”€โ”€ Application.java

4๏ธโƒฃ ๊ฒฐ๊ณผ๋Š”?


โญ๏ธ ๋งˆ์น˜๋ฉฐ

๐Ÿ˜ฎ ๋ฐ˜์„ฑํ•  ์ 

๋‹น์žฅ์˜ MVC ํŒจํ„ด์ด๋‚˜ ๊ทœ์น™์— ๋„ˆ๋ฌด ์–ฝ๋งค์—ฌ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ๋ฅผ ์งœ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, โ€˜๋‚˜์˜ ๊ฒฐ์ •โ€™์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€์ž!

  • ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ ˆํผ๋Ÿฐ์Šค๋“ค์„ ์ฐพ์•„๋ณด๊ณ , ์ฐธ๊ณ ๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ ์ด๊ฒƒ์ด ๋„ˆ๋ฌด ์šฐ์„ ์‹œ๋˜๋ฉด ์ œ ์•„์ด๋””์–ด์™€ ํƒ€์ธ์˜ ์•„์ด๋””์–ด๊ฐ€ ์ ์  ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ๋Š๊ผˆ์–ด์š”.
    ๋ญ”๊ฐ€..์ ์  ์ œ ์˜๊ฒฌ์ด ์•„๋‹Œ ๊ฒƒ์— ๋งค๋ชฐ์ด ๋œ๋‹ค๊ณ ๋‚˜ ํ• ๊นŒ...? ๊ทธ๋žฌ๋‹ต๋‹ˆ๋‹ค.

  • ๊ทธ๋ž˜์„œ ์•ž์œผ๋กœ๋Š” ๋งŒ๋“ค์–ด ๊ฐ€๋Š” ๊ณผ์ •์—์„œ ์ถฉ๋ถ„ํžˆ ํŒจํ„ด๊ณผ ๊ทœ์น™์„ ์ ์šฉํ•˜๋ฉฐ ์ˆ˜์ •ํ•ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์œ ๋…ํ•˜๋ฉฐ, ์˜ˆ์‹œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ๋ณด๋‹จ ๋‚ด๊ฐ€ ์Šค์Šค๋กœ ๋จผ.์ €. ์ƒ๊ฐํ•ด๋ณธ๋‹ค์Œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ๋‚˜์ค‘์— ์•„์ฃผ ๋‚˜์ค‘์— ํ’€๋ฆฌ์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์ฐพ์•„๋ณด์ž๊ณ  ๋งˆ์Œ ๋จน์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿƒ๐Ÿปโ€โ™€๏ธ ๋‚˜์•„๊ฐˆ ์ 

๋ณ€์ˆ˜๋ช…๊ณผ ๊ฐ™์ด ๋„ค์ด๋ฐ์„ ์‚ฌ์šฉํ•  ๋•Œ ์กฐ๊ธˆ ๋” ์‰ฝ๊ณ  ์ง๊ด€์ ์ธ ๋‹จ์–ด๋กœ ๊ฒฐ์ •ํ•˜์ž.

  • ์ด ๊ธ€์„ ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์–ด์˜ค์‹  ๋ถ„์€ ์ด๋ฏธ ๋ˆˆ์น˜์ฑ„์…จ๊ฒ ์ง€๋งŒ๐Ÿ™ƒ ์ €๋Š” TMI๊ฐ€ ๋งŽ์€ ํŽธ์ž…๋‹ˆ๋‹ค..
    ๊ทธ๋ ‡๋‹ค๋ณด๋‹ˆ ์ž์—ฐ์Šค๋ ˆ ๊ธ€๋„ ๊ธธ์–ด์ง€๊ณ , ์ด๋Ÿฐ ๋„ค์ด๋ฐ๋„ ๋ชจ๋“  ์„ค๋ช…์„ ๋„ฃ์œผ๋ ค ์•„๋“ฑ๋ฐ”๋“ฑํ•˜๋Š” ํŽธ์ด๋ผ๋Š” ๊ฑธ ์ด๋ฒˆ์— ๋Š๋ผ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์•ž์œผ๋กœ๋Š” ReplayOrQuitGameException ์ด๋Ÿฐ ๋ฐฉ์‹๋ณด๋‹ค๋Š” ReplayGameException ์ด๋Ÿฐ์‹์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๋ง์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿ™‡โ€โ™€๏ธ

๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์€ ๊ทธ๋•Œ๊ทธ๋•Œ ์ ์–ด๋‘๊ณ , ์ฐพ์•„๋ณธ ๋ฐฉ์‹๋„ ๊ธฐ๋กํ•˜์ž.

  • ์ด๋ ‡๊ฒŒ 1์ฃผ์ฐจ ํšŒ๊ณ ๋ฅผ ๋‚จ๊ธฐ๋ฉด์„œ๋„ ์‚ฌ์‹ค ์–ด๋–ค ์ˆœ์„œ๋กœ ๊ฐœ๋ฐœ์„ ํ–ˆ๊ณ  ์–ด๋–ป๊ฒŒ ์ƒ๊ฐ์„ ํ•ด์™”๋Š”์ง€ ๊ธฐ์–ตํ•ด๋‚ด๊ธฐ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ์ง€ ์•Š๋”๋ผ๊ตฌ์š”??
  • ๊ทธ๋ž˜์„œ ์•ž์œผ๋กœ๋Š” ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์„ ํ•˜๊ณ , ์–ด๋ ค์šด ๋ถ€๋ถ„๊ณผ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์„ ์ฐพ๊ณ  ๊ณ ๋ฏผํ•˜๋Š” ๊ณผ์ •์—์„œ ์ƒํ™ฉ๊ณผ ๊ฒฐ๊ณผ๋งŒ ์ •๋ฆฌํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋‚ด๊ฐ€ ์ฐธ๊ณ ํ–ˆ๋˜ ๋งํฌ๋‚˜ ์ฑ… ๋“ฑ์„ ์™œ ์ฐพ์•˜๋Š”์ง€, ๊ทธ๋ž˜์„œ ์–ด๋–ค ๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ–ˆ๋Š”์ง€ ๋“ฑ์„ ์กฐ๊ธˆ ๋” ์ž์„ธํ•˜๊ฒŒ ๊ธฐ๋กํ•˜๊ณ ์ž ๋งˆ์Œ๋จน๊ฒŒ ๋˜์—ˆ๋„ค์š”!!

๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค:)

๊ฐœ๋ฐœ ๊ณผ์ •์˜ ๋” ์„ธ์„ธํ•˜๊ณ  ์žฌ๋ฏธ์žˆ๋Š” ์ผ๋“ค์ด ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด ์•„๋ž˜์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!
์Šฌ์ฉ ๋†“๊ณ  ๊ฐ‘๋‹ˆ๋‹คโ˜บ๏ธ
โšพ๏ธ Week1: ์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„

๊ทธ๋Ÿผ ์ €๋Š” ์ด๋งŒ ๋‹ค์Œ ์ฃผ์ฐจ๋กœ ๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!!

profile
์–ธ์  ๊ฐ€ ๋‚ด ์ฝ”๋“œ๋กœ ์„ธ์ƒ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก, BE ๊ฐœ๋ฐœ ๊ธฐ๋ก ๋…ธํŠธโ˜˜๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€