๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐ•์˜ ์ •๋ฆฌ/TDD, ํด๋ฆฐ ์ฝ”๋“œ with Java

TDD, ํด๋ฆฐ ์ฝ”๋“œ with Java (๋ฏธ์…˜ 3, 4 - FP, OOP, ๋ฆฌํŒฉํ„ฐ๋ง)

by ์ฃผ๋ฐœ2 2023. 8. 7.
๋ฐ˜์‘ํ˜•

์„ธ ๋ฒˆ์งธ ๋ฏธ์…˜์ธ ์‚ฌ๋‹ค๋ฆฌ ํƒ€๊ธฐ๋Š” ์ž๋ฐ” 8์˜ ์ŠคํŠธ๋ฆผ, ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•ด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ฃผ๋œ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

๋„ค ๋ฒˆ์งธ ๋ฏธ์…˜์ธ ์ˆ˜๊ฐ•์‹ ์ฒญ์€ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ๋œ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

 

 

์„ธ ๋ฒˆ์งธ ๋ฏธ์…˜์ธ ์‚ฌ๋‹ค๋ฆฌ ํƒ€๊ธฐ์—์„œ ๊ฒฝํ—˜ํ•ด์•ผ ํ•  ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ž๋ฐ” 8์˜ ์ŠคํŠธ๋ฆผ, ๋žŒ๋‹ค๋ฅผ ํ™œ์šฉํ•œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • In -> Out, Out -> In ๋ฐฉ์‹์œผ๋กœ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒฝํ—˜
  • ์ฑ…์ž„ ์ฃผ๋„ ์„ค๊ณ„ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

๋„ค ๋ฒˆ์งธ ๋ฏธ์…˜์ธ ์ˆ˜๊ฐ•์‹ ์ฒญ์—์„œ ๊ฒฝํ—˜ํ•ด์•ผ ํ•  ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง ํ•  ๋•Œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ณดํ˜ธํ•˜๋Š” ๊ฒฝํ—˜
  • Q&A ์„œ๋น„์Šค์˜ ์งˆ๋ฌธ ์‚ญ์ œํ•˜๊ธฐ ๊ธฐ๋Šฅ์˜ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๋Š” ๊ฒฝํ—˜
  • DB ํ…Œ์ด๋ธ”๋ณด๋‹ค ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ TDD ๊ธฐ๋ฐ˜์œผ๋กœ ๋จผ์ € ๊ฐœ๋ฐœํ•ด ๋ณด๋Š” ๊ฒฝํ—˜
  • ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ฆฌํŒฉํ„ฐ๋ง ํ•ด๋ณด๋Š” ๊ฒฝํ—˜

 

 

๋ฏธ์…˜ 3 - ์‚ฌ๋‹ค๋ฆฌํƒ€๊ธฐ(FP, OOP)

 

(IntelliJ) ํŒŒ์ผ ๋์— ๊ฐœํ–‰์„ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ž.

 

์ฑ…์ž„๊ณผ ์—ญํ• ์˜ ์ ์ ˆํ•œ ๋ถ„๋ฆฌ

splitํ•˜๋Š” ์ฑ…์ž„์€ InputView๊ฐ€ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ๋งž์„ ๊ฒƒ ๊ฐ™์•„์š”!
Participants๋Š” List<String>๋งŒ ๋ฐ›์•„์„œ ์ƒ์„ฑํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋„ค์š”

๊ธฐ์กด ์ฝ”๋“œ๋Š” Participants ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž์—์„œ ์ด๋ฆ„์„ ์ž…๋ ฅ๋ฐ›๊ณ  split ํ•˜๋Š” ๋กœ์ง๊นŒ์ง€ ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๋Š”๋ฐ ์ด ์ฑ…์ž„์€ InputView ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ผ€์ด์Šค๋ฅผ ๊ณ ๋ คํ–ˆ์„ ๋•Œ split์ด ์•„๋‹ˆ๊ฑฐ๋‚˜ split์˜ ๊ตฌ๋ถ„์ž(NAME_DELIMITER)๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด ๊ธฐ์กด ์ฝ”๋“œ๋Š” ๋„๋ฉ”์ธ(Participants) ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜์ง€๋งŒ, ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋„๋ฉ”์ธ ๊ฐ์ฒด๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์•„๋‹Œ ์™ธ๋ถ€ ์š”์ธ์œผ๋กœ ์ธํ•ด ๋ณ€๊ฒฝํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ๋ฐ›์€ ์ด๋ฆ„์„ split ํ•˜๋Š” ์—ญํ• ์€ View ํด๋ž˜์Šค์—๊ฒŒ ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.

 

 

ํ˜„์žฌ ์ฝ”๋“œ๋Š” ๋„๋ฉ”์ธ์ด view๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์ถœ๋ ฅ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜์–ด ๋‹ค๋ฅธ ----- ๊ฐ€ ์•„๋‹Œ ~~~~~ ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋„๋ฉ”์ธ์ด ์ˆ˜์ •๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
Line์€ Line ์ƒ์„ฑ์—๋งŒ ์ง‘์ค‘ํ•˜๊ณ  Line์„ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์€ view ํŒจํ‚ค์ง€ ๋‚ด ํด๋ž˜์Šค๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์•„์š”.

์œ„ Participants์™€ ๋™์ผํ•˜๊ฒŒ ๋„๋ฉ”์ธ(Line)์ด View๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

 

ํ…Œ์ŠคํŠธ ๋„ค์ด๋ฐ์˜ ๊ฐ€๋…์„ฑ์„ ๊ณ ๋ คํ•˜๊ธฐ

As-Is)

 

To-Be)

 

 

๋ฏธ์…˜ 4 - ์ˆ˜๊ฐ•์‹ ์ฒญ(๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง)

 

๊ฐ€๋…์„ฑ์ด ์ข‹์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

ํ•ด๋‹น ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋“ค์„ ์•Œ์•„๋ด์•ผ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์–ด์š”.
๊ฐ€๋™์„ฑ์ด ์ข‹์€ ๊ตฌ์กฐ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•ด๋ณด๋Š”๊ฒƒ๋„ ์ข‹์€ ๊ฒฝํ—˜์ผ๊ฒƒ ๊ฐ™์•„์š”.

 

 

์—ฐ๊ด€๋œ ์ƒํƒœ๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด(VO) ๋„์ถœํ•˜๊ธฐ

์—ฐ๊ด€๋œ ์ƒํƒœ๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋„์ถœํ•ด๋‚ผ์ˆ˜ ์—†์„๊นŒ์š”?
๊ทธ๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ๊ฐฏ์ˆ˜๋„ ์ค„์–ด๋“ค๊ฒƒ ๊ฐ™๊ตฌ์š”.

 

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€