๐Ÿ“Œํ”„๋ก ํŠธ์—”๋“œ ์˜ˆ์‹œ๋กœ ์‚ดํŽด๋ณด๋Š” SOLID ์›์น™ 3) Interface Segregation Principleย (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™), Dependency Inversion Principle (์˜์กด ์—ญ์ „ ์›์น™)

maru5mangoยท2022๋…„ 6์›” 4์ผ
0

๋””์ž์ธํŒจํ„ด

๋ชฉ๋ก ๋ณด๊ธฐ
4/4

๋ฏธ์…˜

์ €๋ฒˆ ํฌ์ŠคํŒ…์— ์ด์–ด ๋˜๋‹ค๋ฅธ ๋ฏธ์…˜์ด ์ „๋‹ฌ๋˜์—ˆ๋‹ค.

๐Ÿ“Œํ”„๋ก ํŠธ์—”๋“œ ์˜ˆ์‹œ๋กœ ์‚ดํŽด๋ณด๋Š” SOLID ์›์น™ 2)๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™, ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

ํฌ๋ฐ•ํ•œ ํ™•๋ฅ ๋กœ ๋ƒ์˜น์ด๋„ ๋‚˜์™”์œผ๋ฉด ์ข‹๊ฒ ์–ด์š”.
๋ƒ์˜น์ด๊ฐ€ ๋‚˜์˜ค๋ฉด ๋Œ€ํ™”๋„ ๋‚˜๋ˆ„๊ณ , ๊ฐ™์ด ์‚ฐ์ฑ…๋„ ๊ฐˆ ์ˆ˜ ์žˆ์–ด์š”.
๊ณ ์–‘์ด ์ข…๋ฅ˜๊ฐ€ ์‹œ์ฆŒ ๋ณ„๋กœ ๋ฐ”๋€Œ๊ณ , ์ƒˆ๋กœ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

STEP1. ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„

์ €๋ฒˆ์ฒ˜๋Ÿผ ๋‹ค์‹œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ถ„์„ํ•ด๋ณด์ž.

  • ๊ณ ์–‘์ด์ง€๋งŒ ๊ณ ์–‘์ด๋ณด๋‹ค ๋” ๋งŽ์€ ํ–‰๋™์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ƒ์˜น์ด๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
  • ๊ณ ์–‘์ด ์ข…๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค.(์ฝ”๋“œ์—์„œ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.)

STEP2. ํ•  ์ผ ๋‚˜๋ˆ„๊ธฐ

  • ๊ณ ์–‘์ด
    • ๊ณ ์–‘์ด ๊ณตํ†ต data(์ด๋ฆ„, ๋‚˜์ด, ํ’ˆ์ข…?)
    • ๊ณ ์–‘์ด ๊ณตํ†ต ํ–‰๋™ method("eat", "walk", "wake", "sleep", "shower", "drink")
    • ๊ณ ์–‘์ด ์ถ”๊ฐ€ ํ–‰๋™ method("talk", "take a stroll")
    • ๊ณ ์–‘์ด ๊ณตํ†ต ๋ชจ์–‘ (์–ผ๊ตด, ๊ท€, ๋ˆˆ, ์ฝ”, ์ˆ˜์—ผ, ์ž…, ๋ชธํ†ต, ๊ผฌ๋ฆฌ)
    • ๊ณ ์–‘์ด๋ณ„ ๊ณตํ†ต dom ์ด๋ฒคํŠธ(mousehover, leave, click)
    • ๊ณ ์–‘์ด๋ณ„ ๋ชจ์–‘ ( ์ƒ‰์ƒ, ํฌ๊ธฐ )

๊ณ ์–‘์ด class

  • ๊ณ ์–‘์ด ๊ณตํ†ต data + ๊ณตํ†ต ํ–‰๋™ + ๊ณตํ†ต ๋ชจ์–‘ + ๊ณตํ†ต dom ์ด๋ฒคํŠธ
  • ๊ณ ์–‘์ด ์ƒ์„ฑ : ๊ณ ์–‘์ด Class + ๊ณ ์–‘์ด๋ณ„ ๋ชจ์–‘(์ƒ‰์ƒ, ํฌ๊ธฐ) + ๊ณ ์–‘์ด ์ถ”๊ฐ€ ํ–‰๋™?

๐Ÿ“‘ SOLID์›์น™ 4. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(Interface Segregation Principle)

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

๐Ÿ“‘ SOLID์›์น™ 5. ์˜์กด ์—ญ์ „ ์›์น™(Dependency Inversion Principle )

  • ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ, ๊ตฌ์ฒด์ ์ธ ๊ฒƒ ๋ณด๋‹ค๋Š” ์ถ”์ƒ์ ์ธ ๊ฒƒ ์ฆ‰, ๋ณ€ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณ ์–‘์ด๊ฐ€ ๋›ฐ์–ด๋…ธ๋Š” playground์— ๊ณ ์–‘์ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. playground๋Š” ๊ณ ์–‘์ด ๊ฐ์ฒด์™€ ์˜์กด์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
class Playground{
  getCat(){
    this.cat = new Cat();
  }
  getBlueCat(){
    this.blueCat = new BlueCat();
  }
  get๋ƒ์˜น(){
    this.๋ƒ์˜น = new ๋ƒ์˜น();
  }
  play(){
    if(this.cat) this.cat.play();
    if(this.blueCat) this.blueCat.play();
    if(this.๋ƒ์˜น) this.๋ƒ์˜น.talk();
  }
}

์ด ๋•Œ playground๊ฐ€ ๊ตฌ์ฒด์ ์ธ catํ˜•ํƒœ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ถ”์ƒํ™”๋œ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋‹ค๋ค„ ์˜์กด์„ฑ์„ ๋Š์Šจํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ์˜์กด ์—ญ์ „ ์›์น™์ด๋ผ๊ณ  ํ•œ๋‹ค.

class Playground{
  addCat(catClass){
    this.catList.push(addCat)
  }
  playCat(catClass){
    // ์ด ๋•Œ ๋ƒ์˜น์ด ํด๋ž˜์Šค๋Š” play์˜ ํ†ต์ผ์„ฑ์„ ์œ„ํ•ด adaptor ํŒจํ„ด ๊ฐ™์€ ๊ฒƒ์„ ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    this.catList.forEach((cat) => cat.play())
  }
}

STEP3. ๊ตฌํ˜„ํ•˜๊ธฐ

  • ๋‹ค์Œ ํฌ์ŠคํŒ…์œผ๋กœ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€