๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- ๊ธฐํƒ€

[๊ฐœ๋ฐœ์ž ์ฑ…์ฝ๊ธฐ] ํด๋ฆฐ ์ฝ”๋“œ-์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  (3์žฅ ํ•จ์ˆ˜)

by Wonit 2022. 2. 13.

ํ•ด๋‹น ๊ธ€์€ Robert C.Martin ํด๋ฆฐ ์ฝ”๋“œ ๋ผ๋Š” ์ฑ…์„ ์ฝ๊ณ  ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌ ๋ฐ ํšŒ๊ณ ํ•˜๋Š” ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌํ•ญ์€ YES 24 ํด๋ฆฐ ์ฝ”๋“œ - ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

 

ํด๋ฆฐ ์ฝ”๋“œ - ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  (Uncle Bob)

 

  • ์œ„ํ‚ค๋ถ์Šค
  • ์ง€์€์ด: Robert C.Martin (Uncle Bob)
  • ์˜ฎ๊ธด์ด: ๋ฐ•์žฌํ˜ธ, ์ดํ•ด์˜

 

 


 

์ด๋ฒˆ ์žฅ์—์„œ ์ด์•ผ๊ธฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ

 

์ด๋ฒˆ ์žฅ์—์„œ๋Š” ์ข‹์€ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ด์•ผ๊ฐ€๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค.

 

ํ•จ์ˆ˜๋Š” ํ•œ ๊ฐ€์ง€๋ฅผ ํ•ด์–‘ํ•œ๋‹ค. ๊ทธ ํ•œ ๊ฐ€์ง€๋ฅผ ์ž˜ ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ํ•œ ๊ฐ€์ง€๋งŒ์„ ํ•ด์•ผํ•œ๋‹ค.

 

์ž‘๊ฒŒ ๋งŒ๋“ค๊ณ  ํ•œ ๋ฒˆ์— ํ•œ ๊ฐ€์ง€๋งŒ ํ•ด๋ผ

 

  • ํ•œ ํ•จ์ˆ˜๋Š” 6 ~ 7 ์ค„ ์ •๋„๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์ค‘์ฒฉ๋œ if / while / for ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • ๊ทธ๋ž˜์•ผ ์ฝ๊ธฐ ํŽธํ•ด์ง€๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.
  • ํ•œ ๊ฐ€์ง€๋งŒ ํ•ด๋ผ
    • ํ•จ์ˆ˜๋Š” ํ•œ ๊ฐ€์ง€๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ํ•œ ๊ฐ€์ง€๋ฅผ ์ž˜ ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ํ•œ ๊ฐ€์ง€๋งŒ์„ ํ•ด์•ผ ํ•œ๋‹ค.
  • ํ•จ์ˆ˜ ๋‹น ์ถ”์ƒํ™” ์ˆ˜์ค€์€ ํ•˜๋‚˜๋กœ
    • ํ•จ์ˆ˜๊ฐ€ ํ™•์‹คํžˆ ํ•œ ๊ฐ€์ง€๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•จ์ˆ˜ ๋‚ด ๋ชจ๋“  ๋ฌธ์žฅ์˜ ์ถ”์ƒํ™” ์ˆ˜์ค€์ด ๋™์ผํ•ด์•ผ ํ•จ
      • render() ๋Š” ๋†’์€ ์ถ”์ƒํ™”
      • Http.get(uri) ๋Š” ์ค‘๊ฐ„ ์ถ”์ƒํ™”
      • String.valueOf("abs"); ๋Š” ๋‚ฎ์€ ์ถ”์ƒํ™”ใ„ด
    • ํ•œ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ถ”์ƒํ™” ์ˆ˜์ค€์ด ์„ž์—ฌ์žˆ์œผ๋ฉด ์ฝ๋Š” ์‚ฌ๋žŒ์ด ํ—ท๊ฐˆ๋ฆผ

 

์„œ์ˆ ์ ์ธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด๋ผ

 

  • ์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ์ง์ž‘ํ–ˆ๋˜ ๊ธฐ๋Šฅ์„ ๊ฐ ๋ฃจํ‹ด์ด ๊ทธ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด ๊นจ๊ฟ‹ํ•œ ์ฝ”๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค๋Š” ์›Œ๋“œ์˜ ๋ง
  • ์ด๋ฆ„์ด ์งง๊ณ  ์–ด๋ ค์šด ์ด๋ฆ„๋ณด๋‹ค ์„œ์ˆ ์  ์ด๋ฆ„์ด ๋” ์ข‹๋‹ค
  • ์ด๋ฆ„์„ ์ •ํ•˜๋Š๋ผ ์‹œ๊ฐ„์„ ๋“ค์—ฌ๋„ ๊ดœ์ฐฎ๋‹ค

 

ํ•จ์ˆ˜ ์ธ์ˆ˜

 

  • ๊ด€์ ์— ๋”ฐ๋ผ
    • ๊ฐ€๋…์„ฑ์˜ ๊ด€์ 
      • ์ด์ƒ์ ์ธ ํ•จ์ˆ˜ ์ธ์ˆ˜๋Š” 0๊ฐœ ์ด๋ฉฐ 1, 2, 3 ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ„๋‹ค
      • ์ฝ๋Š” ์‚ฌ๋žŒ์€ void convert(String a, char[] b) ๋ณด๋‹ค void convert() ๊ฐ€ ๋” ์ง๊ด€์ ์ด๋‹ค
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๊ด€์ 
      • ์ธ์ˆ˜๊ฐ€ 3๊ฐœ๋ผ๋ฉด ๊ทธ ๋งŒํผ ์กฐํ•ฉํ•ด์•ผํ•  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.
  • ์ตœ์„ ์€ ์ธ์ˆ˜๊ฐ€ 0๊ฐœ, ์ฐจ์„ ์€ ์ธ์ˆ˜๊ฐ€ 1๊ฐœ
  • ํ”Œ๋ž˜๊ทธ ์ธ์ˆ˜๋Š” ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ํ•œ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋งค์šฐ ์ข‹์ง€ ์•Š๋‹ค.
    • true ๋ฉด ์ด๊ฒƒ์„ ํ•˜๊ณ  false ๋ฉด ์ €๊ฒƒ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ๋™์‚ฌ์™€ ํ‚ค์›Œ๋“œ๋ฅผ ์กฐํ•ฉํ•˜๋ผ

 

๋ช…๋ น๊ณผ ์กฐํšŒ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ผ + ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ณด๋‹ค๋Š” ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

 

  • ํ•จ์ˆ˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ฌด์–ธ๊ฐ€์—๊ฒŒ ๋‹ตํ•˜๊ฑฐ๋‚˜! ๋‘˜ ์ค‘์— ํ•˜๋‚˜๋งŒ ํ•ด์•ผ ํ•œ๋‹ค.
  • ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ช…๋ น๊ณผ ์กฐํšŒ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•œ๋‹ค.
    • ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๋ช…์‹œํ•˜๊ณ  ๊ฐœ๋ฐœํ–ˆ๋‹ค๋ฉด ์–ด๋””์„ ๊ฐ€๋Š” ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ์–ด๋””์„œ๋Š” import ํ•œ๋‹ค๋Š” ๋œป
    • ๊ทธ๋Ÿผ ์˜ค๋ฅ˜ ์ฝ”๋“œ ์ •์˜๊ฐ€ ๋ฐ”๋€๋‹ค๋ฉด ๊ทธ๋ฅผ import ํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ์—์„œ ์˜์กด์ด ์ƒ๊ฐ€๊ฒŒ ๋˜๊ณ  compile ์— ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋จ -> ์ด๋ฅผ ์˜์กด์„ฑ ์ž์„์ด๋ผ๊ณ  ํ‘œํ˜„
  • ์ฆ‰, Try-Catch ๋ธ”๋Ÿญ์„ ์ด์šฉํ•˜์ž
    • ์œ„์—์„œ ๋งํ•œ ์˜์กด์„ฑ ์ž์„์„ ๋Š์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์ƒˆ๋กœ์šด ์˜ˆ์™ธ๋Š” Exception ์—์„œ ํŒŒ์ƒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ ์˜ˆ์™ธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„ ์˜์กด์„ฑ ์ž์„์ด ๋Š๊ธฐ๊ฒŒ ๋จ

 

ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์งค ๊ฒƒ์ธ๊ฐ€?

 

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

 

๊ฒฐ๋ก 

 

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

 

๋‚˜์˜ ํ•ด์„๊ณผ ํšŒ๊ณ 

 

ํ•จ์ˆ˜ ์ธ์ˆ˜๋ฅผ ์ฝ๊ณ  ์žˆ์œผ๋‹ˆ ์‚ฌ๋‚ด์—์„œ ํŒ€ ๋ฆฌ๋”๊ฐ€ ํ–ˆ์—ˆ๋˜ ๋ง์ด ์ƒ๊ฐ์ด ๋‚ฌ๋‹ค.


Test Code ๋ฅผ ๋ณด๋‹ค๊ฐ€ assertEquals() ๊ณผ assertThat().isEqualTo() ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ์™œ ์ „์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ›„์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ํ–ˆ์—ˆ๋‹ค.

 

๋ฆฌ๋”๋Š” ๋‚˜์—๊ฒŒ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ผ๊ณ  ๋‹ต๋ณ€ํ–ˆ๋˜ ๊ฒƒ์ด ์ƒ๊ฐ์ด ๋‚ฌ๋‹ค.


๊ทธ ๋‹น์‹œ์—๋Š” ์–ด๋–ค ๋ง์ธ์ง€ ์ •ํ™•ํžˆ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•˜์ง€๋งŒ ์ด์ œ์•ผ ์•Œ๊ฒƒ ๊ฐ™๋‹ค.

 

assertEquals() ๋Š” ์ •ํ™•ํžˆ assertEquals(expected, actual) ์ด๋‹ค

 

assertEquals()๋Š” 2๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋ฐ, 2๊ฐœ์˜ ์ธ์ž ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ํ•ด๋‹น ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ์‚ฌ๋žŒ์œผ๋กœ ํ•˜์—ฌ๊ธˆ ํ˜ผ๋™์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค.

 

๊ทธ๋ž˜์„œ ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” assertExpectedEqualsActual(expected, actual) ์ฒ˜๋Ÿผ ๋™์‚ฌ์™€ ํ‚ค์›Œ๋“œ๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๋„ค์ด๋ฐ์ด ๋” ์ ์ ˆํ•˜๋‹ค๊ณ  ๋ณด๊ณ , ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ Chaining ์„ ํ†ตํ•ด assertThat().isEqualTo() ์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋œ๋‹ค.

 

๋Œ“๊ธ€