
์๊ณ ๋ณด๋ฉด ์ฌ๋ฐ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ, OOP ํ์ด๋ณด๊ธฐ
์ด๋ฒ ํฌ์คํ
์์๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming)
, ์ค์ฌ์ ํํ๋ค OOP๋ผ๊ณ ๋ถ๋ฅด๋ ์ค๊ณ ๋ฐฉ๋ฒ๋ก ์ ๋ํด์ ์ด์ผ๊ธฐํด๋ณด๋ ค๊ณ ํ๋ค. OOP๋ ํ๋ก๊ทธ๋๋ฐ์ ์ค๊ณ ํจ๋ฌ๋ค์ ์ค ํ๋๋ก, ํ์ค ์ธ๊ณ๋ฅผ ํ๋ก๊ทธ๋จ ์ค๊ณ์ ๋ฐ์ํ๋ค๋ ๊ฐ๋
์ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ด๋ค. OOP๋ 90๋
๋ ์ด๋ฐ๋ถํฐ ์ ๋ช
ํด์ง๊ธฐ ์์ํ์ง๋ง ์์ง๊น์ง๋ ์ ์ธ๊ณ์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๊ณ ์๋ ์ค๊ณ ํจํด ์ค ํ๋์ด๊ธฐ ๋๋ฌธ์ ์์๋ฌ์ ๋์ ๊ฑด ์๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ์์์ผ ํ๋์?
์ฌ์ค OOP๊ฐ ์ค๋ ๊ธฐ๊ฐ๋์ ์ ์ธ๊ณ์์ ์ฌ๋๋ฐ๊ณ ์๋ ์ค๊ณ ํจํด์ธ ๊ฒ์ ๋ง์ง๋ง ์ต๊ทผ์๋ OOP์ ๋จ์ ์ ์ด์ผ๊ธฐํ๋ฉฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
๊ณผ ๊ฐ์ ์๋ก์ด ์ค๊ณ ํจ๋ฌ๋ค์์ด ๊ฐ๊ด๋ฐ๊ธฐ๋ ํ๋ค. (ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๋ ์ฌ์ค ๊ฝค ์ค๋๋ ํจ๋ฌ๋ค์์ด๋ค) ์ฌ์ค OOP
๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
์ด๋ ํ๋ ์ด๋ฐ ๊ฒ๋ค์ ๊ฒฐ๊ตญ ํ๋ก๊ทธ๋จ์ ์ด๋ป๊ฒ ์ค๊ณํ ๊ฒ์ธ๊ฐ?
์ ๋ํ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ์ฅ๋จ์ ๋ํ ์กด์ฌํ๊ธฐ ๋ง๋ จ์ด๊ณ ์๋๋ ์ฉ๋์ ๋ง๊ฒ ๊ฐ์ ๋ ํจ๋ฌ๋ค์์ด ์ ์๋๋ ๊ฒ์ ์์ฐ์ค๋ฌ์ด ํ๋ฆ์ด๋ค.
ํ์๋ ๊ฐ์ธ์ ์ผ๋ก ์์ง๊น์ง OOP๊ฐ ๊ด์ฐฎ์ ์ค๊ณ ํจํด์ด๋ผ๊ณ ์๊ฐํ๊ณ ์์ง๋ง, ์ฌ๋ฌ๋ถ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด OOP๋ณด๋ค ๋ ํจ์จ์ ์ด๊ณ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ ์๋ ์๋ค.
๋น์ฐํ ์ด๋ค ํจ๋ฌ๋ค์์ ์ ํธํ๋์ง๋ ๊ฐ์ธ์ ์์ ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅด๊ฒ ์๊ฐํ ์ ์์ง๋ง, ์ด๋ค ๊ธฐ์ ์ ์ ํํ ๋๋ ํด๋น ๊ธฐ์ ์ ์ฅ๋จ์ ๊ณผ ๊ทธ ๊ธฐ์ ์ ์ ํํ์ ๋ ์ป์ ์ ์๋ ๊ฒ๊ณผ ์์ ์ ์๋ ๊ฒ์ ์ ๋๋ก ํ์ ํ๊ณ ์์ด์ผ ์ฌ๋ฐ๋ฅธ ์ ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ถ์ด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ ํํ๋ค๊ณ ํ๋๋ผ๋ OOP๊ฐ ๋ฌด์์ธ์ง ์๊ณ ์์ด์ผ ํ๋ ๊ฒ์ ๋ง์ฐฌ๊ฐ์ง๋ค.
๋ํ OOP๋ 1990๋
๋ ์ด๋ฐ๋ถํฐ 2019๋
์ธ ํ์ฌ๊น์ง๋ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ์ ์ค์ํ ์ญํ ์ ํ๊ณ ์๋ ๊ฐ๋
์ด๋ค. ์๋ฌด๋ฆฌ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ ์๋ก์ด ํจ๋ฌ๋ค์์ด ์ฃผ๋ชฉ๋ฐ๊ธฐ๋ ํ์ง๋ง ์์ง๊น์ง๋ OOP๊ฐ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋จ ์ค๊ณ์ ์ฌ์ฉ๋๊ณ ์๋ค๋ ์ฌ์ค์ ๋ถ์ ํ ์ ์๋ ํ์ค์ด๋ฉฐ, ์ด๊ฒ ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ OOP๋ฅผ ์ข์ ์ซ๋ ์๊ณ ์์ด์ผ ํ๋ ํ์ค์ ์ธ ์ด์ ์ค์ ํ๋์ด๋ค. (์ฐธ๊ณ ๋ก Java
, Python
, C++
๋ฑ ๋ฉ์ด์ ์ธ์ด๋ค๋ ์ ๋ถ OOP๋ฅผ ์ง์ํ๋ ์ธ์ด์ด๋ค.)
๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์์๋ OOP๊ฐ ์ถ๊ตฌํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง, ๋ OOP๋ฅผ ์ด๋ฃจ๊ณ ์๋ ๊ฐ๋ ๋ค์ ๋ฌด์์ด ์๋์ง ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด๋ ค๊ณ ํ๋ค.
๊ฐ์ฒด ์งํฅ์ด๋ผ๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํ๋์?
OOP์ ์๋ฏธ์ธ Object-Oriented Programming์ Object-Oriented
๋ฅผ ํ๊ตญ๋ง๋ก ๊ทธ๋๋ก ์ง์ญํ๋ฉด ๊ฐ์ฒด ์งํฅ
์ด๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ๊ฐ์ฒด๋ ํ์ค ์ธ๊ณ์ ์กด์ฌํ๋ ํ๋ ํ๋์ ๋
๋ฆฝ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์๋ฏธํ๋ค. ๋ณดํต OOP๋ฅผ ๋ฐฐ์ธ ๋ ๊ฐ์ฅ ์ฒ์ ์ ํ๋ ๊ฐ๋
์ด ๋ฐ๋ก ์ด ๊ฐ์ฒด
๋ผ๋ ๊ฐ๋
์ธ๋ฐ, ์ฌ์ค ํ๋ฒ ์ดํดํ๊ณ ๋๋ฉด ๊ฝค ๊ฐ๋จํ ๊ฐ๋
์ด์ง๋ง ์ฐ๋ฆฌ๊ฐ ํ์์ ์ด๋ฉด์ ์ ์๊ฐํด๋ณด์ง ์๋ ๊ฐ๋
์ด๊ธฐ ๋๋ฌธ์ ์ ์ดํด๊ฐ ๋์ง ์์ ์๋ ์๋ค.
๊ฐ์ฒด
๋ฅผ ์ค๋ช
ํ๊ธฐ ์ํด์๋ ํด๋์ค
๋ผ๋ ๊ฐ๋
์ ํจ๊ป ์ค๋ช
ํด์ผํ๋๋ฐ, ์ฉ์ด๊ฐ ์ง๊ด์ ์ด์ง ์์์ ๊ทธ๋ ์ง ์กฐ๊ธ๋ง ์๊ฐํด๋ณด๋ฉด ๋๊ตฌ๋ ๋ค ์ดํดํ ์ ์๋ ๊ฐ๋
์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฑธ ์ค๋ช
ํ ๋ ๋ถ์ด๋นต๊ณผ ๋ถ์ด๋นต ํ๊ณผ ๊ฐ์ ๋น์ ๋ฅผ ๋ค๋ฉฐ ์ค๋ช
ํ์ง๋ง ํ์๋ ์ผ๋ฐ์ ์ธ ์ค๋ช
๊ณผ ๋ค๋ฅด๊ฒ ํด๋์ค๋ ๋ฌด์์ด๊ณ , ๊ฐ์ฒด๋ ๋ฌด์์ด๋ค
๋ผ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๊ธฐ๋ณด๋ค๋ ์ผ๋จ OOP์ ํฌ๊ด์ ์ธ ์ค๊ณ ๊ฐ๋
์ ๋จผ์ ์ค๋ช
ํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋๋ก ํ๊ฒ ๋ค.
์ฌ๋ฏธ์๊ณ ๋ณต์กํ ์ฉ์ด๋ ์ผ๋จ ์ ์ณ๋๊ณ ์ผ๋จ ์์๋ฅผ ๋ณด๋ฉด์ ์์์ ํ๋ฆ๋๋ก ๋ฐ๋ผ์๋ณด์.
ํด๋์ค์ ๊ฐ์ฒด
ํ์๋ ์ด ํฌ์คํ
์ ์๋์์ OOP๋ ํ์ค ์ธ๊ณ๋ฅผ ํ๋ก๊ทธ๋จ์ ์ค๊ณ์ ๋ฐ์ํ๋ ๊ฒ
์ด๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค. ์ด ๋ง์ด ๋ปํ๋ ์๋ฏธ๋ฅผ ๋จผ์ ์ดํดํ๊ณ ๋๋ฉด ํด๋์ค๋ ๊ฐ์ฒด ๊ฐ์ ๊ฒ์ ์์ฐ์ค๋ฝ๊ฒ ์ดํดํ ์ ์์ผ๋ ๋จผ์ OOP๊ฐ ์ ํ์ค ์ธ๊ณ๋ฅผ ๋ฐ์ํ ์ค๊ณ ๋ฐฉ์์ด๋ผ๊ณ ํ๋ ์ง๋ฅผ ๋จผ์ ์์๋ณด๋๋ก ํ์.
๋ญ ์ฌ๋ฌ๊ฐ์ง ์์๊ฐ ์๊ฒ ์ง๋ง ์ฐ๋ฆฌ๊ฐ ์ผ์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ ๋ฌผ๊ฑด์ ์๋ก ๋๋ ๊ฒ์ด ์ข ๋ ์๋ฟ์ํ
๋ ํ์๋ ์ค๋งํธํฐ
์ ์๋ก ๋ค์ด์ ์ค๋ช
์ ์งํํ๋ ค๊ณ ํ๋ค. ํ์๋ ์ ํ์์ ๋ง๋ ์์ดํฐ7
์ด๋ผ๋ ๊ธฐ์ข
์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ดํฐ7์ ์์๋ก ์ค๋ช
์ ์์ํ๊ฒ ๋ค.

๋จผ์ , ์ฐ๋ฆฌ๊ฐ ์์ดํฐ7
์ด๋ผ๋ ๊ฒ์ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด ์ ์ผ ๋จผ์ ์์ดํฐ7์ด ๋ฌด์์ธ์ง๋ถํฐ ์ ์ํด์ผํ๋ค. ๋๋ฌด ์ด๋ ต๊ฒ ์๊ฐํ ํ์์๋ค. ์ง์ง๋ก ํ๋ก๊ทธ๋จ์ ์ง๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋์ถฉ ์ ์ํด๋ ๋๋ค.
ํ์๊ฐ ์ง๊ธ ๋ฐ๋ก ์๊ฐํด๋ธ ์์ดํฐ7์ ์ฝ๊ฐ ๋๊ธ๋๊ธํ ๋ฐ๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ํ
ํฑ ์์ง์ด ๋ด์ฅ๋ ํ ๋ฒํผ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์๋ฆฌ์ฆ ์ต์ด๋ก 3.5mm ์ด์ดํฐ ๋จ์๊ฐ ์์ด์ง ์์ดํฐ
์๋ฆฌ์ฆ๋ผ๋ ๊ฒ์ด๋ค. (๊ฐ์ธ์ ์ผ๋ก ์ด์ดํฐ ๋จ์ ์ข ๋ค์ ๋ฃ์ด์คฌ์ผ๋ฉด ํ๋คโฆ)
์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ ํ๋ฐ์ง ๋ ๋์๊ฐ์ ์์ดํฐ7์ ์์ ๊ฐ๋
์ธ ์์ดํฐ
์ ๋ํด์๋ ์ ์ํด๋ณผ ์ ์๋ค. ๊ฒฐ๊ตญ ์์ดํฐ7์ ์์ดํฐ์ด๋ผ๋ ๊ฐ๋
์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฅ๋ ๊ฐ๋
์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ผ ์์ดํฐ
์ ๋ฌด์์ผ๊น? ์์ดํฐ์ ์ ํ์์ ์ ์กฐํ ์ค๋งํธํฐ์ผ๋ก, iOS๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ค๋งํธํฐ ์๋ฆฌ์ฆ์ ๋ช
์นญ์ด๋ค. ์ด๋ ์์ดํฐ์ ์์ดํฐ7 ์ธ์๋ ์์ดํฐX, ์์ดํฐ8, ์์ดํฐ SE ๋ฑ ์๋ง์ ์์ดํฐ ์๋ฆฌ์ฆ์ ์ ํ๋ค์ ํฌํจํ๋ ์ข ๋ ํฌ๊ด์ ์ธ ๊ฐ๋
์ด๋ค.
์ผ์ ์์์ ์ฐ๋ฆฌ๊ฐ ์น๊ตฌํํ
๋ ํธ๋ํฐ ๋ญ ์จ?
๋ผ๊ณ ๋ฌผ์ด๋ดค์ ๋ ์น๊ตฌ๊ฐ ์์ดํฐ
๋๋ ๊ฐค๋ญ์
๋ผ๊ณ ๋๋ตํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์. ์ด๋ ์น๊ตฌ๋ ์์ ์ด ์ฌ์ฉํ๋ ์ค๋งํธํฐ์ด ์์ดํฐX
๋ ๊ฐค๋ญ์ S10
์ด๋ ๊ฐ์ ๋ฌด์์์ ์ผ๋ก ์์ดํฐ
์ด๋ ๊ฐค๋ญ์
๋ผ๋ ์ข ๋ ํฌ๊ด์ ์ธ ๊ฐ๋
์ ๋ ์ฌ๋ฆฌ๊ณ ํ์ ๊ฐ๋
๋ค์ ๊ทธ๋ฃนํํ ๊ฒ์ด๋ค. ๊ทธ ์ ๋๋ก ์ด๋ฐ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ด๋ฏธ ์ผ์์ ์ด๊ณ ์ต์ํ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ ต๊ฒ ์๊ฐํ์ง ๋ง์.

์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ์ ์ ํ์ ๊ฐ๋
์ธ ์์ดํฐ7
์ ์์ ๊ฐ๋
์ธ ์์ดํฐ
์ ํน์ง์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ด๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์์ดํฐ์ ๋ค๋ฅธ ํ์ ๊ฐ๋
์ธ ์์ดํฐX์ด๋ ์์ดํฐ SE์ ๊ฐ์ ์์ดํฐ ์๋ฆฌ์ฆ๋ค๋ ์์ดํฐ์ ๋ชจ๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ๋๋ด๋ฉด ์์ฌ์ฐ๋ ํ๋ฒ๋ง ๋ ํด๋ณด๋๋ก ํ์.
์์ดํฐ์ ์์ ๊ฐ๋
์ ๋ฌด์์ผ๊น? ์์ดํฐ์ ์ ํ์์ ์ ์กฐํ๊ณ iOS๋ฅผ ์ฌ์ฉํ๋ ์ค๋งํธํฐ
์ ๋ช
์นญ์ด๋ค. ์ฆ, ์์ดํฐ์ ์์ ๊ฐ๋
์ ์ค๋งํธํฐ
์ด๋ผ๊ณ ํ ์ ์๋ค. ์ด๋ ์ค๋งํธํฐ์ด๋ผ๋ ๊ฐ๋
์ ์์ดํฐ ๋ฟ๋ง ์๋๋ผ ๊ฐค๋ญ์, ์ค์ค๋ฏธ, ๋ฒ ๊ฐ์ ๊ฐ์ ๋ค๋ฅธ ์ค๋งํธํฐ๋ค๊น์ง ๋ชจ๋ ํฌ๊ดํ๋ ๊ฐ๋
์ผํ
๊ณ , ๋ง์ฐฌ๊ฐ์ง๋ก ์ด ์ค๋งํธํฐ์ด๋ผ๋ ๊ฐ๋
์ ํ์ ๊ฐ๋
๋ค์ ๋ชจ๋ ์ค๋งํธํฐ์ ํน์ง์ ๊ทธ๋๋ก ๊ฐ์ง๋ฉฐ ์์ ๋ค๋ง์ ๊ณ ์ ํ ํน์ง์ ์ถ๊ฐ์ ์ผ๋ก ๊ฐ์ง ์ ์์ ๊ฒ์ด๋ค.

์ด๋ฐ ์์ผ๋ก ์ฐ๋ฆฌ๋ ์์ดํฐ7
์ด๋ผ๋ ๊ฐ๋
์์ ์ถ๋ฐํ์ฌ ๊ณ์ํด์ ์์ ๊ฐ๋
์ ์ ์ํด๋๊ฐ ์ ์๋ค.
์์ดํฐ7 -> ์์ดํฐ -> ์ค๋งํธํฐ -> ํด๋์ ํ -> ๋ฌด์ ์ ํ๊ธฐ -> ์ ํ๊ธฐ -> ํต์ ๊ธฐ๊ธฐ -> ๊ธฐ๊ณโฆ
๊ฒฐ๊ตญ ์ด๋ ๊ฒ ์์ ๊ฐ๋
์ ์ถ์ ํด๋๊ฐ๋ฉด์ ์ค๊ณํ๋ ๊ฒ์ด OOP์ ๊ธฐ์ด์ด๊ณ , ์ด๋ ์์ดํฐ7
, ์์ดํฐ
๊ณผ ๊ฐ์ ๊ฐ๋
๋ค์ ํด๋์ค(Class)
๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๊ธ ํ๋ ๊ฒ์ฒ๋ผ ์์ ๊ฐ๋
์ ๋ง๋ค์ด๋๊ฐ๋ ํ์ ์์ฒด๋ฅผ ์ถ์ํ(Abstraction)
๋ผ๊ณ ํ๋ค. ์ถ์ํ๋ ๋ฐ์์ ๋ค์ ํ๋ฒ ์ค๋ช
ํ ํ
๋ ์ผ๋จ ์ง๊ธ์ ํด๋์ค๋ผ๋ ๊ฐ๋
๋ง ๊ธฐ์ตํ๋๋ก ํ์.
๊ทธ๋ผ ๊ฐ์ฒด(Object)
๋ ๋ฌด์์ผ๊น? ํ์๋ ๋ฐฉ๊ธ ํด๋์ค๋ฅผ ์ค๋ช
ํ๋ฉด์ ๊ฐ๋
์ด๋ผ๋ ๋จ์ด๋ฅผ ๊ต์ฅํ ๋ง์ด ์ฌ์ฉํ๋ค. ๋ง ๊ทธ๋๋ก ํด๋์ค์ ์ญํ ์ ์ด๋ ํ ๊ฐ๋
์ ์๋ฏธํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ๊ฐ๋
์ด๋ผ๋ ๊ฒ ๊ทธ ์์ฒด ๋ง์ผ๋ก๋ ํ์ค์ ๋ฌผ๊ฑด์ด ๋ ์๋ ์๋ ๋ฒ์ด๋ค.
์ ์๊ฐํด๋ณด๋ฉด ์์ดํฐ7์ด๋ผ๋ ๊ฒ ๋ํ ๊ทธ๋ฅ ์ด๋ ํ ์ ํ ๋ผ์ธ์ ์ด๋ฆ์ด๋ค. ์ด๋ค ๊ณ ์ ํ ๋ฌผ๊ฑด์ ์ด๋ฆ์ด ์๋๋ผ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ํ์๊ฐ ๋งํ๋ ๊ณ ์ ํ๋ค
๋ผ๋ ์๋ฏธ๋ ์ ์ธ๊ณ์ ๋จ ํ๊ฐ๋ง ์กด์ฌํ๋ ์์ค์ ๊ณ ์ ํจ์ด๋ค. ๋น์ฅ ๋ด ์์ดํฐ7๊ณผ ์น๊ตฌ์ ์์ดํฐ7๋ง ๋ด๋ ์ค์ ๋ก๋ ๋ค๋ฅธ ์์ดํฐ7์ด์ง ์์๊ฐ?
์ฆ, ์์ดํฐ7์ด๋ผ๋ ํด๋์ค๋ ์ด๋ ํ ์ค์ฒด๊ฐ ์๋ ๊ฒ ์๋๋ผ๋ ๊ฒ์ด๋ค. ์์ดํฐ7 ํด๋์ค์๋ CPU, ๋์คํ๋ ์ด ํด์๋, ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ฌ์์ด ์ ์๋์ด ์์ ๊ฒ์ด๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณต์ฅ์์ ์ค์ ์์ดํฐ7
์ ์ฐ์ด๋ด๊ณ ์ผ๋ จ๋ฒํธ๋ฅผ ๋ถ์ฌํ ํ ์ถ๊ณ ํ๊ณ ๋๋ฉด ๊ทธ์ ์์ผ ์ฐ๋ฆฌ ์์ ์ก์ ์ ์๋ ๋ฌผ๊ฑด์ธ ์์ดํฐ7์ด ๋๋ ๊ฒ์ด๋ค. ์ด๋ ์์ฐ๋ ์์ดํฐ7์๋ ๊ณ ์ ํ ID์ธ ์ผ๋ จ๋ฒํธ๊ฐ ๋ถ์ฌ๋์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ ์ธ๊ณ์ ์ผ๋ จ๋ฒํธ๊ฐ 1234
์ธ ์์ดํฐ7์ ๋จ ํ๋๋ฐ์ ์๋ค๋ ์ฌ์ค์ ์ ์ ์๋ค.
์ด๋ ์ด๋ ๊ฒ ์์ฐ๋ ์์ดํฐ7๋ค์ ๊ฐ์ฒด
๋ผ๊ณ ํ ์ ์๋ค.
์ฆ,
ํด๋์ค
๋ ์ผ์ข ์ ์ค๊ณ๋์ด๊ณ ์ด๊ฒ์ ์ฌ์ฉํ์ฌ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋ ์ค์ ๋ฌผ๊ฑด์ผ๋ก ๋ง๋ค์ด๋ด๋ ํ์๊ฐ ๋ฐ๋์ ํ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ๊ฐ์ฒด
๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ์ค์ ๋ฌผ๊ฑด์ด๋ค.
์ด๋ฌํ OOP์ ์ค๊ณ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ฐ๋ฆฌ์ ์ผ์ ์์ ๋ณด์ด๋ ๋๋ถ๋ถ์ ๊ฐ๋ ๋ค์ ์ถ์ํํ ์ ์๋๋ฐ, ๊ทธ๋ฅ ํ์์ ๋ณด์ด๋ ๋ชจ๋ ๊ฒ๋ค์ ์ด๋ ๊ฒ ์ถ์ํํด๋ณด๋ ์ฐ์ต์ ํ๋ฉด ๋๋ฆ ์ฌ๋ฏธ๋ ์๋ค. ๋ช๊ฐ์ง ์๋ฅผ ๋ค์ด๋ณด๊ฒ ๋ค.
- ์๋ํ -> ์คํ ์ธ๋จ -> ์ธ๋จ -> ์๋์ฐจ -> ์ด๋์๋จ
- ๋ฌธ๋์ฑ -> ๋จ์ -> ์ธ๊ฐ -> ์์ฅ๋ฅ -> ํฌ์ ๋ฅ -> ๋๋ฌผ
- ์ค๋ฒ์์น -> ๋ธ๋ฆฌ์๋๊ฐ ๋ง๋ FPS ๊ฒ์ -> FPS ๊ฒ์ -> ๊ฒ์
์ค์ ๋ก ์ฐ๋ฆฌ ์ผ์ ์์ ์กด์ฌํ๋ ๊ฑฐ์ ๋๋ถ๋ถ์ ๊ฐ๋ ์ ์ด๋ฐ ์ถ์ํ ๊ธฐ๋ฒ์ผ๋ก ์ด๋ ์ ๋ ์ ๋ฆฌํ ์ ์๋ค. ๋์ ๋ณด์ด๋ ์ํ ์์ ๋ฌผ๊ฑด๋ค์ ์ถ์ํ ํด๋ณด๋ ๊ฒ์ ๋ฐ๋ก ์๊ฐ์ ๋ด์ง ์์๋ ์ผ์ ์์์ ํ ์ ์๋ ์ข์ ์ฐ์ต ๋ฐฉ๋ฒ์ด๋ ํ๋ฒ ํด๋ณด๊ธฐ๋ฅผ ์ถ์ฒํ๋ค. ์ด ๋ฐฉ๋ฒ์ด ์ต์ํด์ง๋ฉด ์นดํ์ ๊ฐ์ ์ปคํผ๋ฅผ ๋ง์๋ฉด์๋ ๋จธ๋ฆฟ ์์์ ์์ ์นดํ๋ฅผ ๋ง๋ค์ด ๋ณผ ์๋ ์๋ค.(๋ฐ์ดํธ ํ ๋๋ ํ์ง ๋ง์๋ค)
๊ฒฐ๊ตญ ๊ฐ์ฒด ์งํฅ
์ด๋ผ๋ ๋ง์ ์๋ฏธ๋ ์ด๋ ๊ฒ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์์ ์ธ ๊ฐ๋
๋ค์ ์ ์ํ๊ณ , ๊ทธ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋์ผ๋ก์จ ํ์ค ์ธ๊ณ์ ๋ชจ๋ ๊ฒ์ ํํํ ์ ์๋ค๋ ๊ฒ์์ ์ถ๋ฐํ๋ ๊ฒ์ด๋ค.
์ถ์ํ์ ๋ํด์ ์กฐ๊ธ ๋ ๊น์ด ์๊ฐํด๋ณด์
๋ฐฉ๊ธ ์ฐ๋ฆฌ๋ ์์ดํฐ7๋ถํฐ ์์ํด์ ์์ ๊ฐ๋ ์ ์ด๋์ด๋ด๋ ๊ฐ๋จํ ์ถ์ํ๋ฅผ ๊ฒฝํํด๋ณด์๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ๋ฐฉ๊ธ ์ ์์๋ฅผ ์งํํ ๋๋ ๊ทธ๋ ๊ฒ๊น์ง ๊น์ ๊ณ ๋ฏผ์ด ์์์ ๊ฒ์ด๋ค. ์๋๋ฉด ์์ดํฐ์ด๋ ์ค๋งํธํฐ ๊ฐ์ ๊ฐ๋ ์ ์ด๋ฏธ ์ฐ๋ฆฌ์๊ฒ ์๋นํ ์น์ํ ๊ฐ๋ ์ด๊ธฐ ๋๋ฌธ์ ๊น์ด ๊ณ ๋ฏผํ ํ์์์ด ์ด๋ฏธ ์ฌ๋ฌ๋ถ์ ๋จธ๋ฆฟ์์ ์ด๋ ์ ๋ ์ถ์ํ๊ฐ ๋์ด ์ ๋ฆฌ๋ ์ํ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ์ค์ ๋ก ํ๋ก๊ทธ๋จ ์ค๊ณ์ OOP๋ฅผ ์ฌ์ฉํ ๋์๋ ์ฐ๋ฆฌ์๊ฒ ์น์ํ ์์ดํฐ๊ณผ ๊ฐ์ ๊ฐ๋ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ๋ฐ์๊ฐ ์ด ๊ฐ๋ ์์ฒด๋ถํฐ ์ ์ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ ์ถ์ํ๊ฐ ์ด๋ค ๊ฒ์ธ์ง ์ ํํ ์ดํดํ๊ณ ์์ง ์๋ค๋ฉด ์์นซ ์ด์ํ ๋ฐฉํฅ์ผ๋ก ํด๋์ค๋ฅผ ์ค๊ณํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ํํ ์ถ์ํ๊ฐ ๋ฌด์์ธ์ง ์ง๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ๋ค.
์ถ์
์ด๋ผ๋ ๋จ์ด์ ๋ป๋ถํฐ ํ๋ฒ ์๊ฐํด๋ณด์. ์ถ์
์ ์ด๋ ํ ์กด์ฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ฌ๋ฌ๊ฐ์ง์ ์์ฑ ์ค์์ ํน์ ํ ์์ฑ์ ๊ฐ๋ ค๋ด์ด ํฌ์ฐฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ํ์ ์ธ ์ถ์ํ ํ๊ฐ ์ค ํ๋ช
์ธ ํผ์นด์๊ฐ ์๋ฅผ ์ ์ ์ถ์ํํ๋ฉฐ ๊ทธ๋ ค๊ฐ๋ ๊ณผ์ ์ ํ๋ฒ ์ดํด๋ณด๋ฉด ์ถ์ํ๊ฐ ์ด๋ค ๊ฒ์ธ์ง ์กฐ๊ธ ๋ ์ดํด๊ฐ ๋๋ค.

์ด๋ ๋ฏ, ์ถ์ํ๋ผ๋ ๊ฒ์ ๊ทธ ์กด์ฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฅ ํน์ง์ ์ธ ์์ฑ๋ค์ ํ์ ํด๋๊ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฐ๋ฆฌ๊ฐ ๋ฐฉ๊ธ ์ ์์ดํฐ7์ ์์ ๊ฐ๋ ์ธ ์์ดํฐ์ ๋ ์ฌ๋ฆฌ๊ฒ ๋๋ ๊ณผ์ ์ ๊ฝค๋ ์ง๊ด์ ์ผ๋ก ์งํ๋์์ง๋ง ์ฌ์ค ์ถ์ํ๋ฅผ ๊ทธ๋ ๊ฒ ์ง๊ด์ ์ผ๋ก ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ๋ ๋ฐฉํฅ์ ์ก๊ธฐ๊ฐ ํ๋ค๋ค. ์๋๋๋ก๋ผ๋ฉด ์์ดํฐ์ด๋ผ๋ ์์ ๊ฐ๋ ์ ๋ง๋ค๊ณ ์ ํ์ ๋ ์์ดํฐ7 ๋ฟ๋ง์ด ์๋๋ผ ๋ค๋ฅธ ์์ดํฐ ์๋ฆฌ์ฆ๋ค๊น์ง ๋ชจ๋ ํฌํจํ ์ ์๋ ์์ดํฐ๋ค์ ๊ณตํต๋ ํน์ฑ์ ๋จผ์ ์ฐพ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์์์ด๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์ฌ๋ฐ๋ฅธ ์์ ๊ฐ๋ ์ ์์ฑ์ ๊ทธ ๊ฐ๋ ์ ํ์ ๊ฐ๋ ๋ค์๊ฒ ๊ณตํต์ ์ผ๋ก ์ ์ฉํ ์ ์๋ ์์ฑ์ด ๋๋ค.
์์ ๊ฐ๋
์์ดํฐ: ์ ํ์์ ๋ง๋ iOS ๊ธฐ๋ฐ์ ์ค๋งํธํฐ์์ดํฐ ํด๋์ค ๊ธฐ๋ฐ์ ํ์ ๊ฐ๋
์์ดํฐX: ์ ํ์์ ๋ง๋ iOS ๊ธฐ๋ฐ์ ์ค๋งํธํฐ์ด๋ฉฐ, ํ ๋ฒํผ์ด ์๊ณ ๋ฒ ์ ค๋ฆฌ์ค ๋์์ธ์ด ์ ์ฉ๋ ์์ดํฐ
์์ดํฐ7: ์ ํ์์ ๋ง๋ iOS ๊ธฐ๋ฐ์ ์ค๋งํธํฐ์ด๋ฉฐ, ํ ํฑ ์์ง์ด ๋ด์ฅ๋ ํ ๋ฒํผ์ ๊ฐ์ง๊ณ ์๋ ์์ดํฐ.
์์ดํฐ SE: ์ ํ์์ ๋ง๋ iOS ๊ธฐ๋ฐ์ ์ค๋งํธํฐ์ด๋ฉฐ, ์ฌ์ด์ฆ๊ฐ ์์์ ํ ์์ ์ก์ ์ ์๋ ์์ดํฐ.
์ด ์์์์ ๋ณผ ์ ์๋ฏ์ด ํ์ ๊ฐ๋
๋ค์ ์์ ๊ฐ๋
์ด ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ์์ฑ์ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ๋๋ฐ, ๊ทธ๋์ ์ด ๊ณผ์ ์ ์์(Inheritance)
์ด๋ผ๊ณ ํ๋ค. ์ด ์์์ ๊ดํด์๋ ๋ฐ์์ ๋ค์ ์์ธํ๊ฒ ์ดํด๋ณด๋๋ก ํ๊ฒ ๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 3๋์ฅ
๋ฐฉ๊ธ๊น์ง ์ค๋ช
ํ ํด๋์ค, ๊ฐ์ฒด, ์ถ์ํ๋ OOP๋ฅผ ์ด๋ฃจ๋ ๊ทผ๋ณธ์ ์ธ ๊ฐ๋
๋ค์ด๋ค. ํ์๋ ์ฌ๊ธฐ์ ์ข ๋ ๋์๊ฐ์ OOP๋ฅผ ์ง์ํ๋ ์ธ์ด๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ถ๊ณ ์๋ ๋ช๊ฐ์ง ๊ฐ๋
์ ๋ ์ค๋ช
ํ๋ ค๊ณ ํ๋ค. OOP๋ ๊ทธ ํน์ฑ ์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์กฐ๋ฆฝ
ํ๋ ํํ๋ก ํ๋ก๊ทธ๋จ์ ์ค๊ณํ๊ฒ ๋๋๋ฐ ์ด๋ ์ด ์กฐ๋ฆฝ์ ๋ ์ํํ๊ฒ ํ๊ธฐ ์ํด์ ๋์จ ์ ์ฉํ ๋ช๊ฐ์ง ๊ฐ๋
๋ค์ด ์๋ค.
ํ์ง๋ง ์ด ๊ฐ๋
๋ค์ JavaScript์๋ ๊ตฌํ๋์ง ์์ ๊ฐ๋
๋ ์์ผ๋ฏ๋ก ์ด๋ฒ์๋ Java
๋ฅผ ์ฌ์ฉํด์ ์์ ๋ฅผ ์งํํ๋๋ก ํ๊ฒ ๋ค. ๋จํธ์ ์ธ ๋ฌธ๋ฒ๋ง ๋ณด๋ฉด ๊ทธ๋ ๊ฒ ์ด์ง๊ฐ ๋๊ปด์ง ์ ๋๋ก ์ฐจ์ด๊ฐ ํฌ์ง ์๊ธฐ ๋๋ฌธ์ JavaScript๋ง ํ์
จ๋ ๋ถ๋ค๋ ์๋ง ๊ธ๋ฐฉ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค. ์ฐธ๊ณ ๋ก TypeScript๋ OOP๋ฅผ ์ง์ํ๊ธฐ๋ ํ์ง๋ง ์ด๊ฑฐ ์ธํ
ํ๋ ๊ฒ๋ณด๋ค ๊ทธ๋ฅ Java ์ปดํ์ผํ๋๊ฒ ํธํ๊ธฐ ๋๋ฌธ์ Java๋ก ๊ฐ๋ค.
๊ทธ๋ผ ์ด์ ๊ฐ์ฒด ์งํฅ์ 3๋์ฅ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์์
๊ณผ ์บก์ํ
, ๊ทธ๋ฆฌ๊ณ ๋คํ์ฑ
์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์์๋ณด๋๋ก ํ์.
์์
์์(Inheritance)
์ ๋ฐฉ๊ธ ์ ์ถ์ํ์ ๋ํ ์ค๋ช
์ ์งํํ๋ฉด์ ํ๋ฒ ์ง๊ณ ๋์ด๊ฐ๋ ๊ฐ๋
์ด๋ค. OOP๋ฅผ ์ ๊ณตํ๋ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์์์ extends
๋ผ๋ ์์ฝ์ด๋ก ํํ๋๋๋ฐ, ํ์ ๊ฐ๋
์
์ฅ์์ ๋ณด๋ฉด ์์ ๊ฐ๋
์ ์์ฑ์ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ด์ง๋ง ๋ฐ๋๋ก ์์ ๊ฐ๋
์
์ฅ์์ ๋ณด๋ฉด ์์ ์ ์์ฑ๋ค์ด ํ์ ๊ฐ๋
์ผ๋ก ๋์ด๊ฐ๋ฉด์ ํ์ฅ๋๋ ๊ฒ์ด๋ฏ๋ก ์ด ๋ง๋ ๋ง๋ค. ๊ทธ๋ผ ์ด์ ์์์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ์ฝ๋๋ก ์ดํด๋ณด๋๋ก ํ์.
class IPhone {
String manufacturer = "apple";
String os = "iOS";
}
class IPhone7 extends IPhone {
int version = 7;
}
class Main {
public static void main (String[] args) {
IPhone7 myIPhone7 = new IPhone7();
System.out.println(myIPhone7.manufacturer);
System.out.println(myIPhone7.os);
System.out.println(myIPhone7.version);
}
}
apple
iOS
7
IPhone7
ํด๋์ค๋ฅผ ์์ฑํ ๋ extends
์์ฝ์ด๋ฅผ ์ฌ์ฉํ์ฌ IPhone
ํด๋์ค๋ฅผ ์์๋ฐ์๋ค. IPhone7
ํด๋์ค์๋ manufacturer
์ os
์์ฑ์ด ๋ช
์์ ์ผ๋ก ์ ์ธ๋์ง ์์์ง๋ง ๋ถ๋ชจ ํด๋์ค์ธ IPhone
ํด๋์ค์ ์์ฑ์ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ์ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ด ์ํฉ์์ IPhoneX
ํด๋์ค๋ฅผ ์๋ก ๋ง๋ค์ด์ผ ํ ๋๋ IPhone
ํด๋์ค๋ฅผ ๊ทธ๋๋ก ๋ค์ ์ฌ์ฉํ ์ ์๋ค.
class IPhoneX extends IPhone {
int version = 10;
}
์ฆ, ์ถ์ํ๊ฐ ์๋ ํด๋์ค๋ฅผ ํ๋๋ง ๋ง๋ค์ด๋๋๋ค๋ฉด ๊ทธ์ ๋น์ทํ ์์ฑ์ด ํ์ํ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ฑํ ๋ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํ ์ ์๋ค๋ ๋ง์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์์ดํฐ ์๋ฆฌ์ฆ ์ ์ฒด์ ๊ฑธ์น ๋ณ๊ฒฝ์ฌํญ์ด ์๊ฒผ์ ๋๋ IPhone7
, IPhoneX
์ ๊ฐ์ ํด๋์ค๋ ๊ฑด๋๋ฆด ํ์์์ด IPhone
ํด๋์ค ํ๋๋ง ๊ณ ์น๋ฉด ์ด ํด๋์ค๋ฅผ ์์๋ฐ์ ๋ชจ๋ ํ์ ํด๋์ค์๋ ์๋์ผ๋ก ์ ์ฉ๋๋ฏ๋ก ๊ฐ๋ฐ ๊ธฐ๊ฐ๋ ๋จ์ถ์ํฌ ์ ์๊ณ ํด๋จผ ์๋ฌ๊ฐ ๋ฐ์ํ ํ๋ฅ ๋ ์ค์ผ ์ ์๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ๋ง์ฝ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋์ด์ ๊ฐค๋ญ์ ์๋ฆฌ์ฆ๋ฅผ ๋ง๋ค์ด์ผํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๊ฐค๋ญ์ ์๋ฆฌ์ฆ๋ iOS๊ฐ ์๋๋ผ Android๋ฅผ ์ฌ์ฉํ๊ณ , ์ ์กฐ์ฌ๋ ์ ํ์ด ์๋๋ผ ์ผ์ฑ์ด๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ๋ฐฉ๊ธ ๋ง๋ IPhone
ํด๋์ค๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค. ์ด๋ ์ฐ๋ฆฌ๋ IPhone
ํด๋์ค๋ฅผ ๊ทธ๋๋ก ๋
๋๊ณ ๊ทธ๋ฅ Galaxy
ํด๋์ค๋ฅผ ์๋ก ๋ง๋ค ์๋ ์์ง๋ง SmartPhone
์ด๋ผ๋ ํ๋จ๊ณ ๋ ์์ ๊ฐ๋
์ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ฅ์ ์ก์ ์๋ ์๋ค.
class SmartPhone {
SmartPhone (String manufacturer, String os) {
this.manufacturer = manufacturer;
this.os = os;
}
}
class IPhone extends SmartPhone {
IPhone () {
super("apple", "iOS");
}
}
class Galaxy extends SmartPhone {
Galaxy () {
super("samsung", "android");
}
}
class IPhone7 extends IPhone {
int version = 7;
}
class GalaxyS10 extends Galaxy {
String version = "s10";
}
์์ ์ฝ๋์์ super
๋ฉ์๋๋ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๋ฉ์๋์ด๋ค. ๋ถ๋ชจ ํด๋์ค๋ฅผ Super Class
, ์์ ํด๋์ค๋ฅผ Sub Class
๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ์ ๊ด๋ จ๋ ํค์๋ ์ญ์ super
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ ์์ ํด๋์ค์ธ IPhone7
์ด๋ GalaxyS10
ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ manufacturer
๋ os
์์ฑ์ ๋ฎ์ด์ฐ๊ฒ ํ ์๋ ์๋๋ฐ, ์ด๋ฌํ ์์
์ ์ค๋ฒ๋ผ์ด๋ฉ(Overriding)
์ด๋ผ๊ณ ํ๋ค. ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๋ฐฅ๋จน๋ฏ์ด ์ฐ๋ @Override
๋ฐ์ฝ๋ ์ดํฐ๋ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๋ฎ์ด์ฐ๋ ๋ฐฉ์์ผ๋ก ์ธ๋ถ ๊ตฌํ์ ์งํํ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ OOP์ ํด๋์ค ์์กด๊ด๊ณ๋ ํด๋์ค์ ์ฌ์ฌ์ฉ์ฑ์ ๋ํ์ฃผ๋ ๋ฐฉ๋ฒ์ด๊ธฐ๋ ํ์ง๋ง, ๋๋ฌด ํด๋์ค์ ์์ ๊ด๊ณ๊ฐ ๋ณต์กํด์ง๊ฒ ๋๋ฉด ๊ฐ๋ฐ์๊ฐ ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ํ์ ํ๊ธฐ๊ฐ ํ๋ค๋ค๋ ๋จ์ ๋ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ํ์คํ ์๋๋ฅผ ๊ฐ์ง๊ณ ์ ๋นํ ์ ์์ ์์ ๊ด๊ณ๋ฅผ ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๋ค. (๊ทผ๋ฐ ์ด ์ ๋นํ ์ ์ ๊ธฐ์ค์ด ๊ฐ๋ฐ์๋ง๋ค ๋ค ๋ค๋ฅด๋ค๋ ๊ฒ ํจ์ )
์บก์ํ
์บก์ํ(Encapsulation)
๋ ์ด๋ ํ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ๋ด๋ถ ๋์์ด ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ๋ชจ๋ฅด๋๋ผ๋ ์ฌ์ฉ๋ฒ๋ง ์๋ฉด ์ธ ์ ์๋๋ก ํด๋์ค ๋ด๋ถ๋ฅผ ๊ฐ์ถ๋ ๊ธฐ๋ฒ์ด๋ค. ํด๋์ค๋ฅผ ์บก์ํ ํจ์ผ๋ก์จ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ชฝ์์๋ ๋จธ๋ฆฌ ์ํ๊ฒ ํด๋น ํด๋์ค์ ๋ด๋ถ ๋ก์ง์ ํ์
ํ ํ์๊ฐ ์์ด์ง๋ค. ๋ํ ํด๋์ค ๋ด์์ ์ฌ์ฉ๋๋ ๋ณ์๋ ๋ฉ์๋๋ฅผ ์ํ๋ ๋๋ก ๊ฐ์ถ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ ์ด์์ ๋ณ์๋ ๋ฉ์๋๊ฐ ํด๋์ค ์ธ๋ถ๋ก ๋
ธ์ถ๋๋ ๊ฒ์ ๋ฐฉ์ดํ์ฌ ๋ณด์๋ ์ฑ๊ธธ ์ ์๋ค.
์ด๋ ๊ฒ ํด๋์ค ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ถ๋ ๊ฒ์ ์ ๋ณด ์๋(Information Hiding)
์ด๋ผ๊ณ ํ๋ฉฐ, ๋ณดํต public
, private
, protected
๊ฐ์ ์ ๊ทผ์ ํ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ถ๊ฑฐ๋ ๋
ธ์ถ์ํฌ ์ ์๋ค.
// Capsulation.java
class Person {
public String name;
private int age;
protected String address;
public Person (String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
}
์ ์ด๋ ๊ฒ ๊ฐ๋จํ ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์ด๋ณด์๋ค. Person
ํด๋์ค๋ ์์ฑ์์ ์ธ์๋ก ๋ค์ด์จ ๊ฐ๋ค์ ์์ ์ ๋ฉค๋ฒ ๋ณ์์ ํ ๋นํ๋๋ฐ, ์ด ๋ฉค๋ฒ ๋ณ์๋ค์ ๊ฐ๊ฐ public
, private
, protected
์ ์ ๊ทผ์ ํ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ์น๊ตฌ๋ค์ด๋ค. ๊ทธ๋ผ ํ๋ฒ ๊ฐ์ฒด๋ฅผ ์์ฑํด๋ณด๊ณ ์ด ์น๊ตฌ๋ค์ ๋ฉค๋ฒ ๋ณ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ฅผ ์์๋ณด์.
// Capsulation.java
class CapsulationTest {
public static void main (String[] args) {
Person evan = new Person("Evan", 29, "Seoul");
System.out.println(evan.name);
System.out.println(evan.age);
System.out.println(evan.address);
}
}
์, ์ฌ๊ธฐ๊น์ง ์ง์ ์์ฑํด๋ณด๋ฉด ์๊ฒ ์ง๋ง Java๋ ์ปดํ์ผ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ์คํ์์ผ๋ณด์ง ์๋๋ผ๋ IDE์์ ์ด๋ฏธ ์์์ ๋ค ๋ถ์์ ๋๋ด๊ณ ๋นจ๊ฐ์ค์ ์ซ์ซ ๊ทธ์ด์ฃผ์์ ๊ฒ์ด๋ค.

์๋ฌ๊ฐ ๋ ๋ถ๋ถ์ private
์ ๊ทผ์ ํ์๋ฅผ ์ฌ์ฉํ ๋ฉค๋ฒ๋ณ์์ธ age
์ด๋ค. ์ด์ฒ๋ผ private
์ ๊ทผ์ ํ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๋ ๋ฉค๋ฒ ๋ณ์๋ ๋ฉ์๋๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋ ์ ์๊ณ ์ธ๋ถ๋ก๋ ์์ ๋
ธ์ถ ์์ฒด๊ฐ ๋์ง ์๋๋ค. public
๊ณผ protected
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ ๋ฉค๋ฒ ๋ณ์์ธ name
๊ณผ address
๋ ์ ์์ ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ ์ํ์ด๋ค.
public
๊ฐ์ ๊ฒฝ์ฐ๋ ์ด๋ฆ๋ง ๋ด๋ ํด๋์ค ์ธ๋ถ์์ ๋ง์๋๋ก ์ ๊ทผํ ์ ์๋๋ก ์ด์ด์ฃผ๋ ์ ๊ทผ์ ํ์๋ผ๋ ๊ฒ์ ์ ์ ์์ง๋ง, protected
๊ฐ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ฒ์ ์กฐ๊ธ ์ด์ํ๋ค. ์ด๋ฆ๋ง ๋ณด๋ฉด ์ ์ง ์ด ์น๊ตฌ๋ private
์ฒ๋ผ ์ ๊ทผ์ด ๋งํ์ผํ ๊ฒ ๊ฐ์๋ฐ ์ ์ธ๋ถ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ฒ์ผ๊น?
protected
์ ๊ทผ์ ํ์๋ ํด๋น ํด๋์ค๋ฅผ ์์๋ฐ์ ํด๋์ค์ ๊ฐ์ ํจํค์ง ์์ ์๋ ํด๋์ค๊ฐ ์๋๋ฉด ๋ชจ๋ ์ ๊ทผ์ ๋ง๋ ์ ๊ทผ์ ํ์์ธ๋ฐ, ์์ ์์์ ๊ฒฝ์ฐ ํ์๋ Person
ํด๋์ค์ CapsulationTest
ํด๋์ค๋ฅผ ๊ฐ์ ํ์ผ์ ์ ์ธํ์ผ๋ฏ๋ก ๊ฐ์ ํจํค์ง๋ก ์ธ์๋์ด ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ Person
ํด๋์ค๋ฅผ ๋ค๋ฅธ ํจํค์ง๋ก ๋ถ๋ฆฌํด๋ด๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ํ
์คํธ ํด๋ณด๊ธฐ ์ํด ๋จผ์ MyPacks
๋ผ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์ Person.java
ํ์ผ์ ๋ฐ๋ก ๋ถ๋ฆฌํ์ฌ ๋ณ๋์ ํจํค์ง๋ก ์ ์ธํด์ฃผ๊ฒ ๋ค.
// MyPacks/Person.java
package MyPacks;
public class Person {
public String name;
private int age;
protected String address;
public Person (String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
}
// Capsulation.java
import MyPacks.Person;
class CapsulationTest {
public static void main (String[] args) {
Person evan = new Person("Evan", 29, "Seoul");
System.out.println(evan.name);
System.out.println(evan.address);
}
}
์ด๋ ๊ฒ Person
ํด๋์ค๋ฅผ ๋ณ๋์ ํจํค์ง๋ก ๋ถ๋ฆฌํ๋ฉด ์ด์ evan.address
์๋ ๋นจ๊ฐ ์ค์ด ์ซ ๊ทธ์ด์ง๋ค.

์ด๋ ๊ฒ ์ธ๋ถ ํจํค์ง๋ก ๋ถ๋ฌ์จ ํด๋์ค ๋ด๋ถ ๋ด์ protected
๋ฉค๋ฒ ๋ณ์๋ ๋ฉ์๋์๋ ๋ฐ๋ก ์ ๊ทผํ ์ ์๋ค. ๊ทธ๋ฌ๋ Person ํด๋์ค๋ฅผ ์์ํ๋ค๋ฉด ์ธ๋ถ ํจํค์ง์ธ์ง ์๋์ง ์ฌ๋ถ์ ์๊ด ์์ด ์์ ํด๋์ค ๋ด์์๋ protected
๋ฉค๋ฒ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
// Capsulation.java
import MyPacks.Person;
class CapsulationTest {
public static void main (String[] args) {
Evan evan = new Evan();
}
}
class Evan extends Person {
Evan () {
super("Evan", 29, "Seoul");
System.out.println(this.address);
System.out.println(super.address);
}
}
Seoul
Seoul
์ ๊ทผ์ ํ์๋ Java ๋ฟ๋ง ์๋๋ผ TypeScript, Ruby, C++ ๋ฑ๊ณผ ๊ฐ์ด OOP๋ฅผ ์ง์ํ๋ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค๋ ๊ฐ์ง๊ณ ์๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก ์ด ๊ฐ๋ ์ ์ ์์๋๋ฉด ํด๋์ค๋ฅผ ์ค๊ณํ ๋ ์ํ๋ ์ ๋ณด๋ง ๋ ธ์ถ์ํค๊ณ ์ํ์ง ์๋ ์ ๋ณด๋ ๊ฐ์ถ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ณด์๋ ์งํฌ ์ ์๊ณ ํด๋์ค๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ์ธ๋ฐ์๋ ๊ณ ๋ฏผ์ ์ํ๊ฒ ํด์ค ์๋ ์๋ค.
๋คํ์ฑ
๋คํ์ฑ(Polymorphism)
์ ์ด๋ค ํ๋์ ๋ณ์๋ช
์ด๋ ํจ์๋ช
์ด ์ํฉ์ ๋ฐ๋ผ์ ๋ค๋ฅด๊ฒ ํด์๋ ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋คํ์ฑ์ ์ด๋ค ํ๊ฐ์ง ๊ธฐ๋ฅ์ ์๋ฏธํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ๋
์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํํํ ์ ์๋ค.
Java์์ ๋คํ์ฑ์ ์ํ ๋ํ์ ์ธ ๊ธฐ๋ฅ์ ๋ฐ๋ก ์ถ์ ํด๋์ค(Abstract Class)
์ ์ธํฐํ์ด์ค(Interface)
, ๊ทธ๋ฆฌ๊ณ Overloading
์ด ์๋ค. ์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค๋ ์ฌ์ค ๊ทธ ์ฉ๋๊ฐ ์กฐ๊ธ ๋ค๋ฅด์ง๋ง ํ์๊ฐ ์๋ก ๋ค ๊ฐ๋จํ ์์์์๋ ๊ทธ ์ฐจ์ด๋ฅผ ํฌ๊ฒ ๋๋ผ๊ธฐ ํ๋ค๊ธฐ๋ ํ๊ณ ๋ฌด์๋ณด๋ค ์ด ํฌ์คํ
์ Java ํฌ์คํ
์ด ์๋๋ผ ๋จ์ํ ๋คํ์ฑ
์ ์ค๋ช
ํ๊ธฐ ์ํจ์ด๋ฏ๋ก ํ์๋ ์ด ์ค ์ถ์ ํด๋์ค
๋ง์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด ๊ธฐ๋ฅ๋ค์ด ์ด๋ค ์ญํ ์ ํ๋ ์ง ์ดํด๋ณด๋ฉด์ ๋คํ์ฑ์ด ๋ฌด์์ธ๊ฐ๋ฅผ ์ข ๋ ์์ธํ ์์๋ณด๋๋ก ํ์. ๋จผ์ , ์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋คํ์ฑ์ ๋ง์กฑ์ํค๋ ์์๋ฅผ ๋จผ์ ์ค๋ช ํ ํ ๋ฐ, ์ฌ์ค ๋คํ์ฑ์ด๋ผ๋ ๋จ์ด๋ฅผ ๋ชจ๋ฅด๊ณ ์๋ ๋ถ๋ค์ด๋ผ๋ ์์ ๋ ๋ชจ๋ฅด๊ฒ ์ด๋ฐ ์ค๊ณ ํจํด์ ์ฌ์ฉํ๊ณ ์์์ ์๋ ์์ ์ ๋๋ก ๊ธฐ๋ณธ์ ์ธ ์์์ด๋ค.
์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋คํ์ฑ ๊ตฌํ
์ถ์ ํด๋์ค๋ Java์์ ๋คํ์ฑ์ ๋ง์กฑ์ํค๊ธฐ ์ํด ์์ฃผ ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ๊ธฐ๋ฅ์ด๋ค. ๋ง๋ก๋ง ์ค๋ช ํ๋ฉด ์ฌ๋ฏธ๊ฐ ์์ผ๋ ํ๋ฒ ์ฝ๋๋ฅผ ์ง์ ๋์ผ๋ก ๋ณด๋ ๊ฒ์ด ์ข์๋ฐ, ํ์๋ ์ค๋ฒ์์น๋ฅผ ์ข์ํ๊ธฐ ๋๋ฌธ์ ์ถ์ ํด๋์ค์ ๋ํ ์์๋ ์ค๋ฒ์์น๋ฅผ ๊ฐ์ ธ์์ ์ค๋ช ํ๊ฒ ๋ค.

์, ํ์๋ ์ด์ ์ค๋ฒ์์น์ ์ฌ๋ฌ ์์ ๋ค์ ํด๋์ค๋ก ๋ง๋๋ ค๊ณ ํ๋ค. ์ค๋ฒ์์น์ ์์ ๋ค์ ๊ณตํต์ ์ผ๋ก โ๊ถ๊ทน๊ธฐ ๊ฒ์ด์ง๊ฐ ์ฐผ์ ๋ Q ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ถ๊ทน๊ธฐ๊ฐ ๋ฐ๋๋๋คโ๋ผ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค. ํ์ง๋ง ์ค๋ฒ์์น์ ์์ ๋ค์ ๊ฐ์ ํน์์ ๋ง๊ฒ ๋ค๋ฅธ ๊ถ๊ทน๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ, ๋ผ์ธํ๋ฅดํธ๋ ๋ง์น๋ฅผ ๋ด๋ฆฌ์น๋ฉฐ ๋ค๋ฅธ ์์ ๋ค์ ๊ธฐ์ ์ํค๊ณ ๋งฅํฌ๋ฆฌ๋ ์์ผ์ ๋ณด์ด๋ ์ฌ๋ฌ ์์ ์๊ฒ ๋์์ ํค๋์ท์ ๋ ๋ฆด ์ ์์ผ๋ฉฐ ๋ฉ์ด๋ ๋ก๋ด์ ๋์ ธ์ ์ผ์ ๋ฒ์ ์์ ์์ ๋ค์ ์ผ๋ฆฐ๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ๋คํ์ฑ์ ๊ฐ์ง์ง ์์ ์ค๋ฒ์์น ์์ ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ ๋ชจ์ต์ ๋ณด์ผ ๊ฒ์ด๋ค.
class Hero {
public String name;
Hero (String name) {
this.name = name;
}
}
class Reinhardt extends Hero {
Reinhardt () {
super("reinhardt");
}
public void attackHammer () {
System.out.println("๋ง์น ๋๊ฐ์ ๋ค!");
}
}
class McCree extends Hero {
McCree () {
super("mccree");
}
public void attackGun () {
System.out.println("์์์ด ์ง๋ค. ๋นต์ผ๋นต์ผ");
}
}
class Mei extends Hero {
Mei () {
super("mei");
}
public void throwRobot () {
System.out.println("๊ผผ์ง ๋ง! ์์ง์ด์ง ๋ง์ธ์!");
}
}
์ด๋ ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ Hero
ํด๋์ค๋ฅผ ์์๋ฐ์ ์์
ํด๋์ค๋ค์ ๊ถ๊ทน๊ธฐ๋ฅผ ๋ฐ๋์ํค๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์๋ด๋ ๋ปํ๊ฒ ์ง๋ง ๋๋ฌผ๋๋ if
๋ฌธ ๋๋ switch
๋ฌธ์ ํฅ์ฐ์ด ํผ์ณ์ง ๊ฒ์ด๋ค.
๋ชจ๋ ์์
๋ค์ ๊ถ๊ทน๊ธฐ ๋ฐ๋ ๋ฉ์๋์ ์ด๋ฆ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฌ๋ฆฌ ๋ฐฉ๋๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ผ๋ก Hero
ํด๋์ค์๋ ๊ถ๊ทน๊ธฐ ๋ฐ๋ ๋ฉ์๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ํด๋น ์์
์ ํด๋์ค๋ก ํ๋ณํ ํด์ค์ผํ๋ ๋ถํธํ ์์
๋ ํด์ผํ๋ค.
class Main {
public static void main (String[] args) {
Mei myMei = new Mei();
Reinhardt myReinhardt = new Reinhardt();
McCree myMcCree = new McCree();
Main.doUltimate(myMei);
Main.doUltimate(myReinhardt);
Main.doUltimate(myMcCree);
}
public static void doUltimate (Hero hero) {
if (hero instanceof Reinhardt) {
Reinhardt myHero = (Reinhardt)hero;
myHero.attackHammer();
}
else if (hero instanceof McCree) {
McCree myHero = (McCree)hero;
myHero.attackGun();
}
else if (hero instanceof Mei) {
Mei myHero = (Mei)hero;
myHero.throwRobot();
}
}
}
๊ผผ์ง ๋ง! ์์ง์ด์ง ๋ง์ธ์!
๋ง์น ๋๊ฐ์ ๋ค!
์์์ด ์ง๋ค. ๋นต์ผ๋นต์ผ
์ฌ๊ธฐ์ ์์
์ด ๋ ์ถ๊ฐ๋๋ค๋ฉด ์์
์ ์ข
๋ฅ ๋งํผ ๋ถ๊ธฐ์ ๊ฐ์๋ ๋์ด๋ ๊ฒ์ด๊ณ , ๋ฌด์๋ณด๋ค Mei myHero = (Mei)hero
์ฒ๋ผ ๊ตณ์ด ์๋ก์ด ๋ณ์๋ฅผ ์ ์ธํ๋ฉด์ ์ฌ์ฉํ๊ณ ์๋ ๊ฑธ ๋ณด์๋ ๋ง์์ด ํ์ผ ์ด ๋จน๋จนํด์ ธ์จ๋ค. ๋คํ์ฑ์ ๋ฐ๋ก ์ด๋ด ๋ ์ฐ๋ฆฌ๋ฅผ ํ๋ณตํ๊ฒ ๋ง๋ค์ด ์ค ์ ์๋ ๋จ๋น์ ๊ฐ์ ๊ฐ๋
์ด๋ค.
์, ์๊น ์์์ ํ์๋ ๋คํ์ฑ์ ๊ฐ๋
์ ์ด๋ค ํ๋์ ๋ณ์๋ช
์ด๋ ํจ์๋ช
์ด ์ํฉ์ ๋ฐ๋ผ์ ๋ค๋ฅด๊ฒ ํด์๋ ์ ์๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ์์
๋ค์ ๊ถ๊ทน๊ธฐ ํธ์ถ ๋ฉ์๋๋ช
์ ultimate
๋ก ํต์ผํ๋, ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ์ ๋ ์คํ๋๋ ์ฝ๋๋ ์์
์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ก ๋ง๋ค๋ฉด ๋คํ์ฑ์ ๋ง์กฑ์ํฌ ์ ์๋ ๊ฒ์ด๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ๊ทธ๋ฅ Hero
ํด๋์ค๋ฅผ ์์๋ฐ์ ์์
ํด๋์ค๋ค์๊ฒ ์ง์ ํ๋ํ๋ ultimate
๋ผ๋ ๋ฉ์๋๋ฅผ ์ ์ธํ ์๋ ์์ง๋ง, ๊ทธ๋ ๊ฒ ๋๋ฉด ๊ฐ๋ฐ์๊ฐ ์ค์ํ ํ๋ฅ ์ด ์กด์ฌํ๋ค.(ํนํ ์คํ๋ก ์ธํ ์ค์๊ฐ ๊ฐ์ฅ ๋ง์ ๊ฒ์ด๋ค) ๊ทธ๋์ Java๋ ๊ฐ๋ฐ์๊ฐ ํน์ ๋ฉ์๋๋ฅผ ๊ฐ์ ๋ก ๊ตฌํํ๋๋ก ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๊ทธ ๊ธฐ๋ฅ์ด ๋ฐ๋ก ์ถ์ ํด๋์ค(Abstract Class)
์ ์ธํฐํ์ด์ค(Interface)
์ธ ๊ฒ์ด๋ค. ํ์๋ ์์์ ํ๋ฒ ์ด์ผ๊ธฐ ํ๋ฏ์ด ์ด ์ค ์ถ์ ํด๋์ค
๋ง์ ์ฌ์ฉํ์ฌ ์์ ๋ฅผ ์งํํ ๊ฒ์ด๋ค.
๊ทธ๋๋ ํน์ ์ด ๋ ๊ธฐ๋ฅ์ด ๋ญ๊ฐ ๋ค๋ฅธ์ง ๊ถ๊ธํ์ ๋ถ์ด ์์ ๊ฒ ๊ฐ์ผ๋ ์ต๋ํ ๊ฐ๋จํ๋ง ์ค๋ช
ํ๊ณ ๋์ด๊ฐ์๋ฉด, ์ถ์ ํด๋์ค
๋ ์ด๋ค ํด๋์ค์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด์ ๊ทธ ๊ธฐ๋ฅ์ ํ์ฅํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ ์ธํฐํ์ด์ค
๋ ์๋ฌด๋ฐ ๊ตฌํ์ฒด๊ฐ ์๋ ๊ทธ๋ฅ ๊ป๋ฐ๊ธฐ๋ง ๊ตฌํํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธํฐํ์ด์ค์๋ ์์ธํ ๋ฉ์๋์ ๊ตฌํ์ฒด๊ฐ ๋ค์ด๊ฐ ์ ์์ง๋ง ์ถ์ ํด๋์ค๋ ์์ฒด์ ์ธ ๋ฉ์๋์ ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ง ์๋ ์๋ค. (Java 8๋ถํฐ๋ default ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค์๋ ๋ฉ์๋ ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ ์ ์๊ฒ ๋ณ๊ฒฝ๋๊ธดํ๋ค. ๋๋ถ์ ๊ตฌ๋ถ์ด ๋ ์ ๋งคํด์ง.)
์ด ์์ ์ Hero
ํด๋์ค๋ name
๋ฉค๋ฒ ๋ณ์๋ฅผ ์์ฑ์๋ก๋ถํฐ ๋ฐ์์ ์์ ์ ๋ฉค๋ฒ ๋ณ์๋ก ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ์ ํ๋ค. ๊ทธ๋ผ ์ด์ ์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ultimate
๋ฉ์๋์ ๊ตฌํ์ ๊ฐ์ ํด๋ณด๋๋ก ํ์.
abstract class Hero {
public String name;
Hero (String name) {
this.name = name;
}
// ๋ด๋ถ ๊ตฌํ์ฒด๊ฐ ์๋ ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธํ๋ค.
public abstract void ultimate ();
}
class Reinhardt extends Hero {
Reinhardt () {
super("reinhardt");
}
public void ultimate () {
System.out.println("๋ง์น ๋๊ฐ์ ๋ค!");
}
}
class McCree extends Hero {
McCree () {
super("mccree");
}
public void ultimate () {
System.out.println("์์์ด ์ง๋ค. ๋นต์ผ๋นต์ผ");
}
}
class Mei extends Hero {
Mei () {
super("mei");
}
public void ultimate () {
System.out.println("๊ผผ์ง ๋ง! ์์ง์ด์ง ๋ง์ธ์!");
}
}
์ด๋ ๊ฒ ์ถ์ ํด๋์ค์ธ Hero
๋ฅผ ์์๋ฐ์ ์์
ํด๋์ค๋ค์ ๋ฌด์กฐ๊ฑด ultimate
๋ฉ์๋๋ฅผ ๊ตฌํํด์ผํ๋ค. ์ด๋ ๊ฒ ๋ฉ์๋๋ช
์ด ํต์ผ๋๋ฉด ์์
ํด๋์ค๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ์
์ฅ์์๋ ๊ถ๊ทน๊ธฐ๋ฅผ ๋ฐ๋์ํค๊ณ ์ถ์ ๋ ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํด์ผํ ์ง ์ด์ ๋ ์ด์ ๊ณ ๋ฏผํ ํ์๊ฐ ์๋ค.
class Main {
public static void main (String[] args) {
Mei myMei = new Mei();
Reinhardt myReinhardt = new Reinhardt();
McCree myMcCree = new McCree();
Main.doUltimate(myMei);
Main.doUltimate(myReinhardt);
Main.doUltimate(myMcCree);
}
public static void doUltimate (Hero hero) {
// Hero ํด๋์ค๋ฅผ ์์๋ฐ์ ํด๋์ค๋
// ๋ฌด์กฐ๊ฑด ultimate ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค.
hero.ultimate();
}
}
์ด๋ค๊ฐ? ์ฝ๋๊ฐ ํจ์ฌ ์ฌํํด์ง์ง ์์๋๊ฐ? ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค ๋ด๋ถ์ ultimate
๋ผ๋ ๋ฉ์๋์ ๊ตฌํ์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ Hero
ํด๋์ค๋ฅผ ์์๋ฐ์ ์์
ํด๋์ค์ ํด๋น ๋ฉ์๋๊ฐ ์์ ํ๋ฅ ์ ์ ํ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ ์
์ฅ์์๋ ๊น์ ๊ณ ๋ฏผ์์ด ์์ฌํ๊ณ ultimate
๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
๋ํ ultimate
๋ฉ์๋๋ ๋ชจ๋ ์์
ํด๋์ค๋ค์ด ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋์ด์ง๋ง ๋ด๋ถ ๊ตฌํ์ ์ ๋ถ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ํ๋ ์คํฌ ๋ํ ์์
๋ณ๋ก ๋ค๋ฅด๊ฒ ๋์ฌ ๊ฒ์ด๋ค. ์ด๋ฐ ๊ฒ์ ๋ฐ๋ก ๋คํ์ฑ
์ด๋ผ๊ณ ํ๋ ๊ฒ์ด๋ค.
์ค๋ฒ๋ก๋ฉ์ ์ฌ์ฉํ ๋คํ์ฑ ๊ตฌํ
์ด๋ฒ์๋ ์ค๋ฒ๋ก๋ฉ(Overloading)
์ ์ฌ์ฉํ ๋คํ์ฑ์ ์์๋ฅผ ํ๋ฒ ์ดํด๋ณด๋๋ก ํ์. ์์ ์์
์ฑํฐ์์ ์ ๊น ์ธ๊ธํ๊ณ ๋์ด๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ(Overriding)
๊ณผ ํท๊ฐ๋ฆฌ์ง ๋ง์.
์ค๋ฒ๋ผ์ด๋ฉ์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋ ๋ฉ์๋๋ฅผ ๋ฎ์ด ์์ฐ๋ ๊ฒ์ด๊ณ , ์ค๋ฒ๋ก๋ฉ์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋คํ์ฑ์ ์ํ ๊ธฐ๋ฅ์ด๋ค.(ํ์๋ ํ๊ต์์ ์ํ๋ณผ ๋ ์์ฃผ ํท๊ฐ๋ ธ๋ค)
์ค๋ฒ๋ก๋ฉ์ ์๊ฐ๋ณด๋ค ๋จ์ํ ๊ฐ๋ ์ด์ง๋ง, ๋ง์ฝ ์ค๋ฒ๋ก๋ฉ์ ์ง์ํ์ง ์๋ ์ธ์ด์ธ JavaScipt๋ Python์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ค์๊ฒ๋ ๋๋ฆ ์ถฉ๊ณต๊นฝ์ผ ์ ์๋ค. ๊ทธ ์ด์ ๋ ๋ฐ๋ก ์ค๋ฒ๋ก๋ฉ์ด โ๋ฉ์๋์ ์ธ์๋ก ์ด๋ค ๊ฒ์ ๋๊ธฐ๋์ ๋ฐ๋ผ์ ์ด๋ฆ๋ง ๊ฐ์ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ๊ธฐ๋ฅโ์ด๊ธฐ ๋๋ฌธ์ด๋ค.

이게 뭔 개소리야?
์ด๋ค ํด๋์ค๊ฐ sum
์ด๋ผ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํด๋ณด์. ์ด๋ sum
์ ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ ํ ์ด ๋ ๊ฐ์ ํฉ์ณ์ ๋ฆฌํดํ๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๊ทผ๋ฐ ๋ง์ฝ 3๊ฐ๋ฅผ ํฉ์น๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ด๋ฐ ๊ฒฝ์ฐ์ JavaScript์ ๊ฐ์ด ์ค๋ฒ๋ก๋ฉ์ ์ง์ํ์ง ์๋ ์ธ์ด์์๋ ํธ๋ฒ์ ์ฌ์ฉํ ์ ๋ฐ์ ์๋ค.
class Calculator {
sum (...args) {
return args.reduce((prev, current) => prev + current);
}
}
const c = new Calculator();
c.sum(1, 2, 3, 4, 5);
15
๋ญ ์ด์จ๋ ๋๊ธด ๋๋๊น ์๊ด์๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง, ์ด๊ฑด ๊ฐ์ฒด์ ๋คํ์ฑ์ด๋ผ๊ธฐ๋ณด๋ค ๊ทธ๋ฅ JavaScript์ ์ธ์ด์ ์ธ ํน์ฑ์ ์ฌ์ฉํ์ฌ ์ฐํํ ๊ฒ์ ๋ถ๊ณผํ๋ค. ์ด๋ ๊ฒ ์์ฑํ๋ฉด โ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ํด์ ๋ฐํํ๋ ๋ฉ์๋โ์์ โn๊ฐ์ ์ธ์๋ฅผ ๋ํด์ ๋ฐํํ๋ ๋ฉ์๋โ๋ก๋ ๋ง๋ค ์ ์์ง๋ง ๊ฐ์ฒด์ ๋คํ์ฑ์ ๋ง์กฑํ ์๋ ์๋ค. ์ด ๋ฉ์๋์ ๋ํ๋ค
๋ผ๋ ๊ธฐ๋ฅ ์์ฒด๋ ๋ณ๊ฒฝํ ์ ์์ด์ผ ๊ทธ์ ์์ผ ๋คํ์ฑ์ ๋ง์กฑํ๋ค๊ณ ํ ์ ์๋ ๊ฒ์ด๋ค.
๋ฐ๋ฉด, Java๋ C++๊ณผ ๊ฐ์ ์ธ์ด์์๋ ์ ๋๋ก ๋คํ์ฑ์ ๋ง์กฑ์ํฌ ์ ์๋ ์ค๋ฒ๋ก๋ฉ์ ์ง์ํ๋ค.
class Overloading {
public int sum (int a, int b) {
return a + b;
}
public int sum (int a, int b, int c) {
return a + b + c;
}
public String sum (String a, String b) {
return a + b + "์
๋๋ค.";
}
}
์จ, ๊ฐ๋จํ ํด๋์ค๋ฅผ ํ๋ ์ ์ธํ๊ณ sum
์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ธํ๋ค. ๋ง์ฝ JavaScript์์ ์ด๋ ๊ฒ ์ ์ธํ๋ค๊ฐ๋ ์์ ์ ์ธ๋ ๋๊ฐ์ sum
์ ๋ฌด์๋๊ณ ๋งจ ์๋์ sum
๋ฉ์๋๋ก ๋ฎ์ด์์์ง๊ธฐ ๋๋ฌธ์ ์ค๋ฒ๋ก๋ฉ์ ํ ์๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌธ์์ด์ ์ธ์๋ก ๋ฐ๋ sum
๋ฉ์๋์ ๊ฒฝ์ฐ์๋ ๋ฌธ์์ด ๋งจ ๋ค์ ์
๋๋ค
๋ ๋ถํ๋ ์ผ์ค๋ฅผ ๋ฐํํ๋๋ก ๋ง๋ค์ด์ฃผ์๋ค. JavaScript์์๋ ์ด ๋์์ ๊ตฌํํ๋ ค๋ฉด ๋ฐ๋์ ํ์
์ ์ฒดํฌํ๋ ์กฐ๊ฑด ๋ถ๊ธฐ๋ฌธ์ด ํ์ํ์ง๋ง Java๋ ์ค๋ฒ๋ก๋ฉ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ด ํ์๊ฐ ์๋ค.
๊ทธ๋ผ ์ด์ ํ๋ฒ ์ด ๋ฉ์๋๋ค์ด ์ ์๋ํ๋ ํธ์ถํด๋ณด๋๋ก ํ์.
class Main {
public static void main (String[] args) {
Overloading o = new Overloading();
System.out.println(o.sum(1, 2));
System.out.println(o.sum(1, 2, 3));
System.out.println(o.sum("์", "๋ฐ"));
}
}
3
6
์๋ฐ์
๋๋ค.
์์ ์์์์ ๋ณผ ์ ์๋ฏ์ด Overloading
ํด๋์ค๋ ์ฌ๋ฌ ๊ฐ์ sum
๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๋ฉ์๋์ ์ธ์๊ฐ ๋ฌด์์ธ์ง์ ๋ฐ๋ผ์ ์ด๋ฆ๋ง ๋์ผํ ๋ค๋ฅธ ๋ฉ์๋๋ค์ ํธ์ถํด์ฃผ๊ณ ์๋ค. ์ด๊ฒ์ด ์ค๋ฒ๋ก๋ฉ
์ด๋ฉฐ, Java์์ ์ ๊ณตํด์ฃผ๋ ๋ํ์ ์ธ ๋คํ์ฑ ์ง์ ๊ธฐ๋ฅ ์ค ํ๋์ด๋ค. (์ค๋ฒ๋ผ์ด๋ฉ์ด๋ ํท๊ฐ๋ฆฌ์ง ๋ง์!)
๋ง์น๋ฉฐ
์ฌ์ค ์ด ํฌ์คํ
์ ์์ฑํ ๋ ์๊ฐํ๋ ํ๊ฒ ๋
์์ธต์ ์ปดํจํฐ ๊ณตํ์ ์ ๊ณตํ ๊ฐ๋ฐ์๋ค์ด ์๋์๋ค. ์ ์ด์ ์ปดํจํฐ ๊ณตํ์ ์ ๊ณตํ๊ฑฐ๋, ํ ๊ณผ๋ผ๋ ์ปดํจํฐ ๊ณตํ ์ ๊ณต ์์
์ ๋ค์๋ ์ฌ๋๋ค์ ๋๋ถ๋ถ ํ๊ต์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
์ด๋ผ๋ ์์
์ ๋ค์ด๋ณด์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด ๊ฐ๋
์ ๋ํด์ ์ด๋ ์ ๋ ์๊ณ ์์ ๊ฒ์ด๋ค.
ํ์๊ฐ ์ด ํฌ์คํ ์ ํ๊ฒ์ผ๋ก ํ ๋ ์ ์ธต์ ๋ฐ๋ก ํ์์ด๋ ๋ถํธ์บ ํ์์ ์ฝ๋ฉ์ ์ฒ์ ๋ฐฐ์ฐ์ ์ง ์ผ๋ง ์๋ ๋ถ๋ค์ด๋ค. ํ์์ด๋ ๋ถํธ์บ ํ์์๋ Java๋ฅผ ๊ฐ๋ฅด์น๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด OOP์ ๋ํ ๋ด์ฉ์ ๊ฑฐ์ ์ธ๊ธํ์ง ์๊ณ ๋์ด๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ์ผ๋ก ์๊ณ ์๋ค.
์ฌ์ค ํ๊ต์ ๋ค๋ฅด๊ฒ ํ์์ ์งง์ ๊ธฐ๊ฐ ์์ ์ค๋ฌด๋ฅผ ํ ์ ์๋ ์ธ์ฌ๋ฅผ ์์ฑํ์ฌ ์ทจ์ ์ํค๋ ๊ฒ์ด ๋ชฉ์ ์ธ ๊ธฐ๊ด์ด๋ผ๋ ์ ์ ์๊ฐํด๋ณด๋ฉด ์ดํด๊ฐ ์๊ฐ๋ ๊ฒ๋ ์๋์ง๋ง, OOP๋ Java์๋ง ๊ตญํ๋ ๊ฐ๋ ์ด ์๋๋ผ ์ด๋ค ์ธ์ด๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ ์ฉํ ์ ์๋ ๋ฒ์ฉ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ ๋ด์ฉ์ ๊ฐ๋ฅด์น์ง ์๋ ๊ฒ์ด ์ํ๊น๊ธด ํ๋ค.
์ฐธ๊ณ ๋ก ํ์๋ OOP๊ฐ ์ข์ ํจ๋ฌ๋ค์์ด๋๊น ๋ฐฐ์์ผ ํ๋ค
๋ผ๊ณ ์ด์ผ๊ธฐํ๋ ๊ฒ์ด ์๋๋ค. ์ด ํฌ์คํ
์ ์๋์์ ํ๋ฒ ์ธ๊ธํ๋ฏ์ด ์ ์ธ๊ณ์์ ์๋นํ ์ ์ ์จ์ ์ฐจ์งํ๊ณ ์๋ ๋ฉ์ด์ ์ธ์ด์ธ Java
, Python
, C++
๊ณผ ๊ฐ์ ์ธ์ด๋ค์ด ๋๋ถ๋ถ OOP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์๊ฑฐ๋ OOP๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ 2019๋
์ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๊ฐ๋ฐ์๋ผ๋ฉด ์ข๋ ์ซ๋ OOP๋ฅผ ์๊ณ ๋ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ OOP๋ฅผ ์ถ์ฒํ๋ ๊ฒ์ด๋ค.

C와 JavaScript, SQL을 제외한 모든 언어가 OOP를 사용한다.
์ด์ฐจํผ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์๋ ์ ๋ต์ด ์๋ค. ์ ์ธ์ ํ๋ก๊ทธ๋๋ฐ์ด ์ข์ ๊ฒ์ด๋, ๋ช ๋ น์ ํ๋ก๊ทธ๋๋ฐ์ด ์ข์ ๊ฒ์ด๋๋ผ๊ณ ๋ฌผ์ด๋ณด๋ฉด ์ฝ์ฌ๋ฆฌ ๋๋ตํ ์ ์๋ ๊ฒ ์ฒ๋ผ ๋ง์ด๋ค. ๊ทธ๋ฅ ์ฐ๋ฆฌ๋ ์ด๋ค ํจ๋ฌ๋ค์์ด ์ด๋ค ๋ฐฉํฅ์ ์ถ๊ตฌํ๋์ง, ๊ฑฐ๊ธฐ์ ํ์๋ ๊ฐ๋ ์ ์ด๋ค ๊ฒ๋ค์ด ์๋ ์ง๋ฅผ ํ์ตํ๊ณ ๊ฐ๊ธฐ ์ํฉ์ ๋ง๋ ํจ๋ฌ๋ค์์ ๋์ ํด์ ์ฌ์ฉํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
์ด์จ๋ ์ด ํฌ์คํ ์ ํตํด ํน์๋ OOP๋ฅผ ๋ชจ๋ฅด๊ณ ์์๊ฑฐ๋, ์๋๋ฉด ๋๋ฌด ์ด๋ ต๊ฒ ๋๋ผ๊ณ ์๋ ๋ถ๋ค์ด ์ข ๋ OOP๋ฅผ ์น์ํ๊ฒ ๋ฐ์๋ค์ผ ์ ์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๋ง์์ด๋ค.
์ด์์ผ๋ก ์๊ณ ๋ณด๋ฉด ์ฌ๋ฐ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ, OOP ํ์ด๋ณด๊ธฐ ํฌ์คํ ์ ๋ง์น๋ค.
- OOP
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- Object Oriendted Programming
- ํ๋ก๊ทธ๋จ ์ค๊ณ
- SOLID
- ํ๋ก๊ทธ๋จ ์ค๊ณ ๊ธฐ์ด
๊ด๋ จ ํฌ์คํ ๋ณด๋ฌ๊ฐ๊ธฐ