ํ”„๋กœ๊ทธ๋ž˜๋ฐ

[TIL] ํด๋ฆฐ์ฝ”๋“œ(Clean Code) - 9์žฅ. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

2022. 3. 5. 21:00
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ์˜ค๋Š˜ TIL 3์ค„ ์š”์•ฝ

  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋Šฅ๋ ฅ์ด ๋–จ์–ด์ง€๋ฉฐ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋Šฅ๋ ฅ๋„ ๋–จ์–ด์ง„๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์ตœ์†Œ์˜ ํ‘œํ˜„์œผ๋กœ ๋งŽ์€ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด์•ผ ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜ ํ•˜๋‚˜๋Š” ๊ฐœ๋… ํ•˜๋‚˜๋งŒ ํ…Œ์ŠคํŠธํ•˜๋ผ.

๐Ÿ“† TIL (Today I Learned) ๋‚ ์งœ

2022.03.05

๐Ÿ“š ์˜ค๋Š˜ ์ฝ์€ ๋ฒ”์œ„

9์žฅ. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

๐Ÿ“ ์ฑ…์—์„œ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

  • TDD ๋ฒ•์น™ ์„ธ ๊ฐ€์ง€
    • ์‹คํŒจํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๊นŒ์ง€ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์ปดํŒŒ์ผ์€ ์‹คํŒจํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‹คํ–‰์ด ์‹คํŒจํ•˜๋Š” ์ •๋„๋กœ๋งŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
    • ํ˜„์žฌ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ •๋„๋กœ๋งŒ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ• ์ˆ˜๋ก ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ• ์ˆ˜๋ก ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฌ๊ธฐ ์‹ญ์ƒ์ด๋‹ค. ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด ๊ธฐ์กด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด, ์ง€์ €๋ถ„ํ•œ ์ฝ”๋“œ๋กœ ์ธํ•ด, ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ ์  ๋” ํ†ต๊ณผ์‹œํ‚ค๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. ๊ทธ๋ž˜์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๊ณ„์†ํ•ด์„œ ๋Š˜์–ด๋‚˜๋Š” ๋ถ€๋‹ด์ด ๋ผ๋ฒ„๋ฆฐ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‹ค์ œ ์ฝ”๋“œ ๋ชป์ง€ ์•Š๊ฒŒ ์ค‘์š”ํ•˜๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์ด๋ฅ˜ ์‹œ๋ฏผ์ด ์•„๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‚ฌ๊ณ ์™€ ์„ค๊ณ„์™€ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์‹ค์ œ ์ฝ”๋“œ ๋ชป์ง€ ์•Š๊ฒŒ ๊นจ๋—ํ•˜๊ฒŒ ์งœ์•ผ ํ•œ๋‹ค.
  • ์ฝ”๋“œ์— ์œ ์—ฐ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฒ„ํŒ€๋ชฉ์ด ๋ฐ”๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋‹ค. ์ด์œ ๋Š” ๋‹จ์ˆœํ•˜๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๋ณ€๊ฒฝ์ด ๋‘๋ ต์ง€ ์•Š์œผ๋‹ˆ๊นŒ! ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†๋‹ค๋ฉด ๋ชจ๋“  ๋ณ€๊ฒฝ์ด ์ž ์ •์ ์ธ ๋ฒ„๊ทธ๋‹ค. ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์•„๋ฌด๋ฆฌ ์œ ์—ฐํ•˜๋”๋ผ๋„, ์„ค๊ณ„๋ฅผ ์•„๋ฌด๋ฆฌ ์ž˜ ๋‚˜๋ˆด๋”๋ผ๋„, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†์œผ๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ๋ณ€๊ฒฝ์„ ์ฃผ์ €ํ•œ๋‹ค. ๋ฒ„๊ทธ๊ฐ€ ์ˆจ์–ด๋“ค๊นŒ ๋‘๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋Šฅ๋ ฅ์ด ๋–จ์–ด์ง€๋ฉฐ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋Šฅ๋ ฅ๋„ ๋–จ์–ด์ง„๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ• ์ˆ˜๋ก ์‹ค์ œ ์ฝ”๋“œ๋„ ์ง€์ €๋ถ„ํ•ด์ง„๋‹ค. ๊ฒฐ๊ตญ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฌ๊ณ  ์‹ค์ œ ์ฝ”๋“œ๋„ ๋ง๊ฐ€์ง„๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋ ค๋ฉด ์—ฌ๋А ์ฝ”๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ช…๋ฃŒ์„ฑ, ๋‹จ์ˆœ์„ฑ, ํ’๋ถ€ํ•œ ํ‘œํ˜„๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์ตœ์†Œ์˜ ํ‘œํ˜„์œผ๋กœ ๋งŽ์€ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด์•ผ ํ•œ๋‹ค.
  • BUILD - OPERATE - CHECK ํŒจํ„ด
    • BUILD : ํ…Œ์ŠคํŠธ ์ž๋ฃŒ๋ฅผ ๋งŒ๋“ ๋‹ค.
    • OPERATE : ํ…Œ์ŠคํŠธ ์ž๋ฃŒ๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค.
    • CHECK : ์กฐ์ž‘ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•œ๋‹ค.
  • ๋„๋ฉ”์ธ์— ํŠนํ™”๋œ ์–ธ์–ด(DSL)๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํ”ํžˆ ์“ฐ๋Š” ์‹œ์Šคํ…œ ์กฐ์ž‘ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  API ์œ„์—๋‹ค ํ•จ์ˆ˜์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๊ตฌํ˜„ํ•œ ํ›„ ๊ทธ ํ•จ์ˆ˜์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ๋„ ์ฝ๊ธฐ๋„ ์‰ฌ์›Œ์ง„๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ˆ˜ API๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‹น์‚ฌ์ž์™€ ๋‚˜์ค‘์— ํ…Œ์ŠคํŠธ๋ฅผ ์ฝ์–ด๋ณผ ๋…์ž๋ฅผ ๋„์™€์ฃผ๋Š” ํ…Œ์ŠคํŠธ ์–ธ์–ด๋‹ค.
  • ์ด์ค‘ ํ‘œ์ค€ : ์‹ค์ œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ ˆ๋Œ€๋กœ ์•ˆ ๋˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ์ „ํ˜€ ๋ฌธ์ œ์—†๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค. ๋Œ€๊ฐœ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ CPU ํšจ์œจ๊ณผ ๊ด€๋ จ ์žˆ๋Š” ๊ฒฝ์šฐ๋‹ค. ์ฝ”๋“œ์˜ ๊นจ๋—ํ•จ๊ณผ๋Š” ์ฒ ์ €ํžˆ ๋ฌด๊ด€ํ•˜๋‹ค.
  • ํ…Œ์ŠคํŠธ๋‹น assert ํ•˜๋‚˜ : ์ด๊ฒƒ์ €๊ฒƒ ์žก๋‹คํ•œ ๊ฐœ๋…์„ ์—ฐ์†์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ธด ํ•จ์ˆ˜๋Š” ํ”ผํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ๋…์„ ํ•œ ํ•จ์ˆ˜๋กœ ๋ชฐ์•„๋„ฃ์œผ๋ฉด ๋…์ž๊ฐ€ ๊ฐ ์ ˆ์ด ๊ฑฐ๊ธฐ์— ์กด์žฌํ•˜๋Š” ์ด์œ ์™€ ๊ฐ ์ ˆ์ด ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฐœ๋…์„ ๋ชจ๋‘ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ๊ทœ์น™์€ "๊ฐœ๋… ๋‹น assert ๋ฌธ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์ค„์—ฌ๋ผ"์™€ "ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜ ํ•˜๋‚˜๋Š” ๊ฐœ๋… ํ•˜๋‚˜๋งŒ ํ…Œ์ŠคํŠธํ•˜๋ผ"๋ผ ํ•˜๊ฒ ๋‹ค.
  • ๊นจ๋—ํ•œ ํ…Œ์ŠคํŠธ์˜ ๋‹ค์„ฏ ์ž๊ธฐ ๊ทœ์น™ F.I.R.S.T
    • FAST(๋น ๋ฅด๊ฒŒ) : ํ…Œ์ŠคํŠธ๋Š” ๋นจ๋ฆฌ ๋Œ์•„์•ผ ํ•œ๋‹ค.
    • Independent(๋…๋ฆฝ์ ์œผ๋กœ) : ๊ฐ ํ…Œ์ŠคํŠธ๋Š” ์„œ๋กœ ์˜์กดํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋‹ค์Œ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋  ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
    • Repeatable(๋ฐ˜๋ณต๊ฐ€๋Šฅํ•˜๊ฒŒ) : ํ…Œ์ŠคํŠธ๋Š” ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ๋„ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•œ ์ด์œ ๋ฅผ ๋‘˜๋Ÿฌ๋Œˆ ๋ณ€๋ช…์ด ์ƒ๊ธด๋‹ค.
    • Self-Validating(์ž๊ฐ€๊ฒ€์ฆํ•˜๋Š”) : ํ…Œ์ŠคํŠธ๋Š” ๋ถ€์šธ(bool) ๊ฐ’์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์•ผ ํ•œ๋‹ค. ์„ฑ๊ณต ์•„๋‹ˆ๋ฉด ์‹คํŒจ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์Šค์Šค๋กœ ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฐ€๋Š ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฉด ํŒ๋‹จ์€ ์ฃผ๊ด€์ ์ด ๋˜๋ฉฐ ์ง€๋ฃจํ•œ ์ˆ˜์ž‘์—… ํ‰๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค.
    • Timely(์ ์‹œ์—) : ํ…Œ์ŠคํŠธ๋Š” ์ ์‹œ์— ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ง์ „์— ๊ตฌํ˜„ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ API๋ฅผ ๊ตฌํ˜„ํ•ด ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด(Domain Specific Language, DSL)๋ฅผ ๋งŒ๋“ค์ž. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ๋งŒํผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋ฐฉ์น˜๋˜์–ด ๋ง๊ฐ€์ง€๋ฉด ์‹ค์ œ ์ฝ”๋“œ๋„ ๋ง๊ฐ€์ง„๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•˜์ž.

๐Ÿ˜€ ์˜ค๋Š˜ ์ฝ์€ ์†Œ๊ฐ ๋ฐ ๋– ์˜ค๋ฅด๋Š” ์ƒ๊ฐ

  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ œ๋Œ€๋กœ ์ž‘์„ฑํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณธ์ ์ด ์—†๋‹ค. ๊ทธ์ € ์‚ฐ์ถœ๋ฌผ๋กœ ์ž‘์„ฑํ•ด๋‘” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฌธ์„œ๋งŒ ๋ณด๊ณ  ํ™”๋ฉด์—์„œ ๋ˆŒ๋Ÿฌ๋ณธ ํ…Œ์ŠคํŠธ๊ฐ€ ์ „๋ถ€๋‹ค.
  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ง์ „์— ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ๋ชฐ๋ž๋‹ค๋ฉด ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ์ž‘์„ฑํ•˜๊ณ  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์„ ๊ฒƒ์ด๋‹ค.
  • TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ) ๋ง๋งŒ ๋งŽ์ด ๋“ค์–ด๋ดค์ง€ ์‹ค์ œ๋กœ ํ•ด๋ณธ์ ์ด ์—†๋‹ค. ํ˜„์žฌ ์‹œ์ž‘๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ผญ TDD๋ฅผ ์ ์šฉ์‹œ์ผœ๋ด์•ผ๊ฒ ๋‹ค.

๐Ÿค” ๊ถ๊ธˆํ•œ ๋‚ด์šฉ ๋ฐ ์ž˜ ์ดํ•ด๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ

  • TDD๋ฅผ ํ•ด๋ณด์ง€ ์•Š์•„์„œ TDD๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋–ค ํšจ๊ณผ๊ฐ€ ์žˆ์„์ง€๊ฐ€ ๊ฐ€์žฅ ๊ถ๊ธˆํ•˜๋‹ค. ๊ผญ ์‹คํ–‰์— ์˜ฎ๊ฒจ๋ด์•ผ์ง€!

๐Ÿ”Ž ์˜ค๋Š˜ ์ฝ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ TIL

๋ฐ˜์‘ํ˜•