๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)๋ ์๋ฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฃจ๋ ์ค์ํ ๊ฐ๋ ์ด๋ค.
๊ฐ์ฒด ์งํฅ์์๋ ํด๋์ค๋ฅผ ์ค์ฌ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ค๊ณํ๋ฉฐ, ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค๊ณ๋ ์ญํ ์ ํ๋ค.
ํด๋์ค๊ฐ ๋ฌด์์ธ์ง, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ํด๋์ค์ ์ญํ ์ ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด ์งํฅ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ค์ ๋ํด ์ ๋ฆฌํด๋ณด์.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋?
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP, Object-Oriented Programming)์ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ค ํ๋๋ก,
ํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ *์ถ์ํ์์ผ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ฒด๋ค ๊ฐ์ ์ ๊ธฐ์ ์ธ ์ํธ์์ฉ์ ํตํด ๋ก์ง์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ด๋ค.
*์ถ์ํ : ๋ณต์กํ ์๋ฃ, ๋ชจ๋, ์์คํ ๋ฑ์ผ๋ก๋ถํฐ ํต์ฌ์ ์ธ ๊ฐ๋ ๋๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ๋ ค ๋ด๋ ๊ฒ
์๋ฅผ ๋ค์ด, ์ฃผ๋ณ์ ์กด์ฌํ๋ ๋ชจ๋ ์ฌ๋ฌผ(์๋์ฐจ, ์ฑ ์, ์์), ๊ฐ๋ (์ํ๊ณต์, ํ๋ก๊ทธ๋จ ์๋ฌ์ ๊ฐ์ ๋ ผ๋ฆฌ) ๋ฑ ๋ชจ๋ ๋ค ๊ฐ์ฒด๋ผ๊ณ ํ ์์๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์ํ์ ํ์๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฒด๋ผ๋ ๊ธฐ๋ณธ ๋จ์๋ก ๋๋์ด, ์ด ๊ฐ์ฒด๋ค๊ฐ์ ์ํธ์์ฉ์ ํตํด ํ๋ก๊ทธ๋จ์ ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ,๋จ์ ์?
์ฅ์
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋๋ค.
- ์๋ก์ด ์ฝ๋๋ฅผ ์์ฑํ ๋ ๊ธฐ์กด์ ์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
- ์ฝ๋์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ค.
- ์ฝ๋๊ฐ์ ๊ด๊ณ๋ฅผ ์ด์ฉํด์ ์ ์ ๋ ธ๋ ฅ์ผ๋ก ์ฝ๊ฒ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- ์ ๋ขฐ์ฑ์ด ๋์ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
- ์ ์ด์์ ๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ณ ์ฌ๋ฐ๋ฅธ ๊ฐ์ ์ ์งํ๋ฉฐ, ์ฝ๋์ ์ค๋ณต์ ์ ๊ฑฐํ์ฌ ์ฝ๋์ ๋ถ์ผ์น๋ก ์ธํ ์ค๋์์ ๋ฐฉ์งํ ์ ์๋ค.
๋จ์
- ์ฒ๋ฆฌ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
- ํ๋ก๊ทธ๋จ ์ฉ๋์ด ํฌ๋ค.
- ๋ง์ ๊ตฌ์กฐ๋ค์ ์ค๊ณํ๋ค๋ณด๋ฉด, ํ๋ก๊ทธ๋จ์ ์ฉ๋ ์ฆ๊ฐ๋ก ์ด์ด์ง๋ค.
- ์ค๊ณ์ ๋ง์ ์๊ฐ์ด ์์๋๋ค.
- ํด๋์ค๋ณ, ๊ฐ์ฒด๋ณ, ์์ ๋ฑ ๋ง์ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํด์ผํ๊ธฐ ๋๋ฌธ์, ๋ง์ ์๊ฐ์ด ์๋ชจ๋๋ค.
๊ฐ์ฒด(Object)๋?
๊ฐ์ฒด์ ์ฌ์ ์ ์ธ ์๋ฏธ๋ '์ค์ ๋ก ์กด์ฌํ๋ ๊ฒ'์ด๋ค. ์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ ์ฃผ๋ณ์์ ๋ณผ ์ ์๋ ์ฑ ์, ์์, ์๋์ฐจ์ ๊ฐ์ ์ฌ๋ฌผ๋ค์ด ๊ณง ๊ฐ์ฒด์ด๋ค.
ํ๋ก๊ทธ๋๋ฐ์์์ ๊ฐ์ฒด๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํ๊ฑฐ๋ ์ถ์์ ์ผ๋ก ์๊ฐํ ์ ์๋๊ฒ ์ค "์์ ์ ์์ฑ"์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ "์๋ณ ๊ฐ๋ฅํ ๊ธฐ๋ฅ"์ ์๋ฏธํ๋ค.
๊ฐ์ฒด์ ์ ์ : ์ค์ ๋ก ์กด์ฌํ๋ ๊ฒ. ์ฌ๋ฌผ ๋๋ ๊ฐ๋
๊ฐ์ฒด์ ์ฉ๋ : ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ธฐ๋ฅ๊ณผ ์์ฑ์ ๋ฐ๋ผ ๋ค๋ฆ
์ ํ์ ๊ฐ์ฒด : ์ฑ ์, ์์, ์๋์ฐจ, TV์ ๊ฐ์ ์ฌ๋ฌผ
๋ฌดํ์ ๊ฐ์ฒด : ์ํ๊ณต์, ํ๋ก๊ทธ๋จ ์๋ฌ์ ๊ฐ์ ๋ ผ๋ฆฌ๋ ๊ฐ๋
๊ฐ์ฒด์ ๊ตฌ์ฑ์์ - ์์ฑ๊ณผ ๊ธฐ๋ฅ
๊ฐ์ฒด๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ ๋ ์ข ๋ฅ์ ๊ตฌ์ฑ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด๋ ๋ค์์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ฐ๋๋ค.
์ฆ ๊ฐ์ฒด๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์งํฉ์ด๋ผ๊ณ ํ ์์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ทธ ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ผ๊ณ ํ๋ค.
๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ฉ์ด๋ฅผ ์๋ฐ์์๋ '์์ฑ' = '๋ฉค๋ฒ๋ณ์', '๊ธฐ๋ฅ' = '๋ฉ์๋'๋ผ๊ณ ์ฌ์ฉํ๋ค.
TV๋ก ์์ฑ๊ณผ ๊ธฐ๋ฅ ์๋ฅผ ๋ค์ด๋ณด์
์์ฑ : ํฌ๊ธฐ, ๊ธธ์ด, ๋์ด, ์์, ๋ณผ๋ฅจ, ์ฑ๋ ๋ฑ
๊ธฐ๋ฅ : ์ผ๊ธฐ, ๋๊ธฐ, ๋ณผ๋ฅจ ๋์ด๊ธฐ, ๋ณผ๋ฅจ ๋ฎ์ถ๊ธฐ, ์ฑ๋ ๋ณ๊ฒฝํ๊ธฐ ๋ฑ
TV์ ์์ฑ์ ๋ฉค๋ฒ๋ณ์๊ฐ ๋๋๊ฒ์ด๊ณ , TV์ ๊ธฐ๋ฅ์ TV ๋ฉ์๋๊ฐ ๋๋ ๊ฒ์ด๋ค.
์ค์ TV๊ฐ ๊ฐ๋ ๊ธฐ๋ฅ๊ณผ ์์ฑ์ ์ด ์ธ์๋ ๋ ์์ง๋ง, ํ๋ก๊ทธ๋๋ฐ์ ํ์ํ ์์ฑ๊ณผ ๊ธฐ๋ฅ๋ง ์ ํํ์ฌ ํด๋์ค๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
ํด๋์ค(Class)๋?
ํด๋์ค๋ '๊ฐ์ฒด๋ฅผ ์ ์ํด๋์ ๊ฒ'์ด๋ค. ์ฝ๊ฒ ๋งํด์ '๊ฐ์ฒด์ ์ค๊ณ๋ ๋๋ ํ'์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ์ฒด๋ ํด๋์ค์ ์ ์๋ ๋๋ก ์์ฑ๋๋ค.
ํด๋์ค์ ์ ์ : ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์ ์ํด ๋์ ๊ฒ์ด๋ค.
ํด๋์ค์ ์ฉ๋ : ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ค.
ํด๋์ค์ ๊ฐ์ฒด๋ ์ฝ๊ฒ ๋งํด ์ ํ ์ค๊ณ๋์ ์ ํ์ ๊ด๊ณ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด TV์ค๊ณ๋(ํด๋์ค)๋ TV๋ผ๋ ์ ํ(๊ฐ์ฒด)์ ์ ์ํ ๊ฒ์ด๋ฉฐ, TV(๊ฐ์ฒด)๋ฅผ ๋ง๋๋๋ฐ ์ฌ์ฉ๋๋ค.
ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ค๊ณ ํ์ง๋ง, ๊ทธ ๋ฟ ๊ฐ์ฒด ๊ทธ ์์ฒด๋ ์๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ ํด๋์ค๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ด ์ ํ๋์ด์ผ ํ๋ค.
ํด๋์ค๋ฅผ ์ ์ํ๊ณ ํด๋์ค๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ด์
ํ๋์ ์ค๊ณ๋๋ง ์ ๋ง๋ค์ด ๋์ผ๋ฉด ์ ํ์ ๋ง๋๋ ์ผ์ด ์ฌ์์ง๊ณ , ์ ํ์ ๋ง๋ค ๋๋ง๋ค ๊ณ ๋ฏผํ ํ์์์ด ์ค๊ณ๋ ๋๋ก๋ง ๋ง๋ค๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ์คํด์ค(Instance)๋?
ํด๋์ค๊ฐ ์ค๊ณ๋๋ผ๊ณ ํ๋ค๋ฉด, ๊ฐ์ฒด๋ ์ค๊ณ๋๋ฅผ ์ด์ฉํด ์ฐ์ด๋ธ ๋ฐ์ดํฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ํ, ํด๋์ค์ ์ํด์ ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ฅผ ์ธ์คํด์ค๋ผ๊ณ ํ๋ค.
๊ฐ์ฒด๋ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ๋ํํ๋ ํฌ๊ด์ ์ธ ์๋ฏธ๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ,
์ธ์คํด์ค๋ ์ด๋ค ํด๋์ค๋ก๋ถํฐ ๋ง๋ค์ด์ง ๊ฒ์ธ์ง๋ฅผ ๊ฐ์กฐํ๋ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ์๋ฏธ๋ฅผ ๊ฐ๊ณ ์๋ค
์ธ์คํด์ค์ ์์ฑ๊ณผ ์ฌ์ฉ
ํด๋์ค๋ช ๋ณ์๋ช ; // ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํ ๋ณ์๋ฅผ ์ ์ธ
๋ณ์๋ช = new ํด๋์ค๋ช (); // ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑ ํ, ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋ณ์์ ์ ์ฅ
ํด๋์ค์ ์ธ์คํด์ค์ ์์๋ฅผ Tvํด๋์ค๋ก๋ถํฐ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ธ์คํด์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฝ๋๋ก ๋ํ๋ด๋ณด์๋ค.
References
์๋ฐ ๊ฐ์ฒด ์งํฅ ํด๋์ค ๋ฌธ๋ฒ - ํ๋ฐฉ ๊ฐ์ด๋.inpa
๊ฐ์ฒด์งํฅ ์ ์ฐจ์งํฅ ์ฅ๋จ์ ๋ฐ ์ฐจ์ด์
๊ฐ์ฒด ์งํฅ ๊ฐ๋ ๊ณผ ์ถ์ํ ์๋ฒฝ ์ดํด
'๐ JAVA > Basic' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ์ถ์ ํด๋์ค(abstract class) (0) | 2024.10.22 |
---|---|
[JAVA] ์ ์ด์(modifier) (0) | 2024.10.18 |
[JAVA] ์์ฑ์(consructor) (0) | 2024.10.17 |
[JAVA] ํ๋(Field)์ ๋ฉ์๋(method) (0) | 2024.10.16 |