๐ ๋ชฉ์ฐจ.
2. ์๋ฏธ ์๋ ์ด๋ฆ
.์๋๋ฅผ ๋ถ๋ช ํ ๋ฐํ๋ผ
.๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ํผํด๋ผ
.์๋ฏธ ์๊ฒ ๊ตฌ๋ถํ๋ผ
.๋ฐ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
.ํด๋์ค, ๊ฐ์ฒด ์ด๋ฆ
.๋ฉ์๋ ์ด๋ฆ
.ํด๋ฒ/๋ฌธ์ ์์ญ์์ ๊ฐ์ ธ์จ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ.
โ๏ธ ๋ด์ฉ.
2. ์๋ฏธ ์๋ ์ด๋ฆ
์ด๋ฆ์ ์ ์ง๊ธฐ ์ํ ๋ช ๊ฐ์ง ๊ท์น ์๊ฐ
.์๋๋ฅผ ๋ถ๋ช ํ ๋ฐํ๋ผ
๋ณ์๋ ํจ์, ํด๋์ค ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ ๊ตต์งํ ์ง๋ฌธ์ ๋ชจ๋ ๋ตํด์ผ ํ๋ค.
- ์กด์ฌ ์ด์
- ์ํ ๊ธฐ๋ฅ
- ์ฌ์ฉ ๋ฐฉ๋ฒ
๋ฐ๋ก ์ฃผ์์ด ํ์ํ๋ค๋ฉด ์๋๋ฅผ ๋ถ๋ช ํ ๋๋ฌ๋ด์ง ๋ชปํ๋ค๋ ๋ง์ด๋ค.
int d; // ๊ฒฝ๊ณผ ์๊ฐ(๋จ์: ๋ ์ง)
// ์ด๋ฆ d๋ ์๋ฌด ์๋ฏธ๋ ๋๋ฌ๋์ง ์๋๋ค. ์ธก์ ํ๋ ค๋ ๊ฐ๊ณผ ๋จ์๋ฅผ ํํํ๋ ์ด๋ฆ์ด ํ์ํ๋ค.
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
int ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๋์ , ๊ฐ๋จํ ํด๋์ค๋ก ๋ง๋ค์ด๋ ๋๋ค.
ํด๋์ค์ ๋ํด ์๋ ์์์์ isFlagged๋ผ๋ ์ข ๋ ๋ช ์์ ์ธ ํจ์๋ฅผ ์ฌ์ฉํด FLAGGED๋ผ๋ ์์๋ฅผ ๊ฐ์ถฐ๋ ์ข๋ค.
// Before
for(int[] cell : gameBoard)
if(cell[STATUS_VALUE] == FLAGGED)
// After
for(Cell cell : gameBoard)
if(cell.isFlagged())
.๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ํผํด๋ผ
์ฌ๋ฌ ๊ณ์ ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ ๋, ์ค์ List๊ฐ ์๋๋ผ๋ฉด accountList๋ผ ๋ช
๋ช
ํ์ง ์๋๋ค.
ํ๋ก๊ทธ๋๋จธ์๊ฒ List๋ผ๋ ๋จ์ด๋ ํน์ํ ์๋ฏธ๋ค. ๊ณ์ ์ ๋ด๋ ์ปจํ
์ด๋๊ฐ ์ค์ List๊ฐ ์๋๋ผ๋ฉด ํ๋ก๊ทธ๋๋จธ์๊ฒ ๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์
์ด๋ค.
* ๋ค์์ ๋์ค๊ฒ ์ง๋ง. ์ค์ ์ปจํ
์ด๋๊ฐ List์ธ ๊ฒฝ์ฐ๋ผ๋ ์ปจํ
์ด๋ ์ ํ์ ์ด๋ฆ์ ๋ฃ์ง ์๋ ํธ์ด ๋ฐ๋์งํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก accountGroup, bunchOfAccounts, ์๋๋ฉด ๋จ์ํ Accounts๋ผ ๋ช
๋ช
ํ๋ค.
.์๋ฏธ ์๊ฒ ๊ตฌ๋ถํ๋ผ
๋ถ์ฉ์ด(noise word)๋ฅผ ์ถ๊ฐํ ์ด๋ฆ์ ์ง์ํ์. ๋ถ์ฉ์ด๋ ์ค๋ณต์ด๋ค. ๋ณ์ ์ด๋ฆ์ variable์ด๋ผ๋ ๋จ์ด๋ ๋จ์ฐ์ฝ ๊ธ๋ฌผ์ด๋ค.
NameString์ด Name ๋ณด๋ค ๋์ ์ ์ด ์๋๊ฐ. Name์ด ๋ถ๋์์๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋๊ฐ. ํน์ฌ๋ ๊ทธ๋ด ๊ฒฝ์ฐ ์์ ์๊ธฐํ '๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ํผํด๋ผ'๋ผ๋ ๊ท์น์ ์๋ฐํ๋ค.
.๋ฐ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
์ง์ ์ธ ๋ํ๊ฐ ๊ฐ๋ฅํ๊ธฐ ์ํด์๋ ์ฝ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
private Date genymdhms; // 1.
private Date generationTimestamp; // 2.
1.์ ๊ฒฝ์ฐ ์ด๋ฆ์ ์๋ฏธ๊ฐ ํจ์ถ๋์ด ์์ด ๋ฐ์ํ๊ธฐ ์ด๋ ค์ธ๋ฟ๋๋ฌ ์๋ก ๊ฐ์ ์ดํดํ๋ ๊ณผ์ ์ด ํ์ํ๊ฒ ๋๋ค.
2.์ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ์ด๋ฆ์ผ๋ก ์ฝ๊ฒ ๋ํ๊ฐ ๊ฐ๋ฅํ๋ค.
.ํด๋์ค, ๊ฐ์ฒด ์ด๋ฆ
ํด๋์ค ์ด๋ฆ๊ณผ ๊ฐ์ฒด ์ด๋ฆ์ ๋ช ์ฌ๋ ๋ช ์ฌ๊ตฌ๊ฐ ์ ํฉํ๋ค.
- ์ข์ ์) Customer, WikiPage, Account, AddressParser
- ์ข์ง ์์ ์) Manager, Processor, Data, Info ๋ฑ, ๋์ฌ๋ ์ฌ์ฉํ์ง ์๋๋ค.
.๋ฉ์๋ ์ด๋ฆ
๋ฉ์๋ ์ด๋ฆ์ ๋์ฌ๋ ๋์ฌ๊ตฌ๊ฐ ์ ํฉํ๋ค.
- ์ข์ ์) postPayment, deletePage, save
์ ๊ทผ์(Accessor), ๋ณ๊ฒฝ์(Mutator), ์กฐ๊ฑด์(Predicate)๋ javabean ํ์ค์ ๋ฐ๋ผ ์์ get, set, is๋ฅผ ๋ถ์ธ๋ค.
String name = employee.getName();
customer.setName("mike");
if(paycheck.isPosted())
์์ฑ์(Constructor)๋ฅผ ์ค๋ณต ์ ์(overload)ํ ๋๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
๋ฉ์๋๋ ์ธ์๋ฅผ ์ค๋ช ํ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ค.
Complex fulcrumPoint = Complex.FromRealNumber(23.0); // 1.
Complex fulcrumPoint = new Complex(23.0); // 2.
1. ์ฝ๋๊ฐ 2. ์ฝ๋๋ณด๋ค ์ข๋ค. ์์ฑ์ ์ฌ์ฉ์ ์ ํํ๋ ค๋ฉด ํด๋น ์์ฑ์๋ฅผ private๋ก ์ ์ธํ๋ค.
.ํด๋ฒ/๋ฌธ์ ์์ญ์์ ๊ฐ์ ธ์จ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ.
์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋๋ ํ๋ก๊ทธ๋๋จธ๋ผ๋ ์ฌ์ค์ ๋ช
์ฌํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ์ฐ ์ฉ์ด, ์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ, ํจํด ์ด๋ฆ, ์ํ ์ฉ์ด ๋ฑ์ ์ฌ์ฉํด๋ ๊ด์ฐฎ๋ค. ๋ชจ๋ ์ด๋ฆ์ ๋ฌธ์ ์์ญ(domain)์์ ๊ฐ์ ธ์ค๋ ์ ์ฑ
์ ํ๋ช
ํ์ง ๋ชปํ๋ค. ๊ฐ์ ๊ฐ๋
์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ดํดํ๋ ๋๋ฃ๋ค์ด ๋งค๋ฒ ๊ณ ๊ฐ์๊ฒ ์๋ฏธ๋ฅผ ๋ฌผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
Visitor ํจํด์ ์น์ํ ํ๋ก๊ทธ๋๋จธ๋ AccountVisitor๋ผ๋ ์ด๋ฆ์ ๊ธ๋ฐฉ ์ดํดํ๋ค. ๊ธฐ์ ๊ฐ๋
์๋ ๊ธฐ์ ์ด๋ฆ์ด ๊ฐ์ฅ ์ ํฉํ ์ ํ์ด๋ค.
์ ์ ํ 'ํ๋ก๊ทธ๋๋จธ ์ฉ์ด'๊ฐ ์๋ค๋ฉด ๋ฌธ์ ์์ญ์์ ์ด๋ฆ์ ๊ฐ์ ธ์จ๋ค. ๊ทธ๋ฌ๋ฉด ์ฝ๋๋ฅผ ๋ณด์ํ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ถ์ผ ์ ๋ฌธ๊ฐ์๊ฒ ์๋ฏธ๋ฅผ ๋ฌผ์ด ํ์
ํ ์ ์๋ค.
์ฐ์ํ ํ๋ก๊ทธ๋๋จธ์ ์ค๊ณ์๋ผ๋ฉด ํด๋ฒ ์์ญ๊ณผ ๋ฌธ์ ์์ญ์ ๊ตฌ๋ถํ ์ค ์์์ผ ํ๋ค. ๋ฌธ์ ์์ญ ๊ฐ๋
๊ณผ ๊ด๋ จ์ด ๊น์ ์ฝ๋๋ผ๋ฉด ๋ฌธ์ ์์ญ์์ ์ด๋ฆ์ ๊ฐ์ ธ์์ผ ํ๋ค.
๐ ๋๋์ .
- ์ด๋ฆ ์ง๊ธฐ์ ์์ด ์๋ฏธ์๋ ์ด๋ฆ์ ์ง๊ณ ์ ๊น์ ์๊ฐ์ ๊ฐ์ ธ์ผ ํ ๊ฑฐ๊ฒ ๊ฐ๋ค.
- ์ฐ์ํ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋๊ธฐ ์ํด ํด๋ฒ ์์ญ๊ณผ ๋ฌธ์ ์์ญ์ ๊ตฌ๋ถ์ ๊ฐ์ง ์ค ์์์ผ ํ ๊ฒ ๊ฐ๋ค.
'Study > CleanCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Study][CleanCode - 2] 5. ํ์ ๋ง์ถ๊ธฐ (0) | 2022.07.13 |
---|---|
[Study][CleanCode - 1] 4. ์ฃผ์ (0) | 2022.07.11 |
[Study][CleanCode - 1] 3. ํจ์ (0) | 2022.07.01 |
[Study][CleanCode - 1] 1. ๊นจ๋ํ ์ฝ๋ (0) | 2022.06.28 |
[Study][CleanCode - 0] ๊ณํ (0) | 2022.06.24 |