์ ๋ฒ ํฌ์คํ ์ ์ด์ด ๋๋ค๋ฅธ ๋ฏธ์ ์ด ์ ๋ฌ๋์๋ค.
ํฌ๋ฐํ ํ๋ฅ ๋ก ๋์น์ด๋ ๋์์ผ๋ฉด ์ข๊ฒ ์ด์.
๋์น์ด๊ฐ ๋์ค๋ฉด ๋ํ๋ ๋๋๊ณ , ๊ฐ์ด ์ฐ์ฑ ๋ ๊ฐ ์ ์์ด์.
๊ณ ์์ด ์ข ๋ฅ๊ฐ ์์ฆ ๋ณ๋ก ๋ฐ๋๊ณ , ์๋ก ์ถ๊ฐ๋ ์ ์์ผ๋ ์ฐธ๊ณ ํด์ฃผ์ธ์!
์ ๋ฒ์ฒ๋ผ ๋ค์ ์๊ตฌ์ฌํญ์ ๋ถ์ํด๋ณด์.
๊ณ ์์ด 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()) } }