'๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ | Objecet Oriented Programming (OOP)' ์ด๋ ๋ฌด์์ผ๊น์?
์ด๋ฅผ ๋ ์ ์ดํดํ๊ธฐ ์ํด์, ์ฐ๋ฆฌ๊ฐ ๊ธฐ์กด์ ์ฃผ๋ก ์ฌ์ฉํ๋
Procedural Programming, ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ์ฐ์ ์ดํด ํด ๋ด ์๋ค.
์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ | Procedural Programming (PP)
์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ํฌ์ธํธ๋ 'ํจ์' ์ ๋๋ค.
PP ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํจ์์ ์งํฉ ์ ๋๋ค.
๋ํ, ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ ์ธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ์์์ ํด๋น ๋ฐ์ดํฐ๋ค์ ํจ์์ ์ธ์๋ก์จ ์ ๋ฌํ์ฌ ํ์ฉํฉ๋๋ค.
ํ์ํ ์ฉ๋์ ๋ง์ถฐ ๊ณผ์ ์ ๋ถ์ํ๊ณ , ๋๋์ด์
ํจ์๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๊ธฐ์ ์ดํดํ๊ธฐ ๋งค์ฐ ์ง๊ด์ ์ ๋๋ค.
ํ์ง๋ง ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์๋ ๋ถ๋ช ํ ํ๊ณ๋ค์ด ์กด์ฌํฉ๋๋ค.
๋ํ์ ์ธ ๊ฒ์ ๋ฐ๋ก
์ฌ์ฉํ๊ฒ ๋๋ ํจ์๋ค์ด ์ธ์๋ก ๋ฐ๋ ๋ฐ์ดํฐ๋ค์ ๊ตฌ์กฐ๋ฅผ ์์์ผ ํ๋ค๋ ์ ์ ๋๋ค.
๋ง์ฝ ๊ฑฐ๋ํ ํ๋ก๊ทธ๋จ์์ ํจ์์ ์ํด ํน์ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด?
ํ๋ก๊ทธ๋จ ๋ด์ ๋๋ค๋ฅธ ์๋ง์ ํจ์๋ค์ด ์ด์ ์ํฅ์ ๋ฐ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
๋ํ, ํ๋ก๊ทธ๋จ์ด ์ปค์ง๋ฉด ์ปค์ง์๋ก ์๋ง์ ํจ์๋ค์ด ๋ณต์กํ๊ฒ ์ฝํ๊ธฐ ๋๋ฌธ์,
๊ธ๊ฒฉํ ์ดํดํ๊ธฐ ์ด๋ ค์์ง๋ ์ธก๋ฉด์ด ์์ต๋๋ค.
์ด๋ ์ฝ๋์ ์ ์ง ๋ณด์์๋ ์น๋ช ์ ์ ๋๋ค.
์ดํ์ ๋ฒ๊ทธ๋ฅผ ๊ณ ์น๊ฑฐ๋ ์ฝ๋์ ํน์ ๋ถ๋ถ์ ์ฌํ์ฉํ๊ธฐ์๋ ๋งค์ฐ ํ๋ค์ด์ง๋๋ค.
์ด๋ฌํ ๋จ์ ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋จ์ ํ์ฉํ๋ฉด ๋ค์ ํด๊ฒฐ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ์์๋ณผ๊น์?
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ | Object Oriented Programming (OOP)
์์์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ์ ํจ์์๋๊ฒ ๊ธฐ์ต ๋์๋์?
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ์ ํด๋์ค(Class)์ ๊ฐ์ฒด(Object)์ ๋๋ค.
์ด ํด๋์ค์ ๊ฐ์ฒด์ ๋ํ ์์ธํ ์ค๋ช ์ ๋ณด๋ฅํ๊ณ , ์ด ๊ฒ๋ค์ด ์ ๋์์ด ๋๋์ง๋ฅผ ๋จผ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
ํด๋์ค์ ๊ฐ์ฒด์ ์ง๊ฐ๋ ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง ์๋ก ๋๋๋ฌ์ง๋๋ค.
ํ๋ก๊ทธ๋๋จธ๋ค๋ก ํ์ฌ๊ธ ๋ ๋์ ์์ค์ ์ถ์ํ(abstraction)์ด ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
ํ ๊ฐ์ง ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
๋ํ์์ ์๊ฐ ์ ์ฒญ ํ๋ก๊ทธ๋จ์ ์ง ๋ค๊ณ ํ ๋,
์๋ง์ ํ์๋ค์ ๊ฐ๊ฐ์ ์ฑ, ์ด๋ฆ, ํ๋ฒ, ์๋ ์์ผ, ์ฑ๋ณ, ๋ฑ๋ฑ์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ก ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ ๋ณด๋ค,
๊ฐ ํ์ ํ๋ช ์ ๋์์ ์ฐ๊ฒฐ๋์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ค์ ๊ด๋ฆฌํ ์ ์๋ค๋ฉด ๋์ฑ ํธ๋ฆฌํ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ฃ ?
๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฟ๋ง ์๋๋ผ ์๊ฐ ์ ์ฒญ์ด๋ ๋๋๊ณผ ๊ฐ์ ํ๋๋ค ๋ํ ์ฐ๊ณ๋์ด ๊ด๋ฆฌํ ์ ์๋ค๋ฉด,
๋์ฑ ํธ๋ฆฌํ๊ฒ ์ฃ ?
๊ฐ ๊ฐ์ฒด(Object)๋ค์ด ๋ฐ์ดํฐ์ ์ฐ์ฐ ๊ธฐ๋ฅ์ ๋์์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋๋ค.
์ด ๊ฐ๋ ์ ์ฐ๋ฆฌ๋ ์บก์ํ(encapsulation) ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๋ํ OOP์ ์์ฒญ๋ ์ฅ์ ์ค ํ๋๋ ์ฝ๋์ ์ฌํ์ฉ์ฑ์ ๋๋ค.
ํ ๊ฐ์ง์ ํด๋์ค ์์๋ ํ์ํ ๋ค์ํ ๋ฐ์ดํฐ์ ์ฐ์ฐ ๊ธฐ๋ฅ์ด ๋ชจ๋ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์,
ํด๋์ค ํ๋๋ง์ ์ฌํ์ฉ ๋ง์ผ๋ก๋ ํ๋ก๊ทธ๋๋ฐ์ ๋งค์ฐ ํฐ ๋์์ด ๋ฉ๋๋ค.
๋ํ ์์ฃผ ์ฌ์ฉํ๊ฒ ๋๋ ์์(inheritance)์ ๊ฐ๋ ๋ ์กด์ฌํฉ๋๋ค.
์ด๋ฏธ ๋ง๋ค์ด์ง ํด๋์ค๋ฅผ ์์ํ๋ ๋๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ง๋๋ ํ์์ธ๋ฐ,
๊ฐ๋จํ๊ฒ ๊ธฐ์กด ํด๋์ค์ ํ์ฅํ, ๋๋ ์ ๋ฐ์ดํธ ๋ฒ์ ์ ๋ง๋ ๋ค๊ณ ์๊ฐํ์ ๋ ์ข์ต๋๋ค.
(์ฃผ๋ก ๋ ๋ํ ์ผํ ๊ฐ์ด๋ ์ ์ฝ์ด ํฌํจ๋จ)
์๋ฅผ ๋ค์๋ฉด '์ธ๊ฐ' ์ด๋ผ๋ ํด๋์ค์ ํ์ฅ ๋ฒ์ ์ผ๋ก
'๋จ์ฑ'๊ณผ '์ฌ์ฑ' ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋ค ์ ๋๋ก ์ดํดํ์ ๋ ๊ด์ฐฎ์ต๋๋ค.
์ฌ๊ธฐ๊น์ง ๋๋ต์ ์ธ ์ฅ์ ๋ค์ด์๋๋ฐ์,
OOP๋ ๋๋ฌด๋ ํ๋ฅญํ์ง๋ง ๋ช๊ฐ์ง ๋จ์ ๋ค๋ ์กด์ฌํฉ๋๋ค.
OOP์ ๋จ์
OOP๋ฅผ ์๋ฌด๋ฆฌ ์ ์ฌ์ฉํ๋๋ผ๋ ์ด๋ฏธ ์์ข์ ์ฝ๋๋ฅผ ๋ ๋ซ๊ฒ ๋ง๋ค์ด ์ค ์๋ ์์ต๋๋ค.
๋ํ ๋ชจ๋ ์ข ๋ฅ์ ๋ฌธ์ ๋ฅผ ๋ค๋ฃฐ ์๋ ์์ต๋๋ค.
์ธ์์ ๋ชจ๋ ๊ฐ๋ ๋ค์ด ํด๋์ค๋ก๋ง ๋ํ๋ด์ด ์ง ์๋ ์๊ธฐ ๋๋ฌธ์ด๊ธฐ๋ ํฉ๋๋ค.
๊ณต๋ถํ๊ธฐ๊ฐ ์ข ์ด๋ ค์ด ๊ฐ๋ ์ธ๊ฒ๋ ๋จ์ ์ค์ ํ๋์ ๋๋ค. (ํนํ C++์์๋ ๋์ฑ)
์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์์๋,
ํ๋ก๊ทธ๋จ์ด ๊ฝค๋ ์ฉ๋์ด ์ปค์ง๊ณ , ๋๋ ค์ง๊ณ , ๋ณต์กํด์ง ์๋ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
๋ค๋ง ๋คํ์ธ ์ ์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ C++๊ฐ
๋ชจ๋ Object Oriented Languages์ค์ ์ต์์๊ถ์ผ๋ก ์ฑ๋ฅ์ ์ธ ํผํฌ๋จผ์ค๋ฅผ ๋ผ ์ ์๋ ์ธ์ด๋ผ๋ ์ ์ ๋๋ค.