๐ป [Theory] ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋??
๐ป [Theory] ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋?
์๋
ํ์ธ์. ๐
์ค๋์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฒด(Object)๋?
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ฐ์ ๊ฐ์ฒด๋ ๋ฌด์์ผ๊น์?
๊ฐ์ฒด(Object)๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํ๊ฑฐ๋ ์ถ์์ ์ผ๋ก ์๊ฐํ ์ ์๋ ๊ฒ ์ค์์ ์์ ๊ณผ ๋ค๋ฅธ ๊ฒ์ ์๋ณ๊ฐ๋ฅํ ๊ฒ์ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํ๋ ์ฌ๋, ์ฑ , ์๋์ฐจ, ์ปดํจํฐ ๋ฑ ๊ณผ ์ถ์์ ์ธ ํ๊ณผ, ๊ฐ์, ์ฃผ๋ฌธ ๋ฑ์ด ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋ ์ ์์ต๋๋ค.
์ฆ, ๊ฐ์ฒด๋ ํ์ค ์ธ๊ณ์ ์ฌ๋ฌผ์ด๋ ๊ฐ๋ ์ ์์คํ ์์ ์ด์ฉํ๊ธฐ ์ํด ํ์ค ์ธ๊ณ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ํํํ์ฌ
์์ฝ๊ฒ ์ด์ฉํ ์ ์๋๋ก ๋ง๋ ์ํํธ์จ์ด ๋ชจ๋ธ์ ๋๋ค.
๊ฐ์ฒด๋ ์ํ(์์ฑ)์ ํ์(ํ๋)์ ๊ฐ๊ณ ์์ต๋๋ค.
์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์๋ฅผ ๋ค ์ ์์ต๋๋ค.
์ฌ๋
- ์์ฑ : ์ด๋ฆ, ๋์ด, ์ฑ๋ณ ๋ฑ
- ํ์ : ๊ฑท๋๋ค, ๋งํ๋ค, ์๋๋ค ๋ฑ
์๋์ฐจ
- ์์ฑ : ์์, ๋ชจ๋ธ๋ช , ์ ์กฐ์ฌ
- ํ์ : ๋ฌ๋ฆฐ๋ค, ๋ฉ์ถ๋ค ๋ฑ
๋ํ์ ์ธ ๊ฐ์ฒด์งํฅ์ธ์ด์ธ ์๋ฐ์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ์ํ(์์ฑ)์ ํ๋(field)๋ก, ํ์๋ฅผ ๋ฉ์๋(method)๋ก ํํํฉ๋๋ค.
๐ป ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming, OOP) ์ด๋ ?
ํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ํ์์ผ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ฒด๋ค ๊ฐ์ ์ ๊ธฐ์ ์ธ ์ํธ์์ฉ์ ํตํด ๋ก์ง์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ ๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด ์ค์ ์ธ๊ณ๋ฅผ ๋ชจ๋ธ๋งํด ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ๋จ์
[์ฅ์ ]
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋๋ค.
- ๋๊ตฐ๊ฐ๊ฐ ๋ง๋ ํด๋์ค๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๊ณ ์์์ ํตํด ํ์ฅํ ์๋ ์๋ค.
- ์ ์ง๋ณด์๊ฐ ์ฝ๋ค.
- ์์ ํด์ผ ํ ๋ถ๋ถ์ด ํด๋์ค ๋ด๋ถ์ ๋ฉค๋ฒ ๋ณ์ ํน์ ๋ฉ์๋๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํด๋น ๋ถ๋ถ๋ง ์์ ํ๋ฉด ๋๋ค.
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋๋ค
- ํด๋์ค ๋จ์๋ก ๋ชจ๋ํ์์ผ์ ๊ฐ๋ฐํ ์ ์์ผ๋ฏ๋ก ์ ๋ฌด ๋ถ๋ดํ๊ธฐ๊ฐ ์ฝ๋ค.
[๋จ์ ]
- ์ฒ๋ฆฌ ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
- ๊ฐ์ฒด๊ฐ ๋ง์ผ๋ฉด ์ฉ๋์ด ์ปค์ง ์ ์๋ค.
- ์ค๊ณ ์ ๋ง์ ๋ ธ๋ ฅ๊ณผ ์๊ฐ์ด ํ์ํ๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง
1 ) ์ถ์ํ
-
๊ตฌ์ฒด์ ์ธ ์ฌ๋ฌผ๋ค์ ๊ณตํต์ ์ธ ํน์ง์ ํ์ ํด์ ์ด๋ฅผ ํ๋์ ๊ฐ๋ (์งํฉ)์ผ๋ก ๋ค๋ฃจ๋ ๊ฒ
-
๊ฐ์ฒด ์งํฅ์ ๊ด์ ์์ ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ์ ๋ฐ๋ก ์ถ์ํ๋ผ๊ณ ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค.
์ถ์ํ๋ ์ฝ๋๊ฐ ๋ณต์กํ์ง ์๊ฒ ๋ง๋ค๊ณ , ๋จ์ํ๋ ์ฌ์ฉ์ผ๋ก ์ธํด ๋ณํ์ ๋ํ ์ํฅ์ ์ต์ํํฉ๋๋ค.
2 ) ์บก์ํ
-
์ฐ๊ด ์๋ ๊ฒ๋ค์ ํ๋๋ก ๋ฌถ์ด์ฃผ๋ ๊ฒ์ด ์บก์ํ์ ๋๋ค.
-
์ ๋ณด์๋ -> ์ฐ๊ด์๋ ๋ณ์์ ํจ์๋ฅผ ํด๋์ค๋ก ๋ฌถ๊ณ ์ธ๋ถ์ ๊ฐ์ถ ๋ด์ฉ์ ๊ฐ์ถฅ๋๋ค. (์ ๊ทผ์ง์ ์๋ก ๊ณต๊ฐ ๋ ๊ฒ๊ณผ ๊ฐ์ถ ๊ฒ ์ ํจ)
-
์ ์บก์ํ(๋ชจ๋ํ)๋์๋ค๋ ๋ง์ ์ฐ๊ด์๋ ๊ฒ๋ค์ด ์ ์์ง๋์๋ค๋ ๊ฒ์ด๊ณ ๋ค๋ฅธ ๋ชจ๋(๊ฐ์ฒด, ํด๋์ค)์๋ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ผ ํฉ๋๋ค.
-
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ, ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ๊ฒํ๋ ๊ฒ์ด ๋ชฉ์ ์ ๋๋ค.
์ค์ํ ๊ฒ์ ์ธ๋ถ์์ ์ ๊ทผ์ด ํ์ํ ๋ถ๋ถ์ ์ ์ธํ๊ณ ๋ ๋ด๋ถ๋ก ์จ๊ธฐ๋ ๊ฒ์ ๋๋ค
์ผ๋ฐ์ ์ธ ๊ฐ์ฒด์งํฅ ์ธ์ด์์๋ ์ด ๋๋ฌธ์ ์ ๊ทผ์ ํ์(access modifier)๋ผ๋ ๋ฌธ๋ฒ์ ์ง์ํฉ๋๋ค.
public : ํด๋์ค ์ธ๋ถ์์ ์ ํ ์์ด ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅ
private : ํด๋์ค ์ธ๋ถ์์ ์ ๊ทผ ๋ถ๊ฐ (ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ)
protected : ์์ํ ํ์ ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
์บก์ํ๋ฅผ ํตํด ๊ด๋ จ๋ ๊ธฐ๋ฅ๊ณผ ํน์ฑ์ ํ ๊ณณ์ ๋ชจ์ผ๊ณ ๋ถ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฌํ์ฉ์ด ์ํํด์ก์ต๋๋ค.
3 ) ์์
-
์์์ ๊ธฐ์กด์ ์ฝ๋๋ฅผ ์ฌํ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ฒ์ผ๋ก ์ด๋ฏธ ์์ฑ๋ ํด๋์ค(๋ถ๋ชจ ํด๋์ค)๋ฅผ ์ด์ด๋ฐ์์ ์๋ก์ด ํด๋์ค(์์ ํด๋์ค)๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
-
์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๋ชจ๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๋ฌผ๋ ค๋ฐ๊ณ ์ถ๊ฐ๋ก ํ์ํ ๊ธฐ๋ฅ์ ๋ํด ์ถ๊ฐ ๋๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
-
์์์ ๊ธฐ์กด์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฒ์ ๋๋ค.
์์์ ๊ธฐ์กด์ ๋ง๋ค์ด์ง ์ฝ๋๋ฅผ ์ด์ด๋ฐ์์ ๋ณด๋ค ์ฝ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
4 ) ๋คํ์ฑ
-
ํ๋์ ๋ณ์, ๋๋ ํจ์๊ฐ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ํด์๋ ์ ์๋ ๊ฒ์ ๋งํฉ๋๋ค.
-
์ค๋ฒ๋ผ์ด๋ฉ(Overriding), ์ค๋ฒ๋ก๋ฉ(Overloading)์ด ๊ฐ๋ฅํ๋ค
-
ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค ์ ์๋๋ก ํด์ฃผ๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ์ด๋ค.
over riding : ๋ถ๋ชจํด๋์ค์ ๋ฉ์๋์ ๊ฐ์ ์ด๋ฆ, ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ ์ ํ๋๊ฒ.
over loading : ๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ํ๊ณ , ๋งค๊ฐ๋ณ์์ ํ์ ๊ณผ ๊ฐ์๋ฅผ ๋ค๋ฅด๊ฒ ํ์ฌ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ํธ์ถํ ์ ์๊ฒ ํ๋ ๊ฒ.
๋คํ์ฑ์ ์ค์๋!
-
๋คํ์ฑ์ ํต์ฌ์ ์ธ์์ ์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ๋๋๋ ๊ฒ์ด๋ค. ex) ์ญํ - ์๋์ฐจ ๊ตฌํ - ์๋ฐ๋ผ , ํ ์ฌ๋ผ, k3 , ํฌ๋ฅด์ ๋ฑ๋ฑ ์ค์ ๊ตฌํ ์๋์ฐจ๊ฐ ์๋ฐ๋ผ์ด๋ ํ ์ฌ๋ผ์ด๋ k3์ด๋ ๊ฒฐ๊ตญ ๋ณธ ์ญํ ์ ์๋์ฐจ ์ญํ ์ด๋ค.
-
ํ๋ก๊ทธ๋๋ฐ์์ ์ญํ ์ ์ธํฐํ์ด์ค, ๊ตฌํ์ ๊ตฌํ ๊ฐ์ฒด์ด๋ค.
-
๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋ ์ญํ ๊ณผ ๊ตฌํ์ ๋ช ํํ ๋ถ๋ฆฌ
-
๊ฐ์ฒด ์ค๊ณ์ ์ญํ (์ธํฐํ์ด์ค)์ ๋จผ์ ๋ถ์ฌํ๊ณ , ๊ทธ ์ญํ ์ ์ํํ๋ ๊ตฌํ ๊ฐ์ฒด ๋ง๋ค๊ธฐ
-
์ญํ (์ธํฐํ์ด์ค)์ ๋ํ ๊ตฌํ ๊ฐ์ฒด ๋ณ๊ฒฝ์ด ์ฉ์ดํด ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒํด์ค๋ค.
๋คํ์ฑ์ ๋ณธ์ง
- ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
- ๋คํ์ฑ์ ๋ณธ์ง์ ์ดํดํ๋ ค๋ฉด ํ๋ ฅ์ด๋ผ๋ ๊ฐ์ฒด์ฌ์ด์ ๊ด๊ณ์์ ์์ํด์ผํจ
- ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
๋
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ์์๋ณด์์ต๋๋ค.
Reference