1. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (Object-Oriented Programming, OOP)๋?
- ๋จ์ด์ ๋ป๋ถํฐ ์ดํด๋ณด๋ฉด ๊ฐ์ฅ ํต์ฌ ๋จ์ด๋ '๊ฐ์ฒด'์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ฐ์ฒด๋ ๋ฌด์์ผ๊น? ์ด๋ ํ ์ญํ ์ ํ๋ ์ฌ๋ฌผ์ด๋ ์์ง์ด๋ ๊ฒ ๋ชจ๋ ๋ค ๊ฐ์ฒด๊ฐ ๋ ์ ์๋ค. ์ด๋ฅผ ํ๋ก๊ทธ๋๋ฐ์ ๊ด์ ์์ ๋ณด๋ฉด, ํน์ ์ญํ ์ ํ๋ ๋ฉ์๋,๋ณ์, ์๋ฃ ๊ตฌ์กฐ ๋ฑ์ด ๋ ์ ์๋ค. ๋ฐ๋ผ์, ์ด๋ฐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปค๋ค๋ ํ๋ก ๋ณด๋ฉด, ํน์ ์ญํ ๋ณ๋ก ์~ ๋ฌถ์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ค. ์ด๋ฐ ๊ฒ์ ์ผ๋ํด ๋๊ณ ์ฅ์ , ํน์ง ๊ทธ๋ฆฌ๊ณ ์ค๊ณ ์์น ๋ฑ์ ๋ณด๋ฉด ์ดํด๊ฐ ๋น ๋ฅด๋ค.
2. OOP ์ฅ์
- S/W์ ์ง์ ํฅ์ํ๊ธฐ ์ํด ๊ฐํ ์์ง๋ ฅ(Strong Cohesion)๊ณผ ์ฝํ ๊ฒฐํฉ๋ ฅ(Weak Coupling)์ ์งํฅํด์ผ ํ๋๋ฐ, OOP์ ๊ฒฝ์ฐ ํด๋์ค์ ํ๋์ ๋ฌธ์ ํด๊ฒฐ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ๋์ ๋ฐ์ดํฐํ์ ์ฌ์ฉํจ์ผ๋ก์จ ์์ง๋ ฅ์ ๊ฐํํ๊ณ , ํด๋์ค๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์์ธํจ์ผ๋ก์จ ๊ฒฐํฉ๋ ฅ์ ์ฝํ๊ฒ ํ ์ ์๋ค.
*** ์์ง๋ ฅ (Cohesion)์ด๋?
- ํ๋ก๊ทธ๋จ์ ํ ์์๊ฐ ํด๋น ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด ์ผ๋ง๋งํผ์ ์ฐ๊ด๋ ์ฑ ์๊ณผ ์์ด๋์ด๊ฐ ๋ญ์ณ์๋์ง๋ฅผ ๋ํ๋ด๋ ์ ๋. ํ๋ก๊ทธ๋จ์ ํ ์์๊ฐ ํน์ ๋ชฉ์ ์ ์ํด ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ ๊ธฐ๋ฅ๋ค์ด ๋ชจ์ฌ์ ๊ตฌํ๋์ด ์๊ณ , ์ง๋์น๊ฒ ๋ง์ ์ผ์ ํ์ง ์์ผ๋ฉด ๊ทธ๊ฒ์ ์์ง๋ ฅ์ด ๋๋ค๊ณ ํํํ๋ค.
*** ๊ฒฐํฉ๋ ฅ (Coupling)์ด๋?
- ํ๋ก๊ทธ๋จ ์ฝ๋์ ํ ์์๊ฐ ๋ค๋ฅธ ๊ฒ๊ณผ ์ผ๋ง๋ ๊ฐ๋ ฅํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋์ง, ์ผ๋ง๋ ์์กด์ ์ธ์ง๋ฅผ ๋ํ๋ด๋ ์ ๋. ๊ฒฐํฉ๋ ฅ์ด ๋ฎ๋ค๋ ๊ฒ์ ํ ์์๊ฐ ๋ค๋ฅธ ์์๋ค๊ณผ ๊ด๊ณ๋ฅผ ํฌ๊ฒ ๋งบ๊ณ ์์ง ์์ ์ํ๋ฅผ ์๋ฏธํ๋ค.
- ๋ฐ๋ผ์, OOP๋ ์ฌ์ฌ์ฉ์ฑ์ด ๋์ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐ ๋ฐ ๋ณด์๋ฅผ ๊ฐํธํ๊ฒํ๋ฉฐ, ๊ฒฐํฉ๋ ฅ์ด ์ฝํด ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ ๋ค. ์ฆ, ์ ์ง๋ณด์๊ฐ ํธํ๋ค.
3. OOP ๊ตฌ์ฑ์์
์ฝ๋๋ฅผ ์กฐ๊ธ์ด๋ผ๋ ์ง๋ดค๋ค๋ฉด ๋ชจ๋๊ฐ ์ด๊ฒ ๋ค ๋ฌด์์ธ์ง๋ ์๊ฒ์ด๋ค.
(1) ํด๋์ค (Class)
- ๊ฐ์ ์ข ๋ฅ(๋๋ ๋ฌธ์ ํด๊ฒฐ์ ์ํ)์ ์ง๋จ์ ์ํ๋ ์์ฑ(attribute)๊ณผ ํ์(behavior)๋ฅผ ์ ์ํ ๊ฒ์ผ๋ก ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐํ(user defined data type)์ด๋ผ๊ณ ํ ์ ์๋ค. ํด๋์ค๋ ๋ค๋ฅธ ํด๋์ค ๋๋ ์ธ๋ถ ์์์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์์ธํ์ฌ์ผ ํ๋ค.
(2) ๊ฐ์ฒด (Object)
- ํด๋์ค์ ์ธ์คํด์ค(์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น๋ ๊ฒ)์ด๋ค. ๊ฐ์ฒด๋ ์์ ๊ณ ์ ์ ์์ฑ(attribute)์ ๊ฐ์ง๋ฉฐ ํด๋์ค์์ ์ ์ํ ํ์(behavior)๋ฅผ ์ํํ ์ ์๋ค.
(3) ๋ฉ์๋ (Method), ๋ฉ์์ง (Message)
- ํด๋์ค๋ก๋ถํฐ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก์ ๊ฐ์ฒด์ ๋ช ๋ น์ ๋ด๋ฆฌ๋ ๋ฉ์์ง๋ผ ํ ์ ์๋ค. ๋ฉ์๋๋ ํ ๊ฐ์ฒด์ ์๋ธ๋ฃจํด(subroutine) ํํ๋ก ๊ฐ์ฒด์ ์์ฑ์ ์กฐ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ ๊ฐ์ฒด ๊ฐ์ ํต์ ์ ๋ฉ์์ง๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค.
4. OOP ํน์ง
(1) ์๋ฃ ์ถ์ํ
- ์ถ์ํ์ ๊ฐ๋ ์ ๋ณต์กํ ์์คํ ์ผ๋ก๋ถํฐ ๊ฐ์ฅ ๊ทผ๋ณธ์ ์ธ ๋ถ๋ถ๋ค์ ๊ฐ๋จํ๊ณ ์ ํํ ์ธ์ด๋ก ํํํ๋ ๊ฒ์ด๋ค. ์ด๋ฐ ๋ถ๋ถ๋ค์ ์ด๋ฆ์ ๋ช ์ํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ผ๋ก ์ถ์ํ ๋ ์ ์๋ค.
- ์ด์ฒ๋ผ ์ด๋ค ์๋ฃ๊ตฌ์กฐ์ ์ค๊ณ์ ์ถ์ํ๋ฅผ ํ์ฉํ ํจ๋ฌ๋ค์์ ์ ์ฉํ๋ฏ๋ก์จ __์ถ์ ๋ฐ์ดํฐ ํ์ (abstract data type: ADT)__์ ๋ง๋ค์ด ๋ผ ์ ์๋ค. ์ด๋ ๋ฌด์จ์ผ(what)์ ํ๋์ง๋ ์ง์ ํ์ง๋ง ์ด๋ป๊ฒ(how)ํ๋์ง๋ ์ง์ ํ์ง ์๋๋ค. ์ฆ, ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง๋ ์ฌ์ฉ์์๊ฒ ๋ฌ๋ ค์๋ค.
(2) ์์
- ์์์ ์๋ก์ด ํด๋์ค๊ฐ ๊ธฐ์กด์ ํด๋์ค์ ์๋ฃ์ ์ฐ์ฐ์ ์ด์ฉํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค. ์์์ ๋ฐ๋ ์๋ก์ด ํด๋์ค๋ฅผ ๋ถํด๋์ค, ํ์ ํด๋์ค, ํ์ ํด๋์ค, ์์ ํด๋์ค๋ผ๊ณ ํ๋ฉฐ ์๋ก์ด ํด๋์ค๊ฐ ์์ํ๋ ๊ธฐ์กด์ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ ํด๋์ค, ์์ ํด๋์ค, ๋ถ๋ชจ ํด๋์ค๋ผ๊ณ ํ๋ค. ์์์ ํตํด์ ๊ธฐ์กด์ ํด๋์ค๋ฅผ ์์๋ฐ์ ํ์ ํด๋์ค๋ฅผ ์ด์ฉํด ํ๋ก๊ทธ๋จ์ ์๊ตฌ์ ๋ง์ถ์ด ํด๋์ค๋ฅผ ์์ ํ ์ ์๊ณ ํด๋์ค ๊ฐ์ ์ข ์ ๊ด๊ณ๋ฅผ ํ์ฑํจ์ผ๋ก์จ ๊ฐ์ฒด๋ฅผ ์กฐ์งํํ ์ ์๋ค.
(3) ๋ค์ค ์์
- ๋ค์ค ์์์ ํด๋์ค๊ฐ 2๊ฐ ์ด์์ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค. ํด๋์ค๋ค์ ๊ธฐ๋ฅ์ด ๋์์ ํ์ํ ๋ ์ฉ์ดํ๋ ํด๋์ค์ ์์ ๊ด๊ณ์ ํผ๋์ ์ค ์ ์๊ณ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฐ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ ์ ๋ฌด๊ฐ ๋ค๋ฅด๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค. ํ์ด์ฌ์ ์ง์ํ๋ค.
(4) ๋คํ์ฑ ๊ฐ๋
- ํ๋์ ๋ณ์๋ช , ํจ์๋ช ๋ฑ์ด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ํด์๋ ์ ์๋ ๊ฒ
*** ์ค๋ฒ๋ผ์ด๋ฉ (Overriding)์ด๋?
- ๋ถ๋ชจํด๋์ค์ ๋ฉ์๋์ ๊ฐ์ ์ด๋ฆ, ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ ์ ํ๋๊ฒ. ์์์ผ๋ก ๋ฐ์ ํจ์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ์ง ์๊ณ ์๋ก ๋ง๋ค์ด์ ์ฌ์ฉํ๋ค. ํจ์๋ช , ๋งค๊ฐ๋ณ์, ๋ฆฌํด ํ์ ๊ฐ์์ผํ๋ค.
*** ์ค๋ฒ๋ก๋ฉ (Overloading)์ด๋?
- ๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ํ๊ณ , ๋งค๊ฐ๋ณ์์ ํ์
๊ณผ ๊ฐ์๋ฅผ ๋ค๋ฅด๊ฒ ํ์ฌ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ํธ์ถํ ์ ์๊ฒ ํ๋ ๊ฒ. ํ์ด์ฌ์์ ์ฌ์ค ๋ฌด์๋ฏธํ ๊ฒ ๊ฐ๋ค. ์๋๋ฉด ๊ฐ์ฅ ์ต์ ์ ๊ฒ์ผ๋ก ๋ค ๋์ฒด๋๊ธฐ ๋๋ฌธ.
(5) ๋์ ๋ฐ์ธ๋ฉ
- ๋์ ๋ฐ์ธ๋ฉ์ ์คํ ์๊ฐ ์ค์ ์ผ์ด๋๊ฑฐ๋ ์คํ ๊ณผ์ ์์ ๋ณ๊ฒฝ๋ ์ ์๋ ๋ฐ์ธ๋ฉ์ผ๋ก ์ปดํ์ผ ์๊ฐ์ ์๋ฃ๋์ด ๋ณํํ์ง ์๋ ์ ์ ๋ฐ์ธ๋ฉ๊ณผ ๋๋น๋๋ ๊ฐ๋ ์ด๋ค. ๋์ ๋ฐ์ธ๋ฉ์ ํ๋ก๊ทธ๋จ์ ํ ๊ฐ์ฒด๋ ๊ธฐํธ๋ฅผ ์คํ ๊ณผ์ ์ ์ฌ๋ฌ ์์ฑ์ด๋ ์ฐ์ฐ์ ๋ฐ์ธ๋ฉํจ์ผ๋ก์จ ๋คํ ๊ฐ๋ ์ ์คํํ๋ค.
5. OOP ์ค๊ณ ์์น
(1) SRP(Single Responsibility Principle) : ๋จ์ผ ์ฑ ์ ์์น
- ํด๋์ค๋ ๋จ ํ๋์ ์ฑ ์์ ๊ฐ์ ธ์ผ ํ๋ฉฐ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๋ ๋จ ํ๋์ ์ด์ ์ด์ด์ผ ํ๋ค.
(2) OCP(Open-Closed Principle) : ๊ฐ๋ฐฉ-ํ์ ์์น
- ํ์ฅ์๋ ์ด๋ ค ์์ด์ผ ํ๊ณ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
(3) LSP(Liskov Substitution Principle) : ๋ฆฌ์ค์ฝํ ์นํ ์์น
- ์์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ํ์ ํ์ ์ ๊ฐ์ฒด๋ก ์นํํด๋ ์์ ํ์ ์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํ๋ค.
(4) ISP(Interface Segregation Principle) : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
- ์ธํฐํ์ด์ค๋ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค.
(5) DIP(Dependency Inversion Principle) : ์์กด ์ญ์ ์์น
- ๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ๊ตฌํ์ ์์กดํด์๋ ์๋๋ค.
ํํ, SOLID ๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฐ์ฒด ์งํฅ์ ์ค๊ณ ์์น 5๊ฐ์ง์ด๋ค.