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

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

by Wonit 2022. 3. 4.

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

 

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

 

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

 

 


 

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

 

์†Œํ”„ํŠธ์›จ์–ด ๊ฒฝ๊ณ„๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•๊ณผ ๊ธฐ๊ต๋ฅผ ์„ค๋ช…ํ•œ๋‹ค

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

 

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

 

๊ฒฝ๊ณ„๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋จธ๋ฆฟ์†์— ์‚ฐ๋ฐœ์ ์œผ๋กœ ํฉ๋ฟŒ๋ ค์ง„ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž˜ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๊ฐ€ ๋˜์—ˆ๋‹ค.

 

๋‚˜๋„ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ ๋ฌด์˜์‹์ ์œผ๋กœ ๊ฒฝ๊ณ„๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค์ด ์žˆ๋‹ค. ์—ญ์‹œ ๊ทธ๋ ‡์ง€ ์•Š์•˜๋˜ ๋ถ€๋ถ„๋“ค๋„ ์กด์žฌํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ฒฝ๊ณ„๋ฅผ ๋‚˜๋„ ๋ชจ๋ฅด๋Š” ์‚ฌ์ด์— ์ฒด๊ฐํ•˜๊ณ  ์žˆ๋”๋ผ ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

์˜ˆ๋กœ HTTP Client ๋ฅผ ์ด์šฉํ•ด์„œ Open API ๋ฅผ ์กฐํšŒํ•  ๋•Œ, ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์กฐ๊ธˆ์ด๋ผ๋„ ๋” ๋‚ด ์ž…๋ง›์— ๋งž๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ทธ๋“ค์„ ๊ณ ๋ฆฝ์‹œํ‚ค๋ ค ๋…ธ๋ ฅํ•œ ํฌ์ธํŠธ๋“ค์ด ์žˆ๋Š”๋ฐ ์ด์ œ๋Š” ํ™•์‹คํžˆ ๊ทธ ํฌ์ธํŠธ๊ฐ€ ๊ฒฝ๊ณ„์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์ด ๊ฒฝ๊ณ„๋Š” ๋น„๋‹จ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํ•ด๋‹น๋˜๋Š” ๋ง์ด ์•„๋‹ˆ๋‹ค.

 

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ด๋ณด์ž.

 

๊ฒฝ๊ณ„๊ฐ€ ์ž˜ ์„ค์ •๋˜์ง€ ์•Š์€ ์ฝ”๋“œ์ด๋‹ค.

 

class Teacher {

  Homework assign() {
    Homework homework = new Homework();
    return homework;
  }
}

class Student {

  HomeworkResult doHomework(Homework homework) {

    boolean isValid = HomeworkValidator.validate(homework);

    if (!isValid) {
      System.out.println("์ˆ™์ œ๊ฐ€ ์ด์ƒํ•˜๋‹ค, ์•ˆ ํ•œ๋‹ค");
    }
    System.out.println("์ˆ™์ œ๋ฅผ ํ•œ๋‹ค");
  }
}

 

๊ฐ•์‚ฌ๋Š” assign() ์„ ํ†ตํ•ด์„œ ๊ณผ์ œ๋ฅผ ์ถœ์ œํ•ด์ค€๋‹ค. ๊ทธ๋Ÿผ ํ•™์ƒ์€ ํ•ด๋‹น ๊ณผ์ œ๋ฅผ ์–ด๋””์„ ๊ฐ€ ๋ฐ›์•„์„œ ๊ณผ์ œ๊ฐ€ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์ด ์ฝ”๋“œ๋Š” ๊ฒฝ๊ณ„๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๊ณ„๋Š” ๊ฐ•์‚ฌ๋Š” ๊ณผ์ œ๋ฅผ ์ž˜ ์ถœ์ œํ•˜๋Š” ์ฑ…์ž„์— ์„ ์„ ๊ทธ์„ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ˜๋ฉด ๊ฒฝ๊ณ„๋ฅผ ์ž˜ ์„ค์ •ํ•ด์ค€ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

 

class Teacher {

  Homework assignment() {
  
    Homework homework = new Homework();
    boolean isValid = HomeworkValidator.validate(homework);

    if (isValid) {
      throw IllegalStateException();
    }

    return homework;
  }
}

 

๊ฐ•์‚ฌ๋Š” ์œ„์™€ ๊ฐ™์ด ๊ณผ์ œ๋ฅผ ์ถœ์ œํ•  ๋•Œ ์Šค์Šค๋กœ ๊ณผ์ œ๊ฐ€ ์œ ํšจํ•œ์ง€ ํ™•์ธ์„ ํ•˜๊ณ  ๊ทธ ์ฑ…์ž„์„ ๋‹คํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ ‡๋“ฏ ๊ฒฝ๊ณ„๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ์–ด๋–ค, ๋ฟŒ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์ด๋ผ๊ณ  ๋‹ค๊ฐ€์™”๋‹ค.

 

๋Œ“๊ธ€