๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- ๊ธฐํƒ€

[๊ฐœ๋ฐœ์ž ์ฑ…์ฝ๊ธฐ] ํด๋ฆฐ ์ฝ”๋“œ-์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  (5์žฅ ํ˜•์‹ ๋งž์ถ”๊ธฐ)

by Wonit 2022. 2. 15.

ํ•ด๋‹น ๊ธ€์€ Robert C.Martin ํด๋ฆฐ ์ฝ”๋“œ ๋ผ๋Š” ์ฑ…์„ ์ฝ๊ณ  ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌ ๋ฐ ํšŒ๊ณ ํ•˜๋Š” ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌํ•ญ์€ YES 24 ํด๋ฆฐ ์ฝ”๋“œ - ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

 

ํด๋ฆฐ ์ฝ”๋“œ - ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  (Uncle Bob)

 

  • ์œ„ํ‚ค๋ถ์Šค
  • ์ง€์€์ด: Robert C.Martin (Uncle Bob)
  • ์˜ฎ๊ธด์ด: ๋ฐ•์žฌํ˜ธ, ์ดํ•ด์˜

 

 


 

์ด๋ฒˆ ์žฅ์—์„œ ์ด์•ผ๊ธฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ

 

  • ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๋ฅผ ๋…์ž๋“ค์ด ์ฝ์—ˆ์„ ๋•Œ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•˜๊ณ , ์ผ๊ด€์ ์ด๋ฉฐ, ๊ผผ๊ผผํ•˜๋‹ค๊ณ  ๊ฐํƒ„ํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค. ์ „๋ฌธ๊ฐ€๊ฐ€ ์งฐ๋‹ค๋Š” ์ธ์ƒ์„ ์‹ฌ์–ด์ฃผ๋ฉด ์ข‹๊ฒ ๋‹ค.
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋ฉด ํ˜•์‹์„ ๊น”๋”ํ•˜๊ฒŒ ๋งž์ถฐ ์ฝ”๋“œ๋ฅผ ์งœ์•ผ ํ•œ๋‹ค

 

์ฝ”๋“œ์˜ ํ˜•์‹์ด ์ค‘์š”ํ•œ ์ด์œ 

 

  • ์šฐ๋ฆฌ์˜ ์†Œ์Šค์ฝ”๋“œ๋Š” ์–ธ์  ๊ฐ„ ๋ณ€ํ•œ๋‹ค. ๋ณ€ํ•˜๋Š” ์ƒํ™ฉ์— ์žˆ์–ด ์ผ๊ด€๋œ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž˜ ์ ๋ฆฝ๋œ ์ฝ”๋“œ์˜ ํ˜•์‹๊ณผ ๊ทœ์น™์ด ํ•„์š”ํ•˜๋‹ค.

 

์ •๋ฆฌ

 

  • ์ ์ ˆํ•œ ํ–‰ ๊ธธ์ด๋ฅผ ์œ ์ง€ํ•˜๋ผ, ์„ธ๋กœ ํ˜•์‹ ๋งž์ถ”๊ธฐ
    • ๊ฐœ๋…์€ ๋นˆ ํ–‰์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋ผ
      • ํ–‰์˜ ๋ฌถ์Œ์€ ๊ฐœ๋…์ ์œผ๋กœ ๋™์ผํ•œ ๋ถ€๋ถ„์ด๋ผ ํ•ด์„๋œ๋‹ค
    • ๋ณ€์ˆ˜๋Š” ์‚ฌ์šฉํ•˜๋Š” ์œ„์น˜์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์ด ์„ ์–ธํ•˜๋ผ
      • ํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค ๋งจ ์ฒ˜์Œ์— ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค
    • ์ข…์† ํ•จ์ˆ˜
      • ํ•œ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด ๋‘ ํ•จ์ˆ˜๋Š” ์„ธ๋กœ๋กœ ๊ฐ€๊นŒ์ด ๋ฐฐ์น˜ํ•œ๋‹ค
      • ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ณด๋‹ค ๋จผ์ € ์ž‘์„ฑํ•œ๋‹ค.

 

public class CleanCode {
  private String bookname; // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค ๋งจ ์ฒ˜์Œ์—
  private Integer price;

  /**
  * ๊ฐœ๋…์  ๋ฌถ์Œ์€ ํ–‰์œผ๋กœ ๊ตฌ๋ถ„
  */
  public void greet() {
    String info = toString(); // ๋ณ€์ˆ˜ ์„ ์–ธ์€ ์‚ฌ์šฉํ•˜๋Š” ์œ„์น˜์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์ด
    System.out.println(info);
  }

  private String toString() { // ํ˜ธ์ถœ๋˜๋Š” (Callee) ํ•จ์ˆ˜๋Š” ์•„๋ž˜๋กœ
    return bookname + " " + price;
  }
}

 

  • ๊ฐ€๋กœ ํ˜•์‹ ๋งž์ถ”๊ธฐ
    • ๊ฐ€๋กœ์˜ ๊ธธ์ด๋Š”?
      • Uncle Bob ๊ธฐ์ค€์—์„œ๋Š” 100์ž๋‚˜ 120์ž๋ฅผ ์ถ”์ฒœํ•จ
      • ์™ ๋งŒํ•˜๋ฉด IntelliJ ์—์„œ ์ง€์ •ํ•œ ์—ด์˜ ๊ธธ์ด๋ฅผ ๋„˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์„๊ฒƒ ๊ฐ™์Œ
    • ๊ฐ€๋กœ ๊ณต๋ฐฑ๊ณผ ๋ฐ€์ง‘๋„
      • ๊ฐ€๋กœ ๊ณต๋ฐฑ : ๊ณต๋ฐฑ์„ ํ†ตํ•ด์„œ ๋ฐ€์ ‘ํ•œ ๊ฐœ๋…๊ณผ ๋Š์Šจํ•œ ๊ฐœ๋…์„ ํ‘œํ˜„ํ•จ
      • ๋ฐ€์ง‘๋„
  •  
public void measureLine(String line) {
  int lineSize = line.length(); // ๊ณต๋ฐฑ์„ ์ด์šฉํ•ด์„œ ๋Š์Šจํ•œ ๊ฐœ๋…์„ ํ‘œํ˜„
  formatter.format(line, lineSize); // ๊ณต๋ฐฑ์„ ์—†์•ฐ์œผ๋กœ ๋ฐ€์ง‘๋œ ๊ฐœ๋…์„ ํ‘œํ˜„ (ํ•จ์ˆ˜์™€ ์ธ์ˆ˜ ์‚ฌ์ด๋Š” ๋ฐ€์ ‘ํ•˜๋ฏ€๋กœ)
}

 

  • ํŒ€์˜ ๊ทœ์น™
    • ํŒ€์˜ ๊ทœ์น™์ด ๊ณง ๋‚˜์˜ ๊ทœ์น™์ด๋‹ค.
    • ํŒ€์€ ํ•œ ๊ฐ€์ง€์˜ ๊ทœ์น™์— ํ•ฉ์˜ํ•ด์•ผ์ง€ ์ผ๊ด€์ ์ธ ์Šคํƒ€์ผ์˜ ์ฝ”๋“œ๊ฐ€ ์ƒ์‚ฐ๋จ

 

๋‚˜์˜ ํ•ด์„๊ณผ ํšŒ๊ณ 

 

์ด๋ฒˆ ์žฅ์—์„œ ๋งํ•˜๋Š” ๋‚ด์šฉ์€ ์ผ๊ด€๋œ ํ˜•์‹์„ ์œ„ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ•์ด๋‹ค.


์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ํ˜•์‹์ด๋ผ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด๋ผ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

 

์ด๋ฒˆ ์žฅ์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๋‚ด์šฉ๋“ค์€ ๋‹คํ–‰ํžˆ? ๋‚ด๊ฐ€ ์–ด๋Š์ •๋„ ์ดํ•ดํ•ด์™”๊ณ  ์‹ค์ œ๋กœ ์ง€ํ‚ค๋ ค๋Š” ๊ทœ์น™๋“ค์ด์—ˆ๋˜๊ฒƒ ๊ฐ™๋‹ค.

 

ํ•˜์ง€๋งŒ ๊ทธ๋Ÿผ์—๋„ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ถ€๋ฌธ์€ ๋ฐ”๋กœ ์ ์ ˆํ•œ ํ–‰์˜ ๊ธธ์ด ์œ ์ง€์ด๋‹ค.

 

์ ์ ˆํ•œ ํ–‰์˜ ๊ธธ์ด๊ฐ€ ์œ ์ง€๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ ํ•œ ๊ฐ€์ง€๋งŒ ์ œ๋Œ€๋กœ ํ•œ๋‹ค๋ผ๋Š” ๊ทœ์น™์œผ๋ฅด ์ž˜ ์ง€์ผœ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

์•„๋ฌด๋ฆฌ ํ–‰์˜ ๊ธธ์ด๋ฅผ ์œ„์˜ ๋ฐฉ๋ฒ•๋“ค์„ ํ†ตํ•ด์„œ ์งง๊ฒŒ ์œ ์ง€ํ•œ๋‹ค๊ณ  ํ•ด๋„ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ํ•œ๋‹ค๋ฉด ๊ธด ๊ธธ์ด์˜ ํ–‰์ด ๋‚˜์˜ฌ์ˆ˜ ๋ฐ–์— ์—†๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์˜ค๋Š˜๋„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ƒ๊ฐํ•ด๋ณธ๋‹ค

 

ํ•œ ๋ฒˆ์— ํ•œ ๊ฐ€์ง€๋งŒ ์ œ๋Œ€๋กœ ํ•œ๋‹ค

๋Œ“๊ธ€