๋ฐ์—”์œผ๋กœ ์„ฑ์žฅ์ค‘ ๐ŸŒฑ

์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 5๊ธฐ ๋ฐฑ์—”๋“œ ํ”„๋ฆฌ์ฝ”์Šค

[์šฐํ…Œ์ฝ” 5๊ธฐ ํ”„๋ฆฌ์ฝ”์Šค] ํ”ผ๋“œ๋ฐฑ ์ •๋ฆฌ

์จ๋ฐ 2022. 11. 25. 22:33
(* ํ”ผ๋“œ๋ฐฑ์˜ ์ „๋ฌธ์ด ์•„๋‹Œ, ์ผ๋ถ€๋ฅผ ๋ฐœ์ทŒํ•˜์—ฌ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.)

๐Ÿ“Œ ์ •๋ฆฌ ๋‚ด์šฉ

- 1์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ
- 2์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ
- 3์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ

๐ŸŽฏ ์ •๋ฆฌ ๋ชฉ์ 
๊ณต๋ถ€ํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ๋ฐฉํ–ฅ์„ฑ์„ ์žก๊ณ , ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ํ•™์Šต์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•จ.
- ๋ฏธ์…˜ ๊ตฌํ˜„์—์„œ ๋†“์นœ ๋ถ€๋ถ„์„ ํ™•์ธํ•˜๊ณ  ๋ณด์™„ํ•˜์ž.

- ํ”ผ๋“œ๋ฐฑ๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋œ ์ž๋ฃŒ๋ฅผ ๋ณต์Šตํ•˜์ž.

 


[ 1๏ธโƒฃ 1์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ ]

- ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์˜๋ฏธ ์žˆ๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ํ•ด๋‹น ์ปค๋ฐ‹์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ž‘์„ฑํ•˜์ž.

 

- ์ด๋ฆ„์„ ํ†ตํ•ด ์˜๋„๋ฅผ ๋“œ๋Ÿฌ๋‚ธ๋‹ค

์—ฐ์†๋œ ์ˆซ์ž๋ฅผ ๋ง๋ถ™์ด๊ฑฐ๋‚˜(a1, a2, ..., aN), ๋ถˆ์šฉ์–ด(Info, Data, a, an, the)๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์€ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.

์ด๋ฆ„์„ ํ†ตํ•ด ๋ณ€์ˆ˜์˜ ์—ญํ• , ํ•จ์ˆ˜์˜ ์—ญํ• , ํด๋ž˜์Šค์˜ ์—ญํ• ์— ๋Œ€ํ•œ ์˜๋„๋ฅผ ๋“œ๋Ÿฌ๋‚ด๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜์ž.

 

- ์ถ•์•ฝํ•˜์ง€ ์•Š๋Š”๋‹ค

ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ํ•œ ๋‘ ๋‹จ์–ด๋กœ ์œ ์ง€ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ๋ฌธ๋งฅ์„ ์ค‘๋ณตํ•˜๋Š” ์ด๋ฆ„์„ ์ž์ œํ•˜์ž.(๊ฐ์ฒด ์ง€ํ–ฅ ์ƒํ™œ ์ฒด์กฐ ์›์น™ 5)

 

- IDE์˜ ์ฝ”๋“œ ์ž๋™ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•œ๋‹ค

๋†“์นœ ๊ณต๋ฐฑ๋„ ์žก์•„์ฃผ์–ด ๋” ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

- Java์—์„œ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ ๊ทน ํ™œ์šฉํ•œ๋‹ค

ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ)๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ ์ „์— Java API์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ธ์ง€ ๊ฒ€์ƒ‰์„ ๋จผ์ € ํ•ด๋ณด์ž.

Ex: List์—์„œ join

 

- ๋ฐฐ์—ด ๋Œ€์‹  Java Collection์„ ์‚ฌ์šฉํ•œ๋‹ค

Java Collection ์ž๋ฃŒ๊ตฌ์กฐ(List, Set, Map ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ๋‹ค์–‘ํ•œ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Ex: List์—์„œ contains

 


[ 2๏ธโƒฃ 2์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ ]

- README.md๋ฅผ ์ƒ์„ธํžˆ ์ž‘์„ฑํ•œ๋‹ค

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋– ํ•œ ํ”„๋กœ์ ํŠธ์ด๋ฉฐ, ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๋‹ด๊ณ  ์žˆ๋Š”์ง€ ๊ธฐ์ˆ ํ•˜์ž.

 

- ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์žฌ๊ฒ€ํ† ํ•œ๋‹ค

๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ํด๋ž˜์Šค ์„ค๊ณ„์™€ ๊ตฌํ˜„, ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ) ์„ค๊ณ„์™€ ๊ตฌํ˜„๊ณผ ๊ฐ™์ด ๋„ˆ๋ฌด ์ƒ์„ธํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ •์ƒ์ ์ธ ๊ฒฝ์šฐ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ๋„ ๊ธฐ๋Šฅ ๋ชฉ๋ก์— ์ •๋ฆฌํ•œ๋‹ค.

 

- ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค

์‹œ์ž‘ํ•  ๋•Œ ๋ชจ๋“  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ •๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ถ€๋‹ด์„ ๊ฐ€์ง€๊ธฐ๋ณด๋‹ค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋ฌธ์„œ๋ฅผ ๊ณ„์† ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

์ฃฝ์€ ๋ฌธ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ด์•„์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค.

 

- ๊ฐ’์„ ํ•˜๋“œ ์ฝ”๋”ฉํ•˜์ง€ ์•Š๋Š”๋‹ค

์ƒ์ˆ˜(static final)๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฆ„์„ ๋ถ€์—ฌํ•ด ์ด ๋ณ€์ˆ˜์˜ ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ์˜๋„๋ฅผ ๋“œ๋Ÿฌ๋‚ด์ž.

 

- ๊ตฌํ˜„ ์ˆœ์„œ๋„ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์ด๋‹ค

ํด๋ž˜์Šค๋Š” ์ƒ์ˆ˜, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜, ์ƒ์„ฑ์ž, ๋ฉ”์„œ๋“œ ์ˆœ์œผ๋กœ ์ž‘์„ฑํ•˜์ž.

 

- ๋ณ€์ˆ˜ ์ด๋ฆ„์— ์ž๋ฃŒํ˜•์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค

๋ณ€์ˆ˜ ์ด๋ฆ„์— ์ž๋ฃŒํ˜•, ์ž๋ฃŒ ๊ตฌ์กฐ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž.

 

- ํ•œ ํ•จ์ˆ˜๊ฐ€ ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋งŒ ๋‹ด๋‹นํ•˜๊ฒŒ ํ•œ๋‹ค

ํ•จ์ˆ˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ง„๋‹ค๋ฉด ํ•œ ํ•จ์ˆ˜์—์„œ ์—ฌ๋Ÿฌ ์ผ์„ ํ•˜๋Š” ๊ฒฝ์šฐ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋‹ˆ ์ž˜ ํ™•์ธํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•ด๋ณด์ž.

ํ•จ์ˆ˜ ๊ธธ์ด๋Š” 10-15๋ผ์ธ์œผ๋กœ ์ž‘์„ฑํ•ด๋ณด์ž.

 

- ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ๋ณธ์ธ์˜ ๊ฒฝํ—˜์„ ํ† ๋Œ€๋กœ ์ •๋ฆฌํ•ด๋ณธ๋‹ค

ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋‚˜์˜ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋น ๋ฅด๊ฒŒ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ํ•™์Šต ๋„๊ตฌ๋กœ๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- ์ฒ˜์Œ๋ถ€ํ„ฐ ํฐ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค

ํ…Œ์ŠคํŠธ์˜ ์ค‘์š”ํ•œ ๋ชฉ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋‚ด๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋น ๋ฅด๊ฒŒ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค.

๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ๋‚˜๋ˆ„๊ณ , ๊ทธ ์ค‘ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ๊ฐ€๊นŒ์šด ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ž‘๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ„๋‹ค.

 

+ ) ํ”ผ๋“œ๋ฐฑ ์ฒจ๋ถ€ ์ž๋ฃŒ ๊ณต๋ถ€ ๋ฐ ์ •๋ฆฌ

๋”๋ณด๊ธฐ

1) '์ˆซ์ž ์•ผ๊ตฌ with ์ž๋ฐ” ๊ธฐ์ดˆ ๊ฐ•์˜' ์ •๋ฆฌ

    ๋…ธ์…˜์— ์ •๋ฆฌํ•œ ๊ฒƒ ๋‹ค์‹œ ๋ณต์Šต ๊ฒธ ์ •๋ฆฌ
2) 'ํ•™์Šตํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด JUnit ํ•™์Šตํ•˜๊ธฐ' PDF ์ •๋ฆฌ

    assertj: contains(), containsExactly()

    JUnit: @DisplayName, @ParameterizedTest, @CsvSource

    ์œ„์ฃผ๋กœ ์ •๋ฆฌ

 


[ 3๏ธโƒฃ 3์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ ]

- ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ) ๋ผ์ธ์— ๋Œ€ํ•œ ๊ธฐ์ค€

main() ํ•จ์ˆ˜์—๋„ ํ•ด๋‹น๋˜๊ณ , ๊ณต๋ฐฑ ๋ผ์ธ๋„ ํ•œ ๋ผ์ธ์— ํ•ด๋‹นํ•˜๋‹ˆ ์กฐ์‹ฌํ•˜์ž.

 

- ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•œ๋‹ค

์˜ˆ์™ธ ์ƒํ™ฉ์„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ณ ๋ฏผํ•ด ๋ณด๊ณ  ์ด์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜์ž.

 

- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค

๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™์— ์œ„๋ฐฐ๋˜์ง€ ์•Š๋„๋ก ํ•˜์ž.

๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•œ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ์„ฑ๊ฒฉ์ด ๊ฐ•ํ•˜๋‹ค๋ฉด toString()์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜์ž.

View์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ผ๋ฉด getter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

 

- ์—ฐ๊ด€์„ฑ์ด ์žˆ๋Š” ์ƒ์ˆ˜๋Š” static final ๋Œ€์‹  enum์„ ํ™œ์šฉํ•œ๋‹ค

 

- final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’์˜ ๋ณ€๊ฒฝ์„ ๋ง‰๋Š”๋‹ค

์ž๋ฐ”์˜ final ํ‚ค์›Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ’์˜ ๋ณ€๊ฒฝ์„ ๋ง‰๋„๋ก ํ•˜์ž.

 

- ๊ฐ์ฒด์˜ ์ƒํƒœ ์ ‘๊ทผ์„ ์ œํ•œํ•œ๋‹ค

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ์ ‘๊ทผ ์ œ์–ด์ž๋Š” private๋กœ ๊ตฌํ˜„ํ•˜์ž.

 

- ๊ฐ์ฒด๋Š” ๊ฐ์ฒด์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค

์ƒํƒœ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ get์œผ๋กœ ๊บผ๋‚ด์ง€ ๋ง๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋˜์ง€๋„๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๊ฐ€ ์ผํ•˜๋„๋ก ํ•˜์ž.

+ ) ํ”ผ๋“œ๋ฐฑ ์ฒจ๋ถ€ ์ž๋ฃŒ ๊ณต๋ถ€ ๋ฐ ์ •๋ฆฌ

๋”๋ณด๊ธฐ

1) 'getter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๊ฐ์ฒด์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์ž' ์ •๋ฆฌํ•˜๊ธฐ

https://tecoble.techcourse.co.kr/post/2020-04-28-ask-instead-of-getter/

 

- ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)์˜ ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค

ํ•„๋“œ์— ์ค‘๋ณต์ด ์žˆ๊ฑฐ๋‚˜, ๋ถˆํ•„์š”ํ•œ ํ•„๋“œ๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•ด ํ•„๋“œ์˜ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜์ž.

 

- ์„ฑ๊ณตํ•˜๋Š” ์ผ€์ด์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ผ€์ด์Šค๋„ ํ…Œ์ŠคํŠธํ•œ๋‹ค

ํŠนํžˆ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฒฐํ•จ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜๋Š” ๊ฒฝ๊ณ„๊ฐ’์ด๋ฏ€๋กœ ์ด ๋ถ€๋ถ„์„ ๊ผผ๊ผผํ•˜๊ฒŒ ํ™•์ธํ•˜์ž.

 

- ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ์ฝ”๋“œ๋‹ค

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ์ฝ”๋“œ์ด๋ฏ€๋กœ ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ†ตํ•ด ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€์ž.

ํŠนํžˆ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก, @ValuseSource์™€ @ParameterizedTest๋ฅผ ์‚ฌ์šฉํ•˜์ž.

 

- ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

์ฃผ์‹  ์˜ˆ์‹œ ์ด๋ฏธ์ง€๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด๊ณ , ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์„ ํด๋ž˜์Šค ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์‹œ๋„๋ฅผ ํ•ด๋ณด์ž.

+ ) ํ”ผ๋“œ๋ฐฑ ์ฒจ๋ถ€ ์ž๋ฃŒ ๊ณต๋ถ€ ๋ฐ ์ •๋ฆฌ

๋”๋ณด๊ธฐ

1) '๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹์€ ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค๊ธฐ' ์ •๋ฆฌํ•˜๊ธฐ

https://tecoble.techcourse.co.kr/post/2020-05-07-appropriate_method_for_test_by_parameter/