๐ก ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(object-oriented programming)
ํ๋ก๊ทธ๋จ์ ๋จ์ํ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ผ๋ก ๋๋๋ ๊ฒ์ด ์๋๋ผ, ํ๋ก๊ทธ๋จ์ ์๋ง์ '๊ฐ์ฒด(object)'๋ผ๋ ๊ธฐ๋ณธ ๋จ์๋ก ๋๋๊ณ ์ด๋ค์ ์ํธ์์ฉ์ผ๋ก ์์ ํ๋ ๋ฐฉ์
๊ฐ์ฒด๋? ํ๋์ ์ญํ ์ ์ํํ๋ '๋ฐ์ดํฐ(์์ฑ)์ ๊ธฐ๋ฅ(๋ฉ์๋)'์ ๋ฌถ์
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ์
์ด๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด์๋ค. ์ ๋ ฅ์ ๋ฐ์ ๋ช ์๋ ์์๋๋ก ์ฒ๋ฆฌํ ๋ค์, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ผ๋ก ๋ช ๋ น์ด์ ๋ชจ์์ผ ๋ฟ์ด์๋ค. ์ด ๋ฐฉ์์ ํ๋ก๊ทธ๋จ์ด ์กฐ๊ธ๋ง ๋ณต์กํด์ง๋ฉด ์์๋๋ก ๋ํ๋ด๋๊ฒ์ด ๋ถ๊ฐ๋ฅํ ์ ๋๋ก ๊ผฌ์ธ “์คํ๊ฒํฐ ์ฝ๋”๋ฅผ ๋ง๋ค๊ฒ ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ด๊ฒ์ ์ํฅ์(Bottom-up) ํด๊ฒฐ๋ฒ์ ํตํด ํด๊ฒฐํ๋ค. ์์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ ์ ์๋ ๊ฐ์ฒด๋ค์ ๋ง๋ ๋ค, ์ด ๊ฐ์ฒด๋ค์ ์กฐํฉํด์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํ๋ ๊ฒ์ด๋ค. ์ด ๊ฐ์ฒด๋ ๊ฒ์ ์ผ๋จ ํ๋ฒ ๋ง๋ค์ด ๋๊ธฐ๋ง ํ๋ฉด ๊ทธ ์ดํ์ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ๊ธฐ๊ฐ๊ณผ ๋น์ฉ์ด ๋ํญ ์ค์ด๋ค๊ฒ ๋๋ค.
์๋์ฐจ์๋ ์์, ๊ฐ๊ฒฉ, ์๋ ฅ๊ณผ ๊ฐ์ ๊ณ ์ ์ ์์ฑ์ด ์๋ค.
ํํธ ์์, ํ์ง, ์ ์ง, ๋ฉ์ถค๊ณผ ๊ฐ์ด ์๋์ฐจ์ ๊ธฐ๋ฅ์ด ๋ฉ์๋๋ก ์กด์ฌํ๋ค.
์ฃผ์ ๊ฐ๋
OOP basic concepts
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์๋ ํฌ๊ฒ ๋ค ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ด ์์ต๋๋ค.
์บก์ํ | ๋ฐ์ดํฐ(์์ฑ)์ ๊ธฐ๋ฅ(๋ฉ์๋)์ ๋ฐ๋ก ์ ์ํ๋ ๊ฒ์ด ์๋, ํ๋์ ๊ฐ์ฒด ์์ ๋ฃ์ด์ ๋ฌถ๋ ๊ฒ |
์ถ์ํ | ๋ณต์กํ ๋ด๋ถ๋ฅผ ์จ๊ธฐ๊ณ , ๋ ธ์ถ๋๋ ๋ถ๋ถ์ ๋จ์ํ๊ฒ ๋ง๋๋ ๊ฒ |
์์ | ์์์ ๋ถ๋ชจ ํด๋์ค์ ํน์ง์ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ |
๋คํ์ฑ | ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ด ๋ค์ํ ํํ๋ก ๋ฐ๋ ์ ์์ |
์บก์ํ_Encapsulation
์บก์ํ๋ ์ธ๋ถ์์ ์์ ๋งํ๋ ๋ฐ์ดํฐ(์์ฑ)์ ๊ธฐ๋ฅ(๋ฉ์๋)์ ๋ฐ๋ก ์ ์ํ๋ ๊ฒ์ด ์๋, ํ๋์ ๊ฐ์ฒด ์์ ๋ฃ์ด์ ๋ฌถ๋ ๊ฒ์ ๋๋ค. ๋ฐ์ดํฐ(์์ฑ)์ ๊ธฐ๋ฅ(๋ฉ์๋)๋ค์ ๋์จํ๊ฒ ๊ฒฐํฉ๋ฉ๋๋ค.
๋์จํ ๊ฒฐํฉ์ ์ฝ๋ ์คํ ์์์ ๋ฐ๋ผ ์ ์ฐจ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ์ฝ๋๊ฐ ์์งํ๋ ์ค์ ๋ชจ์ต๊ณผ ๋ฎ๊ฒ ์ฝ๋๋ฅผ ๋ชจ์ ๊ฒฐํฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
ex) ํค๋ณด๋
ํค๋ณด๋์ ์์ฑ: ํฐ์, ์ฌ๊ฐํ, ๋ฒํผ
ํค๋ณด๋์ ๊ธฐ๋ฅ: ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ธ์๋ฅผ ์ ๋ ฅํ๋ค
์บก์ํ๋ผ๋ ๊ฐ๋ ์ "์๋ํ"์ ํน์ง๋ ํฌํจํ๊ณ ์๋๋ฐ,
์๋ํ๋ ๋ด๋ถ ๋ฐ์ดํฐ๋ ๋ด๋ถ ๊ตฌํ์ด ์ธ๋ถ๋ก ๋ ธ์ถ๋์ง ์๋๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์, ๋ํ ์ผํ ๊ตฌํ์ด๋ ๋ฐ์ดํฐ๋ ์จ๊ธฐ๊ณ , ๊ฐ์ฒด ์ธ๋ถ์์ ํ์ํ ๋์(๋ฉ์๋)๋ง ๋ ธ์ถ์ํต๋๋ค.
์๋ํ๋ฅผ ์ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๊ฐ์ฒด ๋ด ๋ฉ์๋์ ๊ตฌํ๋ง ์์ ํ๊ณ , ๋ ธ์ถ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋ ํ๋ฆ์ ๋ฐ๋์ง ์๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์ถ์ํ_Abstraction
์ถ์ํ๋ ๋ด๋ถ ๊ตฌํ์ ์์ฃผ ๋ณต์กํ๋ฐ, ์ค์ ๋ก ๋ ธ์ถ๋๋ ๋ถ๋ถ์ ๋จ์ํ๊ฒ ๋ง๋ ๋ค๋ ๊ฐ๋ ์ ๋๋ค.
์ด๋ฌํ ์ถ์ํ๋ฅผ ํตํด ์ธํฐํ์ด์ค๊ฐ ๋จ์ํด์ง๋๋ค. ๋๋ฌด ๋ง์ ๊ธฐ๋ฅ๋ค์ด ๋ ธ์ถ๋์ง ์์ ๋๋ถ์ ์๊ธฐ์น ๋ชปํ ์ฌ์ฉ์์ ๋ณํ๊ฐ ์ผ์ด๋์ง ์๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์บก์ํ๊ฐ ์ฝ๋๋ ๋ฐ์ดํฐ์ ์๋์ ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ ธ์๋ค๋ฉด, ์ถ์ํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์๊ฒ ํ์ํ์ง ์์ ๋ฉ์๋ ๋ฑ์ ๋ ธ์ถ์ํค์ง ์๊ณ , ๋จ์ํ ์ด๋ฆ์ผ๋ก ์ ์ํ๋ ๊ฒ์ ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ ธ ์์ต๋๋ค.
์์_Inheritance
์์์ ๋ถ๋ชจ ํด๋์ค์ ํน์ง์ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋(Human)์ด๋ผ๋ ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ฌ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฆ๊ณผ ์ฑ๋ณ, ๋์ด์ ๊ฐ์ ์์ฑ, ๊ทธ๋ฆฌ๊ณ ๋จน๋ค, ์๋ค ๋ฑ๊ณผ ๊ฐ์ ๋ฉ์๋๊ฐ ์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ํ์(Student)์ด๋ผ๋ ํด๋์ค๋ฅผ ์์ฑํ๋ค๊ณ ์๊ฐํด ๋ด ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ์์ ๊ตฌํํ๋ ์ฌ๋(Human) ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ค์ ๊ตฌํํ๋ค๋ฉด ๋นํจ์จ์ ์ผ ๊ฒ์ ๋๋ค. ํ์์ ๋ณธ์ง์ ๊ฒฐ๊ตญ ์ฌ๋์ด๋ฏ๋ก, ์์์ ์ด์ฉํ์ฌ ํ์(Student) ํด๋์ค๋ ์ฌ๋(Human) ํด๋์ค๋ฅผ ์์๋ฐ์ ์ ์์ต๋๋ค. ํ์์ ์ถ๊ฐ์ ์ผ๋ก ํ์ต ๋ด์ฉ, ๊ณต๋ถํ๋ค ์ ๊ฐ์ ์์ฑ/๋ฉ์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋คํ์ฑ_Polymorphism
Polymorphism์ด๋ผ๋ ๋จ์ด์ poly๋ "๋ง์", ๊ทธ๋ฆฌ๊ณ morph๋ "ํํ"๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฆ "๋ค์ํ ํํ"๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ฌ๋ฌ ์ข ๋ฅ์ ํ์ ํ์ ๋ค์ ๊ฐ์ ์์ ํ์ ์์ ์์์ด ๋์์ด๋ ๊ฐ๊ฐ์ ํน์ฑ์ ๋ง๋ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
์ ๋ฆฌ
์บก์ํ | ์ฝ๋๊ฐ ๋ณต์กํ์ง ์๊ฒ ๋ง๋ค๊ณ , ์ฌ์ฌ์ฉ์ฑ์ ๋์ |
์ถ์ํ | ์ฝ๋๊ฐ ๋ณต์กํ์ง ์๊ฒ ๋ง๋ค๊ณ , ๋จ์ํ๋ ์ฌ์ฉ์ผ๋ก ๋ณํ์ ๋ํ ์ํฅ์ ์ต์ํ |
์์ | ๋ถํ์ํ ์ฝ๋๋ฅผ ์ค์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์ |
๋คํ์ฑ | ๋์ผํ ๋ฉ์๋์ ๋ํด ๊ฐ์ฒด์ ํน์ฑ์ ๋ง๊ฒ ๋ค๋ฅด๊ฒ ์์ฑํ๋ ๊ฒ์ด ์ฌ์์ง |
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ๋์ด ์ธ์์ ๋ณด๊ณ ์ดํดํ๋ ๋ฐฉ๋ฒ๊ณผ ํก์ฌํ๋ค๊ณ ํฉ๋๋ค.