(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) ์ ์์ ์๋๊ฐ ์ ํ ๋๋ฌ๋์ง ์๋ ์ฝ๋
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 ๋ฌธ์ ๋คํ์ฑ ๊ฐ์ฒด ์ฝ๋ ์์์ ํ๋ฒ์ผ๋ก ๋๋ด๊ธฐ
- ์์ ์ ์ธ ์ด๋ฆ ์ฌ์ฉํ๊ธฐ.
- ์ ๋ ฅ ์ธ์๋ ์์์๋ก ์ข๋ค.