Study/CleanCode

[Study][CleanCode - 1] 2. ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„

youn12 2022. 6. 28. 17:54
๐Ÿ“‹ ๋ชฉ์ฐจ.

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๋ผ๋Š” ์ด๋ฆ„์„ ๊ธˆ๋ฐฉ ์ดํ•ดํ•œ๋‹ค. ๊ธฐ์ˆ  ๊ฐœ๋…์—๋Š” ๊ธฐ์ˆ  ์ด๋ฆ„์ด ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์„ ํƒ์ด๋‹ค.

 ์ ์ ˆํ•œ 'ํ”„๋กœ๊ทธ๋ž˜๋จธ ์šฉ์–ด'๊ฐ€ ์—†๋‹ค๋ฉด ๋ฌธ์ œ ์˜์—ญ์—์„œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณด์ˆ˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ถ„์•ผ ์ „๋ฌธ๊ฐ€์—๊ฒŒ ์˜๋ฏธ๋ฅผ ๋ฌผ์–ด ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 ์šฐ์ˆ˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์™€ ์„ค๊ณ„์ž๋ผ๋ฉด ํ•ด๋ฒ• ์˜์—ญ๊ณผ ๋ฌธ์ œ ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•  ์ค„ ์•Œ์•„์•ผ ํ•œ๋‹ค๋ฌธ์ œ ์˜์—ญ ๊ฐœ๋…๊ณผ ๊ด€๋ จ์ด ๊นŠ์€ ์ฝ”๋“œ๋ผ๋ฉด ๋ฌธ์ œ ์˜์—ญ์—์„œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.


๐Ÿ“ ๋Š๋‚€์ .

- ์ด๋ฆ„ ์ง“๊ธฐ์— ์žˆ์–ด ์˜๋ฏธ์žˆ๋Š” ์ด๋ฆ„์„ ์ง“๊ณ ์ž ๊นŠ์€ ์ƒ๊ฐ์„ ๊ฐ€์ ธ์•ผ ํ•  ๊ฑฐ๊ฒƒ ๊ฐ™๋‹ค.
- ์šฐ์ˆ˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ํ•ด๋ฒ• ์˜์—ญ๊ณผ ๋ฌธ์ œ ์˜์—ญ์˜ ๊ตฌ๋ถ„์„ ๊ฐ€์งˆ ์ค„ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.