์ฝ๋์์ ๋ค์ด๋ฐ์ ์ด๋ ์ํฉ์์๋ ์ฐ์ธ๋ค. ์ข์ ๋ค์ด๋ฐ์ ๊ณ ๋ฏผํ๋ ์๊ฐ๋ณด๋ค ์ ์ฝํ๋ ์๊ฐ์ด ๋ ๋ง์์ง๋ค.
์ค๋์ ๋ค์ด๋ฐ์ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ช๊ฐ์ง ์์๋ณด๊ฒ ๋ค.
์๋๋ฅผ ๋ด์ ์ด๋ฆ
๋ณ์, ํจ์, ํด๋์ค์ ์ด๋ฆ์๋ ๋ถ๋ช ํ ์๋๋ฅผ ๋ด๋๊ฒ ์ข๋ค.
- ์กด์ฌ ์ด์
- ์ํ ๊ธฐ๋ฅ
- ์ฌ์ฉ ๋ฐฉ๋ฒ
๋ค์ด๋ฐ ๊ท์น์ค์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ท์น์ด๋ค. ํด๋น ์ด๋ฆ์ ํตํด ์ด๋ค ์๋๋ฅผ ํ๋ ค๊ณ ํ๋์ง ํ์ ํ ์ ์์ด์ผ ํ๋ค.
public List<User> a() {
//์คํ ๋ก์ง ..
}
๋น์ฐํ๊ฒ๋ ์ ํจ์ ์ด๋ฆ์ผ๋ก๋ถํฐ๋ ์ด๋ค User๋ฅผ ๋ฐํํ๋๊ฑด์ง ์ ์ ์๋ค.
public List<User> getActiveUsers() {
//์คํ ๋ก์ง ..
}
๋ค์ด๋ฐ์ ์๋๋ฅผ ์ถ๊ฐํ์ฌ
ํ์ฑ ์ฌ์ฉ์๋ฅผ ์ป๊ธฐ ์ํ ๋ชฉ์ ,
์ฌ์ฉ์๋ฅผ ๋ฐํํ๋ ๊ธฐ๋ฅ,
get์ ํตํด ์กฐํํ๋ ์ฉ๋
์์ ์ ์ ์๋ค.
์ด์ฒ๋ผ ์ด๋ฆ์์ ์๋๋ฅผ ํ์ ํ ์ ์์ด์ผ ํ๋ค.
์๋ชป๋ ์ ๋ณด๋ฅผ ๋ด์ง ์๊ธฐ
๊ฐ๋ฐ์๋ ์ด๋ฆ์ผ๋ก๋ถํฐ ํด๋น ๋ณ์๋ ํจ์์ ๋ํ ํํธ๋ฅผ ์ป๋๋ค.
๋ฐ๋ผ์ ์ด๋ฆ์ ์๋ชป๋ ์ ๋ณด๋ ์๋ฏธ๋ฅผ ํ๋ฆฌ๊ฑฐ๋ ํผ๋์ด๋ ์ค์๋ฅผ ์ผ๊ธฐํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ด๊ณ ์๋ ๋ณ์๊ฐ ์ค์ List๊ฐ ์๋๋ผ๋ฉด ์ด๋ฆ์ List๋ฅผ ํฌํจํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
๋ณต์ํ์ ์ฌ์ฉํ๊ฑฐ๋ Group ๋ฑ์ ์ฌ์ฉํ๋๊ฒ ์ข๋ค.
๋ํ, ํ ๋ฌธ์ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋ O, l(์๋ฌธ์ L)์ 0, 1๊ณผ ํท๊ฐ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ํผํ๋๊ฒ ์ข๋ค.
if (O == 1)
if (O == l)
if (0 == l)
์๋ฏธ ์๋ ๊ตฌ๋ถ
๊ฐ์ ๋ฒ์ ๋ด์ ๊ฐ์ ๋ ๊ฐ๋ ์ ๋ณ์๋ ํจ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ด๋ฆ์ ๋ฐ๊ฟ ๋ ์ข์ง ์๋ ์์๋ค์ด ์๋ค.
์ฒซ ๋ฒ์งธ๋ก, ์ฐ์์ ์ธ ์ซ์๋ฅผ ๋ง๋ถ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
public static void copyChars (char a1[], char a2[]) {
//...
}
๊ฐ์ char ๋ ๋ณ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฐ์์ ์ธ ์ซ์ 1, 2๋ฅผ ๋ง๋ถ์ธ ๊ฒฝ์ฐ์ด๋ค.
char์ ๋ณต์ฌํ๋ ์ ํจ์๋ ์ด๋์ ์ด๋ ์ชฝ์ผ๋ก ๋ณต์ฌํ๋์ง ์ ์ ์๋ค.
public static void copyChars (char src[], char dest[]) {
//...
}
source์ destination์ ํตํด ์ด๋ ์ชฝ์ผ๋ก ๋ณต์ฌ๋๋์ง ํํธ๋ฅผ ์ ๊ณตํ ์ ์๋ค.
๋ ๋ฒ์งธ๋ก, ๋ถ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๋ถ์ฉ์ด(stopwords)๋ ๋ฌธ์ฅ์ ๋ถ์ํ ๋ ์๋ฏธ๊ฐ ์๋ ๋จ์ด๋ค์ ๋ปํ๋ค.
์์๋ก, Info์ Data๋ ์๋ฏธ๊ฐ ๋ถ๋ถ๋ช ํ ๋ถ์ฉ์ด์ด๋ค.
public User getUserData() {
}
public User getUserInfo() {
}
๋ ํจ์์ ์ด๋ฆ์ผ๋ก๋ ์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ์ ์ ์ ์๋ค.
STOP_WORDS = [
"a", "an", "the", # ๊ด์ฌ: ์๋ฏธ๋ฅผ ์ ๋ฌํ์ง ์์
"it", "this", "that", "these", "those", # ์ง์๋๋ช
์ฌ: ๋ชจํธํจ
"he", "she", "they", "them", # ์ธ์นญ๋๋ช
์ฌ: ํน์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค์ง ์์
"is", "are", "was", "were", "be", "been", # 'to be' ๋์ฌ: ์ํ๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"do", "does", "did", # 'do' ๋์ฌ: ํ์๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"have", "has", "had", # 'have' ๋์ฌ: ์์ ๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"can", "could", "will", "would", "shall", "should", # ์กฐ๋์ฌ: ๊ฐ๋ฅ์ฑ์ด๋ ์์ง๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"and", "or", "but", "if", "then", # ์ ์์ฌ: ๋ก์ง์ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ถ์ ์
"in", "on", "at", "to", "for", "of", "by", # ์ ์น์ฌ: ๊ด๊ณ๋ฅผ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ชจํธํจ
"with", "without", # ์ํ๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"very", "really", "much", "many", # ์ ๋๋ฅผ ๋ํ๋ด๋ ๋ถ์ฌ: ๋ณ์๋ช
์ผ๋ก ๋ถ์ ์
"other", "another", # ๋ถํน์ ํ ๋ค๋ฅธ ๊ฒ์ ์ง์นญ: ๋ชจํธํจ
"some", "any", # ๋ถํน์ ์๋์ ๋ํ๋: ๋ชจํธํจ
"no", "not", # ๋ถ์ ์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"only", "just", # ์ ํ์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"every", "all", "each", # ์ ์ฒด๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"than", "as", # ๋น๊ต๋ฅผ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ถ์ ์
"like", # ์ ์ฌ์ฑ์ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ชจํธํจ
"so", "such", # ์ ๋๋ ์ ํ์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"too", "also", # ์ถ๊ฐ๋ฅผ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ถ์ ์
"about", "almost", # ๊ทผ์ฌ์น๋ฅผ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ชจํธํจ
"even", # ๊ฐ์กฐ๋ฅผ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ถ์ ์
"here", "there", # ์์น๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"now", "then", # ์๊ฐ์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"always", "never", # ๋น๋๋ฅผ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ถ์ ์
"maybe", "perhaps", # ๊ฐ๋ฅ์ฑ์ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ถ์ ์
"yes", "no", # ๊ธ์ /๋ถ์ ์ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ถ์ ์
"okay", "ok", # ๋์๋ฅผ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ถ์ ์
"well", # ๋ค๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ชจํธํจ
"let", "make", # ํ์๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"thing", "stuff", # ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๋ช
์ฌ: ๊ตฌ์ฒด์ฑ ๋ถ์กฑ
"way", "manner", # ๋ฐฉ์์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"kind", "type", # ์ ํ์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"part", "piece", # ๋ถ๋ถ์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"example", "instance", # ์์๋ฅผ ๋ํ๋ด์ง๋ง ๋ณ์๋ช
์ผ๋ก๋ ๋ถ์ ์
"case", "situation", # ์ํฉ์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"result", "outcome", # ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"data", "information", # ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด์ง๋ง ๋๋ฌด ์ผ๋ฐ์ ์
"value", "amount", # ๊ฐ์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"number", "quantity", # ์๋์ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"item", "element", # ์์๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"object", "entity", # ๊ฐ์ฒด๋ฅผ ๋ํ๋ด์ง๋ง ๋๋ฌด ์ผ๋ฐ์ ์
"flag", "indicator", # ํ์๋ฅผ ๋ํ๋ด์ง๋ง ๊ตฌ์ฒด์ ์ด์ง ์์
"temp", "tmp", # ์์๋ฅผ ๋ํ๋ด๋ ์ฝ์ด: ๊ตฌ์ฒด์ฑ ๋ถ์กฑ
"misc", "etc", # ๊ธฐํ๋ฅผ ๋ํ๋ด๋ ์ฝ์ด: ๋ชจํธํจ
]
๋ณ์๋ช ์ ๋ค์ด๊ฐ๋ฉด ์ข์ง ์์ ๋ถ์ฉ์ด๋ค์ ์์๋ก ๋ฝ์๋ณด์๋ค.
๋ฐ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ
๊ฒฐ๊ตญ ์ฝ๋๋ ์ฌ๋์ด ์ฝ๊ณ , ์ฌ๋์ด ๋ฆฌ๋ทฐํ๊ฒ ๋๋ค.
์ฝ๊ธฐ ์ฌ์ด ์ข์ ์ฝ๋์๋ ๋ฐ์ํ๊ธฐ ์ข์ ์ด๋ฆ ๋ํ ํ ๋์์ด ๋ ์ ์๊ฒ ๋ค.
java.time ํจํค์ง์๋ LocalDate ๋ผ๋ yyyy-mm-dd ํ์์ ํด๋์ค๊ฐ ์๋ค.
getymd() ๋ณด๋ค๋ getLocalDate()๊ฐ ๋ ์ข์ ์์๊ฐ ๋๊ฒ ๋ค.
๊ฒ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ
ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ค๋ณด๋ฉด, ์์๋ ํจ์๊ฐ ์ด๋ค ํด๋์ค์ ์ ์๋์ด ์๋์ง ์ฐพ์ ์ ์์ ๋๊ฐ ์๋ค.
์ค์ ๋ก ๋๋ ํ์์ด ๊ฐ๋ฐํ ์ฝ๋์์ ์ด๋ค ํจ์๋ฅผ ์ฐพ๊ธฐ ์ํด IntelliJ์์ shift๋ฅผ ๋ ๋ฒ ๋๋ฅด๋ฉด ๋์ค๋ ๊ฒ์ ์ฐฝ์ ๊ฒ์ํ์ฌ ํจ์๋ฅผ ์ฐพ์ ์ ์ด ์๋ค.
for๋ฌธ์ด๋ ๋จ์ํ ์์ ์ ํ๋ ํจ์์์๋ i, j, k์ ๊ฐ์ ๋จ์ํ ๋ณ์๋ช ์ ์ฌ์ฉํ ์ ์๊ฒ ์ง๋ง, ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด
๋ณดํต ์งง์ ๋ณ์๋ช ๋ณด๋ค๋ ๊ธด ๋ณ์๋ช ์ด ์ข๊ณ , ์ด๋ฆ์ ๊ธธ์ด๋ ๋ฒ์ ํฌ๊ธฐ์ ๋น๋กํด์ผ ํ๋ค.
๊ฐ์ธ์ ๊ธฐ์ต๋ ฅ์ ์์กดํ์ง ์๋ ์ด๋ฆ
๊ฐ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ฌ๋์ด ๊ธฐ์ตํ ์ ์๋ ์ ๋ณด๋ฅผ ํตํด ์ดํดํ ์ ์๋ ๋ณ์๋ช ์ ๋ณธ ์ ์ด ์๋ค.
์ฒ์ ๋ณด๋ ์ฌ๋๋ ์ดํดํ ์ ์๋ ์ด๋ฆ์ ์ฌ์ฉํ๊ณ , ์ต๋ํ ๋ช ๋ฃํ๊ฒ ์๋ช ํด์ผ ํ๋ค.
ํด๋์ค ์ด๋ฆ
ํด๋์ค ์ด๋ฆ์ ๋ช ์ฌ๋ ๋ช ์ฌ๊ตฌ๊ฐ ์ ํฉํ๋ค.
DataBaseConnection์ ์ข๊ณ , ConnectToDatabase๋ ์ข์ง ์๋ค.
PaymentProcessor๋ ์ข๊ณ , ProcessPayments๋ ์ข์ง ์๋ค.
EmailSender๋ ์ข๊ณ , SendEmails๋ ์ข์ง ์๋ค.
Order์ ์ข๊ณ , MangeOrders๋ ์ข์ง ์๋ค.
๋ฉ์๋ ์ด๋ฆ
๋ฐ๋๋ก ๋ฉ์๋ ์ด๋ฆ์ ๋์ฌ๋ ๋์ฌ๊ตฌ๊ฐ ์ ํฉํ๋ค.
createUser()์ ์ข๊ณ , user()์ ์ข์ง ์๋ค.
saveFile()์ ์ข๊ณ , fileSave()๋ ์ข์ง ์๋ค.
searchProducts()๋ ์ข๊ณ , productSearch๋ ์ข์ง ์๋ค.
addToCart๋ ์ข๊ณ , cartAddition์ ์ข์ง์๋ค.
ํ ๊ฐ๋ ์ ํ ๋จ์ด
์ถ์์ ์ธ ๊ฐ๋ ํ๋์ ๋จ์ด ํ๋๋ฅผ ์ ํํด ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ ์ ์, ํ๋ก์ ํธ ์ปจ๋ฒค์ ์ ์ ํ๊ณ ์์ํ๋ ๊ฒ๊ณผ ๋น์ทํ ์ด์ ์ด๋ค.
์๋ฅผ ๋ค์ด์, ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ํจ์๋ getXXX()๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ์ฝ์ํ๋ ๊ฒ์ด๋ค.
์ด์ฒ๋ผ ํ๋ก์ ํธ๋ ์ผ๊ด์ฑ ์๋ ์ดํ๋ฅผ ์ฌ์ฉํ ์ด๋ฆ์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
ํด๋ฒ ์์ญ์์ ๊ฐ์ ธ์จ ์ด๋ฆ
์ฝ๋๋ฅผ ๋ณด๊ฒ ๋๋ ์ฌ๋์ ๊ฐ๋ฐ์์ผ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ์ฐ ์ฉ์ด, ์๊ณ ๋ฆฌ์ฆ, ํจํด, ์ํ ์ฉ์ด ๋ฑ์ ์ฌ์ฉํด๋ ์ข๋ค.
Visitor ํจํด์ ์ด์ฉํ AccountVisitor, Queue์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ JobQueue ์ด๋ฆ์ ๋ชจ๋ ๊ด์ฐฎ๋ค.
๊ฐ๋ฐ์์๊ฒ ์ต์ํ ๊ธฐ์ ๊ฐ๋ ์ ์ฌ์ฉํ ์ด๋ฆ์ ์ ํฉํ ์ ํ์ด๋ค.
์ค๋์ ๊ฐ๋ฐ์์๊ฒ ๊ต์ฅํ ์ต์ํ ์ฃผ์ ์ธ ๋ค์ด๋ฐ์ ๋ค๋ฃจ์ด ๋ณด์๋ค.
ํ์ ์ด๋ฆ์ ์ข์ ์ฝ๋๋ฅผ ๋ง์ด ๋ณด์๋ ๊ธฐ์ต์ผ๋ก ๊ฐ์ ํตํด ์ง์์๋ค.
์นด์นด์ค ๋ก๊ทธ์ธ ํ๋ก์ ํธ์ ํด๋์ค ์ด๋ฆ์ KakaoInfo๋ก ์ง์๋ ๋๋ฅผ ๋ฐ์ฑํ๋ค ๐
์ถ์ฒ
Clean Code: A Handbook of Agile Software Craftsmanship
by Robert C. Martin
'Clean Code' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Clean Code] ์ข์ ํจ์ ์ค๊ณ (0) | 2024.08.17 |
---|