๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์ /ํด๋ฆฐ ์ฝ”๋“œ

ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 11์žฅ, 12์žฅ

Amenable 2023. 1. 11. 22:32

11์žฅ. ์‹œ์Šคํ…œ ๐Ÿ“ก

  • Main ๋ถ„๋ฆฌ
      ์‹œ์Šคํ…œ ์ƒ์„ฑ๊ณผ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ, ์ƒ์„ฑ๊ณผ ๊ด€๋ จํ•œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ main์ด๋‚˜ main์ด ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ์˜ฎ๊ธฐ๊ณ , ๋‚˜๋จธ์ง€ ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๊ณ  ๋ชจ๋“  ์˜์กด์„ฑ์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

  ์ œ์–ด ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์‰ฝ๋‹ค. main ํ•จ์ˆ˜์—์„œ ์‹œ์Šคํ…œ์— ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋„˜๊ธด๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ทธ์ € ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋ฟ์ด๋‹ค. main๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์— ํ‘œ์‹œ๋œ ์˜์กด์„ฑ ํ™”์‚ดํ‘œ์˜ ๋ฐฉํ–ฅ์— ์ฃผ๋ชฉํ•œ๋‹ค. ๋ชจ๋“  ํ™”์‚ดํ‘œ๊ฐ€ main ์ชฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ชฝ์„ ํ–ฅํ•œ๋‹ค. ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ main์ด๋‚˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •์„ ์ „ํ˜€ ๋ชจ๋ฅธ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋‹จ์ง€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ ์ ˆํžˆ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

 

11์žฅ ๊ฒฐ๋ก 

  ์‹œ์Šคํ…œ ์—ญ์‹œ ๊นจ๋—ํ•ด์•ผ ํ•œ๋‹ค. ๊นจ๋—ํ•˜์ง€ ๋ชปํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ฅผ ํ๋ฆฌ๋ฉฐ ๊ธฐ๋ฏผ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค. ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๊ฐ€ ํ๋ ค์ง€๋ฉด ์ œํ’ˆ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง„๋‹ค. ๋ฒ„๊ทธ๊ฐ€ ์ˆจ์–ด๋“ค๊ธฐ ์‰ฌ์›Œ์ง€๊ณ , ์Šคํ† ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๋Š” ํƒ“์ด๋‹ค. ๊ธฐ๋ฏผ์„ฑ์ด ๋–จ์–ด์ง€๋ฉด ์ƒ์‚ฐ์„ฑ์ด ๋‚ฎ์•„์ ธ TDD๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์žฅ์ ์ด ์‚ฌ๋ผ์ง„๋‹ค.

  ๋ชจ๋“  ์ถ”์ƒํ™” ๋‹จ๊ณ„์—์„œ ์˜๋„๋Š” ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ ค๋ฉด POJO๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ด€์  ํ˜น์€ ๊ด€์ ๊ณผ ์œ ์‚ฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ด ๊ฐ ๊ตฌํ˜„ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

  ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋“  ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์„ ์„ค๊ณ„ํ•˜๋“ , ์‹ค์ œ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ช…์‹ฌํ•˜์ž.

(ํ•ด๋‹น ์žฅ์—์„œ๋Š” ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ๋œ DI, IoC, Proxy, POJO ๋“ฑ์— ๊ด€ํ•œ ๋‚ด์šฉ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ๊ผญ 11์žฅ์„ ์ฝ์–ด๋ณด์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.)

 

 

12์žฅ. ์ฐฝ๋ฐœ์„ฑ ๐ŸŽ 

  ์ผ„ํŠธ ๋ฒก์ด ์ œ์‹œํ•œ ๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™ ๋„ค ๊ฐ€์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ ์šฐ์ˆ˜ํ•œ ์„ค๊ณ„์˜ ์ฐฝ๋ฐœ์„ฑ์„ ์ด‰์ง„ํ•˜์—ฌ ๋ณด์ž. (์ค‘์š”๋„๊ฐ€ ๋†’์€ ๊ฒƒ๋“ค์„ ๋จผ์ € ์†Œ๊ฐœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ธ€์„ ์ ๊ฒ ๋‹ค.)

 

๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™ 1 : ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ผ

  ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๋ ค๊ณ  ์• ์“ฐ๋ฉด ์„ค๊ณ„ ํ’ˆ์งˆ์ด ๋”๋ถˆ์–ด ์ข‹์•„์ง„๋‹ค. ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ๋ชฉ์  ํ•˜๋‚˜๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ๋‚˜์˜จ๋‹ค. SRP๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ํ›จ์”ฌ ๋” ์‰ฝ๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๊ฐœ๋ฐœ์ž๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ ์ €ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๋ฉด ๋” ๋‚˜์€ ์„ค๊ณ„๊ฐ€ ์–ป์–ด์ง„๋‹ค.

  "ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ณ„์† ๋Œ๋ ค๋ผ"๋ผ๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ๋‹จ์ˆœํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ฉด ์‹œ์Šคํ…œ์€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์™€ ๋†’์€ ์‘์ง‘๋ ฅ์ด๋ผ๋Š”, ๊ฐ์ฒด ์ง€ํ–ฅ ๋ฐฉ๋ฒ•๋ก ์ด ์ง€ํ–ฅํ•˜๋Š” ๋ชฉํ‘œ๋ฅผ ์ €์ ˆ๋กœ ๋‹ฌ์„ฑํ•œ๋‹ค. ์ฆ‰, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์„ค๊ณ„ ํ’ˆ์งˆ์ด ๋†’์•„์ง„๋‹ค.

 

๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™ 2 : ์ค‘๋ณต์„ ์—†์• ๋ผ (๋ฆฌํŒฉํ† ๋ง)

  ์šฐ์ˆ˜ํ•œ ์„ค๊ณ„์—์„œ ์ค‘๋ณต์€ ์ปค๋‹ค๋ž€ ์ ์ด๋‹ค. ์ค‘๋ณต์€ ์ถ”๊ฐ€ ์ž‘์—…, ์ถ”๊ฐ€ ์œ„ํ—˜, ๋ถˆํ•„์š”ํ•œ ๋ณต์žก๋„๋ฅผ ๋œปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋Š” ๋‹น์—ฐํžˆ ์ค‘๋ณต์˜ ํ•œ ํ˜•ํƒœ์ด๊ณ  ๊ตฌํ˜„ ์ค‘๋ณต๋„ ์ค‘๋ณต์˜ ํ•œ ํ˜•ํƒœ์ด๋‹ค. 

  ์•„๋ž˜๋Š” ๊ตฌํ˜„ ์ค‘๋ณต์˜ ํ•œ ํ˜•ํƒœ์™€ ๊ตฌํ˜„ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ ํ˜•ํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

// ๊ตฌํ˜„ ์ค‘๋ณต
int size() {} // ๋ฉ”์„œ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
boolean isEmpty() {}

------------------------------------

// ๊ตฌํ˜„ ์ค‘๋ณต ํ•ด๊ฒฐ
boolean isEmpty() {
    return 0 == size();
}

 

๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™ 3 : ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋ฅผ ํ‘œํ˜„ํ•˜๋ผ (๋ฆฌํŒฉํ† ๋ง)

  ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ ๋น„์šฉ ์ค‘ ๋Œ€๋‹ค์ˆ˜๋Š” ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜์— ๋“ค์–ด๊ฐ„๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๋ฒ„๊ทธ์˜ ์‹น์„ ์‹ฌ์ง€ ์•Š์œผ๋ ค๋ฉด ์œ ์ง€๋ณด์ˆ˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹œ์Šคํ…œ์„ ์ œ๋Œ€๋กœ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์ด ์ ์ฐจ ๋ณต์žกํ•ด์ง€๋ฉด์„œ ์œ ์ง€๋ณด์ˆ˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•˜๋А๋ผ ๋ณด๋‚ด๋Š” ์‹œ๊ฐ„์€ ์ ์  ๋Š˜์–ด๋‚˜๊ณ  ๋™์‹œ์— ์ฝ”๋“œ๋ฅผ ์˜คํ•ดํ•  ๊ฐ€๋Šฅ์„ฑ๋„ ์ ์  ์ปค์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฝ”๋“œ๋Š” ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋ฅผ ๋ถ„๋ช…ํžˆ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ช…๋ฐฑํ•˜๊ฒŒ ์งค์ˆ˜๋ก ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ทธ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค. ๊ทธ๋ž˜์•ผ ๊ฒฐํ•จ์ด ์ค„์–ด๋“ค๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ์ ๊ฒŒ ๋“ ๋‹ค. ์•„๋ž˜๋Š” ์ด๋ฅผ ์œ„ํ•œ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

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

 

๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™ 4 : ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์ค„์—ฌ๋ผ (๋ฆฌํŒฉํ† ๋ง)

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

  ๋ชฉํ‘œ๋Š” ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋ฉด์„œ ๋™์‹œ์— ์‹œ์Šคํ…œ ํฌ๊ธฐ๋„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ทœ์น™์€ ๊ฐ„๋‹จํ•œ ์„ค๊ณ„ ๊ทœ์น™ ๋„ค ๊ฐœ ์ค‘ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ์ž‘์—…๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ์˜๋„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ž‘์—…์ด ๋” ์ค‘์š”ํ•˜๋‹ค๋Š” ๋œป์ด๋‹ค.