์ฃผ๋์ด ๊ฐ๋ฐ์์ ๊ฐ์ธ ๊ณต๋ถ ๊ณผ์ ์ ๊ธฐ๋กํฉ๋๋ค.
ํจ๋ฌ๋ค์: ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๊ฐ๋ฐ์์๊ฒ ํ๋ก๊ทธ๋๋ฐ์ ๊ด์ ์ ๊ฐ๊ฒํ๊ณ ๊ฒฐ์ ํ๋ ์ญํ ์ ํ๋ค
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP: Object Oriented Programming)
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋?
๊ธฐ๋ฅ์ฑ์ ๊ฐ์ง๊ณ ์๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
( โ๏ธ ๋ช ๋ น์ด ์์ฐจ์ , procedural ๊ธฐ๋ฅ ๊ฐํ)
- ์๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ผ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋
- ๊ฐ์ฒด(Object)๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๊ณ ์ ํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ ์ค ํ๋์ด๋ค
- OOP์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์: ํด๋์ค, ๊ฐ์ฒด, ๋ฉ์๋
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์
- ์ฝ๋์ ๋ํ ์ฌ์ฌ์ฉ์ฑ์ด ๋๋ค
- ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ ๋ค
- ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐ๊ณผ ๋ณด์๋ฅผ ๊ฐํธํ๊ฒ ๋ง๋ ๋ค
- ์ง๊ด์ ์ธ ์ฝ๋ ๋ถ์์ด ๊ฐ๋ฅํ๋ค
์ด๋ฌํ ์ฅ์ ๋ค์ ๊ดํตํ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ค์ํ ํน์ฑ์ย ๊ฐํ ์์ง๋ ฅ(Strong Cohesion)๊ณผ ์ฝํ ๊ฒฐํฉ๋ ฅ(Weak Coupling)์ ์งํฅํ๋ค๋ ์ ์ด๋ค.
-
์์ง๋ ฅ(cohesion)ย : ํ๋ก๊ทธ๋จ์ ํ ์์๊ฐ ํด๋น ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด ์ผ๋ง๋งํผ์ ์ฐ๊ด๋ ์ฑ ์๊ณผ ์์ด๋์ด๊ฐ ๋ญ์ณ์๋์ง๋ฅผ ๋ํ๋ด๋ ์ ๋. ํ๋ก๊ทธ๋จ์ ํ ์์๊ฐ ํน์ ๋ชฉ์ ์ ์ํด ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ ๊ธฐ๋ฅ๋ค์ด ๋ชจ์ฌ์ ๊ตฌํ๋์ด ์๊ณ , ์ง๋์น๊ฒ ๋ง์ ์ผ์ ํ์ง ์์ผ๋ฉด ๊ทธ๊ฒ์ ์์ง๋ ฅ์ด ๋๋ค๊ณ ํํํ๋ค.
-
๊ฒฐํฉ๋ ฅ(coupling)ย : ํ๋ก๊ทธ๋จ ์ฝ๋์ ํ ์์๊ฐ ๋ค๋ฅธ ๊ฒ๊ณผ ์ผ๋ง๋ ๊ฐ๋ ฅํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋์ง, ์ผ๋ง๋ ์์กด์ ์ธ์ง๋ฅผ ๋ํ๋ด๋ ์ ๋. ๊ฒฐํฉ๋ ฅ์ด ๋ฎ๋ค๋ ๊ฒ์ ํ ์์๊ฐ ๋ค๋ฅธ ์์๋ค๊ณผ ๊ด๊ณ๋ฅผ ํฌ๊ฒ ๋งบ๊ณ ์์ง ์์ ์ํ๋ฅผ ์๋ฏธํ๋ค.
OOP์ ๊ฒฝ์ฐ ํด๋์ค์ ํ๋์ ๋ฌธ์ ํด๊ฒฐ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ๋์ ๊ฐ์ฒด๋ฅผ ํ์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์งํฅํ๋ฏ๋ก ์์ง๋ ฅ์ ๊ฐํํ๋ฉฐ, ํด๋์ค ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์์ธํจ์ผ๋ก์จ ๊ฒฐํฉ๋ ฅ์ ์ฝํ๊ฒ ํ ์ ์๋ค.
โจ tl;dr
- ํด๋์ค(=๊ด๋ จ์๋ ๋ณ์๋ ํจ์๋ฅผ ๋ฌถ์ด๋์ container) ex) ๋ถ์ด๋นตํ
- ๋ฐ์ดํฐ ex) ํฅ, ํฌ๋ฆผ, ๊ณ ๊ตฌ๋ง ๋ฑ
- ๋ฉ์๋(=ํ๋) ex) ์๊ฐ์ด ์ง๋๋ฉด ๋ถ์ด๋นต์ด ์ต๋๋ค
- ๊ฐ์ฒด(์ธ์คํด์ค) ๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ๋ถ์ด๋นต