๐Ÿ“Book

ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) ์š”์•ฝ

yujch 2024. 2. 29. 01:58
๋ฐ˜์‘ํ˜•

Clean Code - ๋กœ๋ฒ„ํŠธ C.๋งˆํ‹ด
 

์›Œ๋‚™ ์œ ๋ช…ํ•œ ์ฑ…์ด๊ธฐ๋„ ํ•˜๊ณ , ์–ธ์  ๊ฐ„ ์ฝ์–ด๋ด์•ผ์ง€ ํ•˜๊ณ  ๋ฌตํ˜€๋’€๋˜ ์ฑ…์„ ์™„๋…ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
 
 

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

- TDD : ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์ „์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์งœ๋Š” ๋ฐฉ์‹
 
- TDD ๋ฒ•์น™
1. ์‹คํŒจํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๊นŒ์ง€ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
2. ์ปดํŒŒ์ผ์€ ์‹คํŒจํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‹คํ–‰์ด ์‹คํŒจํ•˜๋Š” ์ •๋„๋กœ๋งŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
3. ํ˜„์žฌ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ •๋„๋กœ๋งŒ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
 
- ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‹ค์ œ ์ฝ”๋“œ ๋ชป์ง€ ์•Š๊ฒŒ ๊นจ๋—ํ•˜๊ฒŒ ์งœ์•ผ ํ•œ๋‹ค.
- ์ฝ”๋“œ์— ์œ ์—ฐ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฒ„ํŒ€๋ชฉ์ด ๋ฐ”๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์ด๋‹ค.
- ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๋ณ€๊ฒฝ์ด ์‰ฌ์›Œ์ง„๋‹ค.
- ๋‹จ์ผ assert ๋ฌธ ๊ทœ์น™ ๊ถŒ์žฅ (ํ•จ์ˆ˜๋งˆ๋‹ค assert๋ฌธ์„ ๋‹จ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ) => ์ ์„์ˆ˜๋ก ์ข‹๋‹ค.
- ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜ ํ•˜๋‚˜๋Š” ๊ฐœ๋… ํ•˜๋‚˜๋งŒ ํ…Œ์ŠคํŠธํ•˜๋ผ
 
- F.I.R.S.T : ๊นจ๋—ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ทœ์น™

  • ๋น ๋ฅด๊ฒŒ(Fast) : ํ…Œ์ŠคํŠธ๋Š” ๋นจ๋ฆฌ ๋Œ์•„์•ผ ํ•œ๋‹ค.
  • ๋…๋ฆฝ์ ์œผ๋กœ(Independent) : ๊ฐ ํ…Œ์ŠคํŠธ๋Š” ์„œ๋กœ ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • ๋ฐ˜๋ณต๊ฐ€๋Šฅํ•˜๊ฒŒ (Repeatable) : ํ…Œ์ŠคํŠธ๋Š” ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ๋„ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
  • ์ž๊ฐ€๊ฒ€์ฆํ•˜๋Š” (Self-Vaildating) : ํ…Œ์ŠคํŠธ๋Š” boolean ๊ฐ’์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์•ผ ํ•œ๋‹ค.
  • ์ ์‹œ์— (Timely) : ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋Š” ์‹ค์ œ ์ฝ”๋“œ ๊ตฌํ˜„์ „์— ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

 

10. ํด๋ž˜์Šค

- ํด๋ž˜์Šค๋Š” ์ž‘์•„์•ผ ํ•œ๋‹ค. (๋งก์€ ์ฑ…์ž„)

  • ํด๋ž˜์Šค ์ด๋ฆ„์€ ํ•ด๋‹น ํด๋ž˜์Šค ์ฑ…์ž„์„ ๊ธฐ์ˆ ํ•ด์•ผ ํ•œ๋‹ค. (๊ฐ„๋‹จ๋ช…๋ฃŒํ•˜๊ฒŒ)
  • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ SRP(Single Responsibility Principle) : ํด๋ž˜์Šค๋Š” ๋ณ€๊ฒฝํ•  ์ด์œ ๊ฐ€ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.
  • ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ˆ˜๊ฐ€ ์ž‘์•„์•ผ ํ•œ๋‹ค. (์‘์ง‘๋„๊ฐ€ ๋†’์•„์•ผ ํ•œ๋‹ค) => ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค = ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋กœ ์ชผ๊ฐœ์•ผ ํ•œ๋‹ค.
  • OCP (Open-Closed Principle) : ํด๋ž˜์Šค๋Š” ํ™•์žฅ์— ๊ฐœ๋ฐฉ์ ์ด๊ณ  ์ˆ˜์ •์— ํ์‡„์ ์ด์–ด์•ผ ํ•œ๋‹ค
  • DIP (Dependency Inversion Principle) : ํด๋ž˜์Šค๋Š” ์ƒ์„ธํ•œ ๊ตฌํ˜„์ด ์•„๋‹ˆ๋ผ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค. => ์ƒ์„ธํ•œ ๊ตฌํ˜„์— ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต๋‹ค.

 

11. ์‹œ์Šคํ…œ

  • ์‹œ์Šคํ…œ ์ œ์ž‘๊ณผ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋ผ
  • ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด๋ฅผ ์ œ์ž‘ํ•˜๊ณ  ์˜์กด์„ฑ์„ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” '์ค€๋น„ ๊ณผ์ •'๊ณผ ์ค€๋น„๊ณผ์ • ์ดํ›„์—์ด์–ด์ง€๋Š” '๋Ÿฐํƒ€์ž„ ๋กœ์ง'์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • ์„ค์ • ๋…ผ๋ฆฌ๋Š” ์ผ๋ฐ˜ ์‹คํ–‰ ๋…ผ๋ฆฌ์™€ ๋ถ„๋ฆฌํ•ด์•ผ ๋ชจ๋“ˆ์„ฑ์ด ๋†’์•„์ง„๋‹ค.
  • ์˜์กด์„ฑ ์ฃผ์ž…(DI) : ์ œ์–ด ์—ญ์ „ ๊ธฐ๋ฒ•์„ ์˜์กด์„ฑ ๊ด€๋ฆฌ์— ์ ์šฉํ•œ ๋งค์ปค๋‹ˆ์ฆ˜
  • โ€˜์ฒ˜์Œ๋ถ€ํ„ฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒโ€™ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฏฟ์Œ์€ ๋ฏธ์‹ ์ด๋‹ค. ์˜ค๋Š˜ ์ฃผ์–ด์ง„ ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ์— ๋งž์ถฐ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๊ณ , ๋‚ด์ผ์€ ์ƒˆ๋กœ์šด ์Šคํ† ๋ฆฌ์— ๋งž์ถฐ ์‹œ์Šคํ…œ์„ ์กฐ์ •ํ•˜๊ณ  ํ™•์žฅํ•˜๋ฉด ๋œ๋‹ค.
  • TDD์™€ ๋ฆฌํŒฉํ„ฐ๋ง์€ ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ์‹œ์Šคํ…œ์„ ์กฐ์ •ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค
  • ๋ชจ๋“ˆ์„ ๋‚˜๋ˆ„๊ณ  ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์ง€์—ฝ์ ์ธ ๊ด€๋ฆฌ์™€ ์˜์‚ฌ ๊ฒฐ์ •์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค
  • ๋ช…๋ฐฑํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์„๋•Œ์— ํ‘œ์ค€์„ ํ˜„๋ช…ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ => ํ‘œ์ค€์— ์ง‘์ฐฉํ•˜๊ฒŒ๋˜๋ฉด ๊ณ ๊ฐ ๊ฐ€์น˜๊ฐ€ ๋’ท์ „์œผ๋กœ ๋ฐ€๋ฆด์ˆ˜ ์žˆ๋‹ค

12. ์ฐฝ๋ฐœ์„ฑ

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

์ข‹์€ ์ด๋ฆ„์„ ์„ ํƒํ•œ๋‹ค.
ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค ํฌ๊ธฐ๋ฅผ ๊ฐ€๋Šฅํ•œ ์ค„์ธ๋‹ค.
ํ‘œ์ค€ ๋ช…์นญ์„ ์‚ฌ์šฉํ•œ๋‹ค. ex) ํด๋ž˜์Šค ์ด๋ฆ„์— ํŒจํ„ด ์ด๋ฆ„ ๋„ฃ๊ธฐ
๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๊ผผ๊ผผํžˆ ์ž‘์„ฑํ•œ๋‹ค.

  • ํด๋ž˜์Šค์™€ ๋งค์„œ๋“œ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์ค„์—ฌ๋ผ

13. ๋™์‹œ์„ฑ

  • ๋™์‹œ์„ฑ : ๊ฒฐํ•ฉ์„ ์—†์• ๋Š” ์ „๋žต (โ€˜๋ฌด์—‡โ€™๊ณผ โ€˜์–ธ์ œโ€™๋ฅผ ๋ถ„๋ฆฌ)
  • ํ•„์š”ํ•œ ์ด์œ  : ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋กœ ์‘๋‹ต ์‹œ๊ฐ„๊ณผ ์ž‘์—… ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ฐœ์„ 
๋ฐ˜์‘ํ˜•