230116(์)
๐ ์ฑ์ฅ์ผ์ง 3.1
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
๐ณ ํค์๋ (1.0)
์ต๋ํ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ, ์ถํ์ ๋ณด๋ฉด์ ์ค์ค๋ก ์ค๋ช
๐ ๊ฒฝํ ์์ฃผ๋ก (2.0)
๋จ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ๋ณด๋ค ๋ฌด์์ ๋ฐฐ์ ๊ณ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์งง๊ณ ๊ฐ๋จํ๊ฒ ์์ฑ
โ๏ธ ์ ํด์ง ํ ํ๋ฆฟ์ ๋ง์ถฐ์ (3.0)
ํค์๋, ๊ฒฝํ ๋ชจ๋ ์ข๋ค. ๋ค๋ง ๋งค์ผ ์์ฑํ๊ธฐ๋ก ๋ง์ ๋จน์๋งํผ ํต์ฌ๋ง ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ ์ ์๊ฒ ํ ํ๋ฆฟ์ ์์ฑ (3.1) 230102๋ถํฐ ์์๋๋ ํ์ต์ ๊ดํ ๋ด์ฉ ์ถ๊ฐ
๐ ์ค๋์ ํค์๋
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming; OOP)
- ํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ํ์์ผ
์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด
๋ก ๋ง๋ค๊ณ ๊ฐ์ฒด๋ค๊ฐ์ ์ํธ์์ฉ์ ํตํด ๋ก์ง์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ
ํด๋์ค
- (์๋ฐ์คํฌ๋ฆฝํธ)๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ ํ๋ฆฟ์ด์ ๋ฐฉ๋ฒ ์ค ํ๋.
- ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ด๊ธฐ ์ํ ์ค๊ณ๋ ํน์ ํ
- ํด๋์ค๋ ๋ณ์(ํ๋กํผํฐ)์ ์ด๋ฅผ ๋ค๋ฃจ๋ ๋ฉ์๋๋ก ๊ตฌ์ฑ๋์ด์๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์์ ํด๋์ค๋ ํ๋กํ ํ์ ์ ํตํด ๊ตฌ์ฑ๋ ์์ฑ์ ํจ์์ด๋ค.
๊ฐ์ฒด ์ธ์คํด์ค
- ๊ฐ์ฒด: ์ํํธ์จ์ด ์ธ๊ณ์ ๊ตฌํํ ๋์. ๊ฐ์ ์ ์ฅํ๋ ๋ณ์์ ์์ ์ ์ํํ ๋ฉ์๋๋ฅผ ์๋ก ์ฐ๊ด๋ ๊ฒ๋ค๋ผ๋ฆฌ ๋ฌถ์ด์ ๋ง๋ ๊ฒ
- ์ธ์คํด์ค: ์ค๊ณ๋๋ฅผ ๋ฐํ์ผ๋ก ์ํํธ์จ์ด ์ธ๊ณ์ ๊ตฌํ๋ ๊ตฌ์ฒด์ ์ธ ์ค์ฒด, ์ฆ ๊ฐ์ฒด๋ฅผ ์ํํธ์จ์ด์ ์ค์ฒดํํ๋ฉด ๊ทธ๊ฒ์ ์ธ์คํด์ค๋ผ๊ณ ํ๋ค. ์ค์ฒดํ๋ ์ธ์คํด์ค๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ค.
์ธ์คํด์ค๋ ์ด๋ค ์๋ณธ(์ถ์์ ์ธ ๊ฐ๋ )์ผ๋ก๋ถํฐ ์์ ๋ ๋ณต์ฌ๋ณธ์ ์๋ฏธํ ๋๋ ์ฌ์ฉํ๋ค. ex) ์คํ ํ๋ก์ธ์ค๋ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง
์ฅ์
- ํด๋์ค ๋จ์๋ก ๋ชจ๋ํํ์ฌ ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ์ ๋ฌด ๋ถ๋ด์ด ํธ๋ฆฌํ๋ฏ๋ก ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ ํฉํ๋ค.
- ํด๋์ค ๋จ์๋ก ์์ ์ด ๊ฐ๋ฅํ์ฌ ์ ์ง ๋ณด์๊ฐ ํธ๋ฆฌํ๋ค.
- ์ฌ์ฌ์ฉ ๋ฐ ์์์ ํตํ ํ์ฅ์ฑ์ด ๋ฐ์ด๋๋ค.
๋จ์
- ์ฒ๋ฆฌ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค. => โ
- ๊ฐ์ฒด์ ์๊ฐ ๋ง์์ง์ ๋ฐ๋ผ ์ฉ๋์ด ์ปค์ง ์ ์๋ค.
- ์ค๊ณ์ ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํ๋ค.
๊ฐ์ฒด ์งํฅ๊ณผ ์ ์ฐจ ์งํฅ์ ๋ฐ๋ ๊ด๊ณ์ธ๊ฐ?
=> ์๋๋ค. ๊ทธ์ ๊ฐ์ฒด ์งํฅ์๊ฐ์ฒด
์ ์ด์ ์ ๋๊ณ , ์ ์ฐจ ์งํฅ์์์ฐจ์ ์ธ ์ฝ๋ ์คํ
์ ์ด์ ์ ๋๋ ๊ด์ ์ ์ฐจ์ด๊ฐ ์์ ๋ฟ์ด๋ค.
์ฆ, ์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ๋ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ๊ณ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๋ ์ ์ฐจ๋ฅผ ๋ฐ์ง๋ค.
์ถ์ํ
- ๊ฐ์ฒด์์ ๊ณตํต๋ ์์๊ณผ ํ์๋ฅผ ์ถ์ถํ๋ ๊ฒ
- ๊ณตํต์ ์์ฑ๊ณผ ํ์๋ฅผ ์ฐพ์์ ํ์ ์ ์ ์ํ๋ ๊ณผ์
- ๋ถํ์ํ ์ ๋ณด๋ ์จ๊ธฐ๊ณ ์ค์ํ ์ ๋ณด๋ง์ ํํํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ์ ๊ฐ๋จํ๊ฒ ๋ง๋๋ ๊ณผ์
ex) ์๋์ฐจ๋ผ๋ ์ถ์ํ ์งํฉ์ ๋ง๋ค์ด๋๊ณ ์๋์ฐจ๋ค์ด ๊ฐ์ง ๊ณตํต์ ์ธ ํน์ง๋ค์ ๋ง๋ค์ด์ ํ์ฉํ๋ค.
์บก์ํ
- ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๋ค์ ๊ฒฐํฉ์์ผ์ ๋ฌถ๋ ๊ฒ(์ฐ๊ด๋ ๋ณ์์ ํจ์๋ฅผ ํ๋๋ก ๋ฌถ์)
- ๊ฒฐํฉ๋: ์ด๋ค ๊ธฐ๋ฅ์ ์คํํ๋ ๋ฐ ๋ค๋ฅธ ํด๋์ค๋ ๋ชจ๋๋ค์ ์ผ๋ง๋ ์์กดํ๋๊ฐ
- ์์ง๋: ํด๋์ค๋ ๋ชจ๋ ๋ด์ ์์๋ค์ด ์ผ๋ง๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๋๊ฐ
- ์ฆ, ์ฌ๋ฐ๋ฅธ ์บก์ํ๋ฅผ ํตํด
๊ฒฐํฉ๋๋ ๋ฎ์ถ๊ณ ์์ง๋๋ ๋์ด๋๋ก ํด์ผํ๋ค.
ํนํ ์บก์ํ๋ฅผ ํตํด ์ ๋ณด์๋(์ธ๋ถ์์ ์ ํ์๊ฐ ์๋ ์ ๋ณด๋ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ํ)์ ํตํด ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ๋๋ค.
ex) ์ค๋งํธํฐ ์ถฉ์ ์ ํ๋๋ผ๋ ๋ด๋ถ์์ ์ด๋ป๊ฒ ์ถฉ์ ๋๋์ง ์ ํ์๋ ์๋ค.
์์
- ํด๋์ค์ ์์ฑ(๋ณ์)๊ณผ ํ์(๋ฉ์๋)๋ฅผ ํ์ ํด๋์ค์ ๋ฌผ๋ ค์ฃผ์ด ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ์์ฑ๊ณผ ํ์๋ฅผ ์ด์ฉํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ
- ์ฅ์ : ์ฌ์ฌ์ฉ์ผ๋ก ์ธํ ์ฝ๋๊ฐ ์ค์ด๋ ๋ค. ๋ฒ์ฉ์ ์ธ ์ฌ์ฉ์ด ๊ฐ๋ฅ. ์๋ฃ์ ๋ฉ์๋์ ์์ ๋ก์ด ์ฌ์ฉ ๋ฐ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅ.
- ๋จ์ : ์์ ํด๋์ค์ ๋ณ๊ฒฝ์ด ์ด๋ ต๋ค. ๋ถํ์ํ ํด๋์ค๊ฐ ์ฆ๊ฐํ ์ ์๋ค. ์์์ด ์๋ชป ์ฌ์ฉ๋ ์๋ ์๋ค.
๋คํ์ฑ
- ํ๋์ ๋ณ์๋ช , ํจ์๋ช ์ด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ํด์๋ ์ ์๋ ๊ฒ
- ํ๋์ ํด๋์ค ๋ด๋ถ์ ๊ฐ์ ์ด๋ฆ์ ํ์๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ํ๊ฑฐ๋(์ค๋ฒ๋ก๋ฉ) ์์ ํด๋์ค์ ํ์๋ฅผ ํ์ ํด๋์ค์์ ์ฌ์ ์ํ์ฌ ์ฌ์ฉ(์ค๋ฒ๋ผ์ด๋ฉ)
- ์ค๋ฒ๋ก๋ฉ: ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ์ธ์์ ๊ฐ์๋ ์๋ฃํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํ๋๊ฒ
- ์ค๋ฒ๋ผ์ด๋ฉ: ์์ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค๊ฐ ์ฌ์ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ
SOLID(๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น 5๊ฐ์ง)
1. ๋จ์ผ ์ฑ ์ ์์น(Single Responsibility Principle; SRP)
ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
- ์ง์ผ์ง์ง ์์ ์, ํ ์ฑ ์์ ๋ณ๊ฒฝ์ ์ํด ์ฑ ์๊ณผ ๊ด๋ จ๋ ๋ค๋ฅธ ์ฝ๋์ ์ํฅ์ด ๊ฐ ์๋ ์๋ค.
2. ๊ฐ๋ฐฉ-ํ์ ์์น(Open/Closed Principle; OCP)
์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
3. ๋ฆฌ์ค์ฝํ ์นํ ์์น(Liskov Substitution Principle; LSP)
์์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ํ์ ํ์ ์ ๊ฐ์ฒด๋ก ์นํํด๋, ์์ ํ์ ์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํ๋ค.
4. ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(Interface Segregation Principle; ISP)
- ํด๋ผ์ด์ธํธ๊ฐ ํ์๋ก ํ๋ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํจ์ผ๋ก์จ ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ์ด ์์ด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
์ธํฐํ์ด์ค๋ ํ์ค, ์ฝ์, ๊ท์น์ผ๋ก์ ์ค์ง ์ถ์ ๋ฉ์๋์ ์์๋ง์ ๋ฉค๋ฒ๋ก ๊ฐ์ง ์ ์๋ค.
>์ฐธ๊ณ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ง ์๋๋ค.
5. ์์กด๊ด๊ณ ์ญ์ ์์น(Dependency Inversion Principle; DIP)
- ์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค.(๊ตฌ์ฒดํ๊ฐ ์ถ์ํ๋ณด๋ค ๋จผ์ ๊ฐ ๋๋ ์ญ์ ์ด ์ผ์ด๋์๋ ์๋๋ค.)
- ๊ณ ์์ค ๋ชจ๋(ํด๋์ค)์ด ์ ์์ค ๋ชจ๋(ํด๋์ค)์ ์์กดํ๋ฉด ์๋๋ค.
- ์ ์์ค ํด๋์ค: ๋ ์์ ํด๋์ค
์ฐธ๊ณ ์๋ฃ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ์ด๋
์์กด๊ด๊ณ ์ญ์ ์์น
๐ ์์ฝ ๋ฐ ํ๋ฃจ ๊ฐ๋จ ํ๊ณ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ!!! ์์งํ ์์ ์ ํผ์ ๊ณต๋ถํ์ ๋ class๋ ์ซ๊ณ ๊ฐ์ฒด์งํฅ์ด ๋๋์ฒด ๋ญ์ง๋ ๋ชฐ๋๋ค. ๋ญ๊ฐ ์๊ณ ๋ฆฌ์ฆ ํ ๋์ ๋ฐฉ๋ฒ์ด๋ ๋ค๋ฅธ ๋๋..? ์๋ง๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ ๋๋ ์ ์ฐจ์งํฅ์ชฝ์ผ๋ก ๋จธ๋ฆฌ๋ฅผ ๊ตด๋ฆฌ๋ค๋ณด๋, ์์ฐ์ค๋ ๊ฐ์ฒด์งํฅ์ด ๋ฏ์ค๊ฒ ๋๊ปด์ก๋ ๊ฒ ์๋๊น ์ถ๋ค. ํ๋ฐ ์ง๊ธ์ ์ค์ ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ผ๊ณ ํ์ ๋, ๊ฐ์ฒด์งํฅ์ด ์๋๋ฉด ์ด๋ป๊ฒ ๊ตฌํํด์ผํ ๊น ๋ผ๋ ์๊ฐ์ด ๋ค ์ ๋๋ก ๊ฐ์ฒด์งํฅ์ ์์คํจ์ ์๊ฒ ๋์๋คโฆ ์ผ๋จ ๋ฌด์๋ณด๋ค ํ๋์ ๊ฐ์ฒด์ ์ง์คํด์ ๊ทธ ๊ฐ์ฒด๊ฐ ๊ฐ๋ ํน์ฑ(ํ๋กํผํฐ)๊ณผ ๊ทธ๊ฑธ ์ด์ฉํ ์ด๋ค ๋์(๋ฉ์๋)๋ฅผ ํํํ ์ ์๋ ๊ฒ ์์ฒญ๋๊ฒ ์ ์ฉํ๋ค. ๋ฌผ๋ก ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ฝ๋๋ฅผ ์ค๊ณํ๋ ๊ฑด ์์ง์ ์ฝ์ง ์๋ค. ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ผ๋ฆฌ ์ด๋ป๊ฒ ์์ํ๋ ๊ฒ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ฐ์ฒด๋ฅผ ํจ๊ป ์ฌ์ฉํ ๋ ์์์ผ๋ก ํด์ผํ๋์ง ์กฐํฉ์ผ๋ก ํด์ผํ๋์งโฆ ์กฐ๊ธ์ ํท๊ฐ๋ฆฌ์ง๋ง ํ์คํ ์ฐ์ตํ๋ฉด์ ๊ณ์ ๋๊ณ ์๋ ๊ธฐ๋ถ์ด ๋ ๋ค. ๊ทธ๋ฅ ๋ฌด์์ ์ฝ๋๋ฅผ ์น๋ ๊ฒ ์๋๋ผ, ์ ๋ง ์ด๋ป๊ฒ ํ๋ ๊ฒ ๊ฐ๊ฐ์ ํด๋์ค ํน์ ๋ชจ๋์ ์ญํ ๊ณผ ์ฑ ์์ ๋ถ๋ฆฌํ๋ฉด์ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋์ง ๊ณ ๋ฏผํ๋ฉด์ ์์ฑํ์!
-
-
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming; OOP)
-
SOLID(๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น 5๊ฐ์ง)
- 1. ๋จ์ผ ์ฑ ์ ์์น(Single Responsibility Principle; SRP)
- 2. ๊ฐ๋ฐฉ-ํ์ ์์น(Open/Closed Principle; OCP)
- 3. ๋ฆฌ์ค์ฝํ ์นํ ์์น(Liskov Substitution Principle; LSP)
- 4. ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(Interface Segregation Principle; ISP)
- 5. ์์กด๊ด๊ณ ์ญ์ ์์น(Dependency Inversion Principle; DIP)
- ์ฐธ๊ณ ์๋ฃ
-