(CleanCode) 1์žฅ~3์žฅ

DevBooks

08/24/2021





<๋ชฉ์ฐจ>

  • 1์žฅ ๊นจ๋—ํ•œ ์ฝ”๋“œ
  • 2์žฅ ์˜๋ฏธ์žˆ๋Š” ์ด๋ฆ„
  • 3์žฅ ํ•จ์ˆ˜


1์žฅ ๊นจ๋—ํ•œ ์ฝ”๋“œ


๋‚˜์œ ์ฝ”๋“œ์— ๋ฐœ๋ชฉ์ด ์žกํ˜€ ๊ณ ์ƒํ•œ ๊ธฐ์–ต์ด ์žˆ๋Š”๊ฐ€? โ†’ YES..

์ฝ”๋“œ๊ฐ€ ์ •๋ง์ด์ง€ ๋„ˆ๋ฌด๋‚˜๋„ ์—‰๋ง์ด๋ผ ๋ช‡ ์‹œ๊ฐ„์œผ๋กœ ์˜ˆ์ƒํ•œ ์—…๋ฌด๊ฐ€ ๋ช‡ ์ฃผ๋กœ ๋Š˜์–ด์ง„ ๊ฒฝํ—˜์ด ์žˆ๋Š”๊ฐ€? โ†’ YES....

ํ•œ ์ค„๋งŒ ๊ณ ์น˜๋ฉด ๋˜๋ฆฌ๋ผ ์˜ˆ์ƒํ–ˆ๋‹ค๊ฐ€ ๋ชจ๋“ˆ์„ ์ˆ˜๋ฐฑ ๊ฐœ ๊ฑด๋“œ๋ฆฐ ๊ฒฝํ—˜์ด ์žˆ๋Š”๊ฐ€? โ†’ YES...........


๋‚˜์˜ ์ฝ”๋“œ๊ฐ€ ๋‚˜์œ ์ฝ”๋“œ์ธ ์ด์œ ์—๋Š” ์ˆ˜ ๋งŽ์€ ์ด์œ ๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ํ•ญ์ƒ ๋‚˜์˜ ๋‹ต๋ณ€์€ ์ผ์ •์ด ์ด‰๋ฐ•ํ•ด์„œ, ๊ณ ๊ฐ์‚ฌ์˜ ๋ฌด๋ฆฌํ•œ ์š”๊ตฌ, ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฌธํ™”์˜ ๋ถ€์žฌ..๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์œ ๋ฅผ ๊ฐ–๋‹ค๋Œ€์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋กœ๋ฒ„ํŠธ ์”จ๋Š” ๊ทธ๊ฒƒ์ด ์ „์ ์œผ๋กœ ๋‚˜์˜ ์ž˜๋ชป์ธ ๊ฒฝ์šฐ๋ฅผ ๊ผฌ์ง‘์–ด์ฃผ์—ˆ๋‹ค. ๋‚˜์˜ ์ฝ”๋“œ๊ฐ€ ๋‚˜์œ ์ด์œ ๋Š” ๋ฐ”๋กœ ๋‚ด๊ฐ€ ์ „๋ฌธ๊ฐ€์žก์ง€ ๋ชปํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜€๊ธฐ ๋•Œ๋ฌธ...!

์ผ์ •์ด ์ด‰๋ฐ•ํ•˜๋˜, ๊ณ ๊ฐ์‚ฌ๊ฐ€ ๊ฐ‘์งˆ์„ ํ•˜๋˜ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์ˆ˜ํ•˜๋Š” ์ผ์€ ์ „์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ฑ…์ž„ ์˜์—ญ์ด๋ผ๋Š” ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋ง์— ๋‚˜๋Š” ๋™์˜๋ฅผ ํ•˜์ง€ ์•Š์„ ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค..



๊นจ๋—ํ•œ ์ฝ”๋“œ๋ž€?


  • ๋ฐ”์•ผ๋„ค ์ŠคํŠธ๋กญ์ŠคํŠธ๋ฃน

โ†’ ์šฐ์•„ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ฝ”๋“œ. ๊ฐ„๋‹จํ•œ ๋…ผ๋ฆฌ๊ตฌ์กฐ. ์˜์กด์„ฑ์„ ์ค„์—ฌ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ. ๋“ฑ๋“ฑ

โ†’ ์ฒ ์ €ํ•œ ์˜ค๋ฅ˜์ฒ˜๋ฆฌ ex. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜, ๊ฒฝ์Ÿ์ƒํƒœ, ์ผ๊ด€์„ฑ ์—†๋Š” ๋ช…๋ช…๋ฒ• ๋“ฑ...

  • ๊ทธ๋ž˜๋”” ๋ถ€์น˜

โ†’ ๊ฐ€๋…์„ฑ ์ข‹์€ ์ฝ”๋“œ (๋ช…์พŒํ•œ ์ถ”์ƒํ™”์™€ ๋‹จ์ˆœํ•œ ์ œ์–ด๋ฌธ)

  • big ๋ฐ์ด๋ธŒ ํ† ๋งˆ์Šค

โ†’ ๊ฐ€๋…์„ฑ + ๋‹ค๋ฅธ์‚ฌ๋žŒ์ด ๊ณ ์น˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ

  • ๋งˆ์ดํด ํŽ˜๋”์Šค

โ†’ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ ์ง  ์ฝ”๋“œ. ์ฆ‰ ๋ชจ๋“  ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ณ ์น  ํ•„์š”๊ฐ€ ์—†์„์ •๋„๋กœ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ธ ์ฝ”๋“œ.

  • ๋ก  ์ œํ”„๋ฆฌ์Šค

โ†’ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ ์ฝ”๋“œ

โ†’ ํ‘œํ˜„๋ ฅ ์ข‹์€ ์ฝ”๋“œ

โ†’ ์ดˆ๋ฐ˜๋ถ€ํ„ฐ ๊ฐ„๋‹จํ•œ ์ถ”์ƒํ™” ๊ณ ๋ คํ•˜๊ธฐ


์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์งœ์•ผ ํ•˜๋Š” ์ด์œ  : ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋Š์ž„์—†์ด ์ฝ๊ณ  ๋ถ„์„ํ•œ๋‹ค. ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ์ผ์ˆ˜๋ก ์ƒˆ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ๊ฐ€ ์ˆ˜์›”ํ•ด์ง„๋‹ค.



2์žฅ ์˜๋ฏธ์žˆ๋Š” ์ด๋ฆ„

์ž‘๋…„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์„ ๋•Œ ์ „ ์‚ฌ์ˆ˜์—๊ฒŒ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ํ˜ผ๋‚ฌ๋˜ ๊ธฐ์–ต์„ ๋– ์˜ฌ๋ฆฌ๋ฉฐ...


์˜๋„๋ฅผ ๋ถ„๋ช…ํžˆ ๋ฐํžˆ๊ธฐ

  • ์˜๋„๋ฅผ ๋ฐํžˆ๋Š” ์ฝ”๋“œ int d; //๊ฒฝ๊ณผ ์‹œ๊ฐ„ โ†’ int daysSinceCreation;
  • ์ฝ”๋“œ์˜ ๋งฅ๋ฝ์ด ๋ช…์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์ถ•์„ฑ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•œ๋‹ค.

๊ทธ๋ฆ‡๋œ ์ •๋ณด๋ฅผ ํ”ผํ•˜๊ธฐ

  • ๋„๋ฆฌ ์“ฐ์ด๋Š” ๋‹จ์–ด๋ฅผ ๋‹ค๋ฅธ ์˜๋ฏธ์˜ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์€ ์ง€์–‘ํ•ด์•ผํ•œ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ์˜ ์œ ํ˜•์€ ๋„ฃ์ง€ ์•Š๋Š”๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค. ex) List ๋Œ€์‹  group
  • ์„œ๋กœ ํก์‚ฌํ•œ ์ด๋ฆ„์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.
  • ์†Œ๋ฌธ์ž l, ๋Œ€๋ฌธ์ž O ๋Š” ์ˆซ์ž 1๊ณผ 0์œผ๋กœ ํ˜ผ๋™์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

์˜๋ฏธ์žˆ๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ธฐ

์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋งŒ ํ†ต๊ณผํ•˜๋ ค๋Š” ๋ชฉ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ๋ง์ž โ†’ ์™„์ „ ๋œจ๋”ํ•œ ๋ถ€๋ถ„..์ •๋ง ์•ˆ์ข‹์€ ์Šต๊ด€.

  • ์—ฐ์†๋œ ์ˆซ์ž๋ฅผ ๋ง๋ถ™์ธ ์ฝ”๋“œ

ex) ์ €์ž์˜ ์˜๋„๊ฐ€ ์ „ํ˜€ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š” ์ฝ”๋“œ

JAVA
public static void copyChars(char a1[], chara2[]){
for(int i=0; i <a1.length;i++){
a2[i] = a1[i];
}
}

โ†’ ์ธ์ˆ˜์˜ ์ด๋ฆ„์„ source์™€ destination ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค.

  • ๋ถˆ์šฉ์–ด(nois word)๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹

โ†’ Customer ํด๋ž˜์Šค์™€ CustomerObject ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ๊ณต์กดํ•œ๋‹ค๋ฉด ์ด๋“ค์€ ์•„๋ฌด๋Ÿฐ ์ •๋ณด๋„ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ฝ๋Š” ์‚ฌ๋žŒ์ด ์ฐจ์ด๋ฅผ ์•Œ๋„๋ก ์ด๋ฆ„์„ ์ง“์ž.

๊ทธ ์™ธ ์•ˆ์ข‹์€ ๋ช…๋ช…์˜ ์˜ˆ๋“ค..) getActiveAccont() getActiveAccounts() getActiveAccountInfo()


๋ฐœ์Œํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„ ์‚ฌ์šฉํ•˜๊ธฐ

๋ง ๊ทธ๋Œ€๋กœ ๋ฐœ์Œํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„ ์‚ฌ์šฉํ•˜์ž.

ex) genymdhms(generate date, year, month, day, hour, minute, second) โ†’ ์–ด๋–ป๊ฒŒ ์ฝ๋ƒ..


๊ฒ€์ƒ‰ํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„ ์‚ฌ์šฉํ•˜๊ธฐ

๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„๊ณผ ์ƒ์ˆ˜๋Š” ํ…์ŠคํŠธ์ฝ”๋“œ์—์„œ ๋ˆˆ์— ์‰ฝ๊ฒŒ ๋œจ์ง€ ์•Š๋Š”๋‹ค.


๊ธฐ์–ต๋ ฅ ์ž๋ž‘ํ•˜๋Š” ๋ณ€์ˆ˜๋ช… ์ง“์ง€๋ง๊ธฐ

์ž์‹ ๋งŒ ์•„๋Š” ๋ณ€์ˆ˜๋ช…์€ ๊ทธ ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.


ํด๋ž˜์Šค ์ด๋ฆ„

โ†’ ๋ช…์‚ฌ๋‚˜ ๋ช…์‚ฌ๊ตฌ๋กœ ์ง“๊ธฐ. ๋™์‚ฌ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

ex)

Customer, WiKiPage, Account, AddresParser โ† ์ข‹์€ ์˜ˆ

Manager, Processor, Data, Info โ† ๋‚˜์œ ์˜ˆ


๋ฉ”์„œ๋“œ ์ด๋ฆ„

โ†’ ๋™์‚ฌ๋‚˜ ๋™์‚ฌ๊ตฌ๊ฐ€ ์ ํ•ฉ.

โ†’ ์ ‘๊ทผ์ž, ๋ณ€๊ฒฝ์ž, ์กฐ๊ฑด์ž๋Š” ์ž๋ฐ” ํ‘œ์ค€์—๋”ฐ๋ผ get, set, is ๋ฅผ ๋ถ™์ธ๋‹ค.


๊ธฐ๋ฐœํ•œ ์ด๋ฆ„ ํ”ผํ•˜๊ธฐ

๋ณ€์ˆ˜๋ช…์œผ๋กœ ๋†๋‹ด๋”ฐ๋จน๊ธฐ ํ•˜์ง€ ๋ง์ž. ๋‚˜๋งŒ ์›ƒ๊ธธ ํ™•๋ฅ ์ด ํฌ๋‹ค.


ํ•œ ๊ฐœ๋…์— ํ•œ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ž

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


ํ•œ ๋‹จ์–ด๋ฅผ ๋‘๊ฐ€์ง€ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ

๋งŒ์•ฝ ๋‘ ๊ฐœ์˜ ๊ฐ’์„ ๋”ํ•ด์„œ ์ƒˆ ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์™€, ์ง‘ํ•ฉ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋‘ ๊ฐ€์ง€ ๋ชจ๋“  ๊ฒฝ์šฐ์— add ๋ผ๋Š” ๋ฉ”์„œ๋“œ ๋ช…์„ ๋ถ€์—ฌํ•˜๋ฉด ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค. add / append or insert ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ ์ ˆํžˆ ๊ตฌ๋ถ„ํ•ด์„œ ๋‹ค๋ฅด๊ฒŒ ๋ถ€์—ฌ๋˜์–ด์•ผํ•œ๋‹ค.


ํ•ด๋ฒ• ์˜์—ญ๊ณผ ๋ฌธ์ œ์˜์—ญ(domain)์„ ์ ์ ˆํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค์ž

ํ•ด๋ฒ•์˜์—ญ์—์„œ ๊ฐ€์ ธ์˜จ ์ด๋ฆ„ : ์ „์‚ฐ์šฉ์–ด, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„, ์ˆ˜ํ•™์šฉ์–ด ๋“ฑ์„ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ๋‹ค.

๋ฌธ์ œ์˜์—ญ์—์„œ ๊ฐ€์ ธ์˜จ ์ด๋ฆ„ : ์ ์ ˆํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ ์šฉ์–ด๊ฐ€ ์—†์„ ์‹œ, ๋„๋ฉ”์ธ ์šฉ์–ด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ์ „๋ฌธ๊ฐ€์—๊ฒŒ ์˜๋ฏธ๋ฅผ ๋ฌผ์–ด ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ



3์žฅ ํ•จ์ˆ˜

  • ํ•จ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด ์ž‘๊ฒŒ ๋งŒ๋“ค๊ธฐ

โ†’ ์ด์ค‘ ์ค‘์ฒฉ ๊ตฌ์กฐ๊ฐ€ ์ƒ๊ธธ๋งŒํผ ํ•จ์ˆ˜๊ฐ€ ํฌ๋ฉด ์•ˆ๋œ๋‹ค. ํ•จ์ˆ˜์—์„œ ๋“ค์—ฌ์“ฐ๊ธฐ ์ˆ˜์ค€์€ 2๋‹จ์„ ๋„˜์–ด๊ฐ€๋ฉด ์•ˆ๋จ.

  • ํ•จ์ˆ˜์˜ ๊ธฐ๋Šฅ์€ ํ•œ๊ฐ€์ง€๋งŒ ํ•˜๊ธฐ
  • ํ•จ์ˆ˜ ๋‹น ์ถ”์ƒํ™” ์ˆ˜์ค€์€ ํ•˜๋‚˜๋กœ ํ•˜๊ธฐ
  • ์ฝ”๋“œ๋Š” ์œ„์—์„œ ์•„๋ž˜๋กœ ์ด์•ผ๊ธฐํผ๋Ÿผ ์ฝํ˜€์•ผํ•œ๋‹ค. ๋‚ด๋ ค๊ฐ€๊ธฐ ๊ทœ์น™
  • switch ๋ฌธ์€ ๋‹คํ˜•์„ฑ ๊ฐ์ฒด ์ฝ”๋“œ ์•ˆ์—์„œ ํ•œ๋ฒˆ์œผ๋กœ ๋๋‚ด๊ธฐ
  • ์„œ์ˆ ์ ์ธ ์ด๋ฆ„ ์‚ฌ์šฉํ•˜๊ธฐ.
  • ์ž…๋ ฅ ์ธ์ˆ˜๋Š” ์—†์„์ˆ˜๋ก ์ข‹๋‹ค.




WRITTEN BY

Keep It Simple, Stupid