๋ถ๋ฅ:ํ๋ก๊ทธ๋๋ฐ ์ด๋ก
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
OOP์์ ๋์ด์ด
1. ๊ฐ์[ํธ์ง]
ๆผข: ๅฎข้ซ ๆๅ โ / En: Object-Oriented Programming (OOP)
ํ๋ก๊ทธ๋จ ์ค๊ณ๋ฐฉ๋ฒ๋ก ์ด์ ๊ฐ๋ ์ ์ผ์ข .
ํ๋ก๊ทธ๋จ์ ๋จ์ํ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ผ๋ก ๋๋๋ ๊ฒ์ด ์๋๋ผ, ํ๋ก๊ทธ๋จ์ ์๋ง์ '๊ฐ์ฒด(object)'๋ผ๋ ๊ธฐ๋ณธ ๋จ์๋ก ๋๋๊ณ ์ด๋ค์ ์ํธ์์ฉ์ผ๋ก ์์ ํ๋ ๋ฐฉ์์ด๋ค. ๊ฐ์ฒด๋ ํ๋์ ์ญํ ์ ์ํํ๋ '๋ฉ์๋์ ๋ณ์(๋ฐ์ดํฐ)'์ ๋ฌถ์์ผ๋ก ๋ด์ผ ํ๋ค.
์์ ์ ํธ์์ ๊ฐ์ฒด์งํฅ์ Java ์์ฃผ๋ก ์๊ฐํ๊ณ ์๊ณ class๋ public ๊ฐ์ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๊ฒฝ์ฐ๋ง ๊ฐ์ฒด์งํฅ์ ํด๋นํ๋ ๊ฒ์ผ๋ก ์คํดํ์ง ์๊ฒ ์ฃผ์ํด์ผ ํ๋ค. ๋ชจ๋ ์ธ์ด๊ฐ class๋ ์ ๊ทผ ์ ํ์(public์ด๋ private)๋ฅผ ์ฌ์ฉํ์ง๋ ์๋๋ค. ๋ํ์ ์ธ ์๋ก JavaScript๋ ํ๋กํ ํ์ ๊ฐ์ฒด์งํฅ์ ์ฌ์ฉํ๊ณ ์๊ณ Python์๋ ์ ๊ทผ์ ํ์๊ฐ ์๋ค. ๊ฐ์ฒด์งํฅ์ ํน์ ์ธ์ด๊ฐ ์๋๋ผ ๊ฐ๋ ์ด๋ค. "ํด๋์ค๋ ๊ฐ์ฒด์ด๋ฉฐ ๊ตฌ์กฐ์ฒด๋ ๊ฐ์ฒด๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ"์ด๋ผ๋ ์ค๋ช ์ญ์ ํ๋ ธ๊ณ , ํน์ ์ธ์ด๊ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ผ๋ ๋ง๋ ์์ ํ ํ๋ฆฐ ํํ์ด๋ค.
ํ๋ก๊ทธ๋จ ์ค๊ณ๋ฐฉ๋ฒ๋ก ์ด์ ๊ฐ๋ ์ ์ผ์ข .
ํ๋ก๊ทธ๋จ์ ๋จ์ํ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ผ๋ก ๋๋๋ ๊ฒ์ด ์๋๋ผ, ํ๋ก๊ทธ๋จ์ ์๋ง์ '๊ฐ์ฒด(object)'๋ผ๋ ๊ธฐ๋ณธ ๋จ์๋ก ๋๋๊ณ ์ด๋ค์ ์ํธ์์ฉ์ผ๋ก ์์ ํ๋ ๋ฐฉ์์ด๋ค. ๊ฐ์ฒด๋ ํ๋์ ์ญํ ์ ์ํํ๋ '๋ฉ์๋์ ๋ณ์(๋ฐ์ดํฐ)'์ ๋ฌถ์์ผ๋ก ๋ด์ผ ํ๋ค.
์์ ์ ํธ์์ ๊ฐ์ฒด์งํฅ์ Java ์์ฃผ๋ก ์๊ฐํ๊ณ ์๊ณ class๋ public ๊ฐ์ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๊ฒฝ์ฐ๋ง ๊ฐ์ฒด์งํฅ์ ํด๋นํ๋ ๊ฒ์ผ๋ก ์คํดํ์ง ์๊ฒ ์ฃผ์ํด์ผ ํ๋ค. ๋ชจ๋ ์ธ์ด๊ฐ class๋ ์ ๊ทผ ์ ํ์(public์ด๋ private)๋ฅผ ์ฌ์ฉํ์ง๋ ์๋๋ค. ๋ํ์ ์ธ ์๋ก JavaScript๋ ํ๋กํ ํ์ ๊ฐ์ฒด์งํฅ์ ์ฌ์ฉํ๊ณ ์๊ณ Python์๋ ์ ๊ทผ์ ํ์๊ฐ ์๋ค. ๊ฐ์ฒด์งํฅ์ ํน์ ์ธ์ด๊ฐ ์๋๋ผ ๊ฐ๋ ์ด๋ค. "ํด๋์ค๋ ๊ฐ์ฒด์ด๋ฉฐ ๊ตฌ์กฐ์ฒด๋ ๊ฐ์ฒด๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ"์ด๋ผ๋ ์ค๋ช ์ญ์ ํ๋ ธ๊ณ , ํน์ ์ธ์ด๊ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ผ๋ ๋ง๋ ์์ ํ ํ๋ฆฐ ํํ์ด๋ค.
2. ์ญ์ฌ[ํธ์ง]
2.1. ์์๊ณผ ๋ฐ์ [ํธ์ง]
์ด๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด์๋ค. ํ๊ต๋์ฌ์ ์ ๊ณ ๋ฑํ์ ์๊ณ ๋ฆฌ์ฆ์ฒ๋ผ ์
๋ ฅ์ ๋ฐ์ ๋ช
์๋ ์์๋๋ก ์ฒ๋ฆฌํ ๋ค์, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ ๊ฒ๋ฟ์ด๋ผ๋ ์๊ฐ์ด ์ง๋ฐฐ์ ์ด์๋ค. ํ๋ก๊ทธ๋จ์ ๋ช
๋ น์ด์ ๋ชจ์์ผ๋ก ์ธ์ํ ๊ฒ์ด๋ค. ๋ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์ด๋ป๊ฒ ์ด๋ค ๋
ผ๋ฆฌ๋ฅผ ์ด๋ค ์์๋๋ก ์จ๋๊ฐ๋ ๊ฒ์ธ๊ฐ๋ก ๊ฐ์ฃผ๋์๋ค. ์ฆ, ํ๋ก๊ทธ๋จ ์์ฒด๊ฐ ๊ฐ์ง๋ ๊ธฐ๋ฅ์ ๋ํด์๋ง ์ ๊ฒฝ์ ์ผ์ง, ์ด ํ๋ก๊ทธ๋จ์ด ๋์ฒด ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ทจ๊ธํ๋ ๊ฒ์ธ๊ฐ์๋ ๊ทธ๋ค์ง ๊ด์ฌ์ด ์์๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋, ์ด ๋ฐฉ์์ ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉด ๋ชจ๋ฅผ๊น ์กฐ๊ธ๋ง ๋ณต์กํด์ง๋ฉด ์์๋๋ก ๋ํ๋ด๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ์ ๋๋ก ๊ผฌ์ธ "์คํ๊ฒํฐ ์ฝ๋"๋ฅผ ๋ง๋ค๊ฒ ๋๋ค. ๊ฐ๋จํ ๋งํด์ ์คํํฌ๋ํํธ๋ฅผ ์์ ์์๋๋ก ๊ทธ๋ ค์ผ ๋๋ค๊ณ ์๊ฐํด๋ด๋ผ! ์ด๋ ๊ฒ ๊ผฌ์ฌ๋ฒ๋ฆฐ ์ฝ๋๋ ๋ค๋ฅธ ์ฌ๋์ด ๋ณด๊ณ ์ดํดํ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ ๋ฟ๋๋ฌ ์ฌ์ง์ด๋ ์์ฑํ ๋ณธ์ธ์กฐ์ฐจ๋ ์ ์ง๋ณด์์ ์ด๋ ค์์ ๊ฒช๊ฒ ๋๋ค. ๋ช ๋ น์ด์ ์์ด ๋ง์์ง๋ ๊ฒ์ ๊ธฐ๋ณธ์ด๊ณ , ํน์ ์ฝ๋ ๋ถ๋ถ์ ์ด๋์ ์ฌ์ฉ๋๋ ์ฝ๋๊ณ ํด๋น ์ฝ๋ ๋ถ๋ถ์ ์ด๋๊น์ง ์ด์ด์ง๋์ง์ ํ๋ฆ์ ํ์ ํ๊ธฐ๋ ํ๋ค์ด์ง๋ฉฐ, ์ค๋ณต ์ฝ๋ ๋์ฒ๋ ๋งค์ฐ ๊ณจ์น์ํ๋ค. OOP๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ค๋ณต์ ์ด๋ ์ ๋ ์ค์ผ ์ ์๊ณ ์ ๋ ฅ ์ฝ๋, ๊ณ์ฐ ์ฝ๋์ ๊ฒฐ๊ณผ ์ถ๋ ฅ ์ฝ๋ ๋ฑ ์ฝ๋์ ์ญํ ๋ถ๋ด์ ์ข ๋ ํ์คํ๊ฒ ํ ์ ์์ด์ ๊ฐ๋ ์ฑ์ด ๋์์ง ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ธ ํ๋ฅด ๋ค์ต์คํธ๋ผ๊ฐ 1968๋ GOTO๋ฌธ์ ํด๋ก์์ด๋ผ๋ ๋ ผ๋ฌธ์์ ํ๋ก๊ทธ๋จ์ ํจ์(procedure) ๋จ์๋ก ๋๋๊ณ ํ๋ก์์ ธ๋ผ๋ฆฌ ํธ์ถ์ ํ๋ ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์ ์ํ๋ฉด์ ์ด๋ฌํ ์๊ธฐ๋ฅผ ๋ฒ์ด๋๊ฒ ๋๋ค. ํ๋ก๊ทธ๋จ์ด๋ผ๋ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ทธ๊ฒ์ ๋ช๊ฐ์ ์์ ๋ฌธ์ ๋ค๋ก ๋๋์ด ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์ ํํฅ์(Top-down) ๋ฐฉ์์ด๋ผ๊ณ ๋ ํ๋ค.
ํ์ง๋ง ํจ์๋ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๊ตฌ์กฐํํ์๋ฟ, ๋ฐ์ดํฐ ์์ฒด๋ ๊ตฌ์กฐํํ์ง ๋ชปํ๋ค. ์ด๋ ์ ์ญ ๋ค์์คํ์ด์ค ํฌํ ๋ฌธ์ (๋ณ์ ์ด๋ฆ์ ๋ค ์จ์ ์ด๋ฆ ์ง๊ธฐ๋ ํ๋ ์ํฉ(...))๋ฅผ ๋ณ๊ฒ ๋์๋ค.[1] ๊ฒ๋ค๊ฐ ์คํ ์ฝํ ์คํธ๋ฅผ ์ ์ฅํ ๋ง๋ ํ ๋ฐฉ๋ฒ์ด ์์ด์ง๋ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. ์คํ ์ฝํ ์คํธ๋ ํนํ GUI์์ ์ค์ํด์ง๋๋ฐ ์ด๋ค ์ฐฝ์ ํ์ฌ ์ํ์ ๋ฐ๋ผ ํจ์๊ฐ ์คํํด์ผ ํ๋ ๋์ ๋ฐฉ์์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ์๋ฑํ ๋ฐ์ดํฐ๊ฐ ์๋ฑํ ํจ์์ ์ ๋ฌ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์ค์ผ์ํค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ๊ทธ๋ฐ ๊ฐ๋ฅ์ฑ ๋๋ฌธ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ ํจ์์ ์๋์ ์ํฅ์ ๋ฐ๋ ๋ณ์๋ฅผ ์กฐ์ฌํด์ผ ํ ๋ ๋ชจ๋ ๋ณ์๋ฅผ ๋ค ์กฐ์ฌํด์ผ ํ๋ ์ด๋ ค์์ ๋ด์ฐฉํ๋ค. ๋ณ์์ ๊ฐฏ์๊ฐ ์๋ฐฑ ๊ฐ ์ดํ์ธ ์ฝ๋์์์ผ ์ด๊ฒ ์ฌ๋์ ํ์ผ๋ก ๊ฐ๋ฅํ์ง ์ฝ๋์ ๋ฉ์น๊ฐ ์ปค์ง๋ฉด์ ํจ์๊ฐ ์ ๊ทผํ ์ ์๋ ๋ฐ์ดํฐ์ ๋ฒ์์ ๋ช ์์ ์ธ ์ ํ์ ๊ฑธ์ด์ผ ํ๋ ์ํฉ์ด ๋๋ํ๋ค. ์ด๋ฅผ ์ง์ญ ๋ณ์๋ ๊ตฌ์กฐ์ฒด(struct) ๋ฑ์ผ๋ก ์ด์ฐ ์ ์ดํ๊ณ ์๊ธฐ๋ ํ์ง๋ง ๋ ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ฑ ์ด ํ์ํ๋ค.
์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํ ๋์์ผ๋ก ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. ํฐ ๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐ๋ ๊ฒ์ด ์๋๋ผ, ๋จผ์ ์์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ ์ ์๋ ๊ฐ์ฒด๋ค์ ๋ง๋ ๋ค, ์ด ๊ฐ์ฒด๋ค์ ์กฐํฉํด์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ํฅ์(Bottom-up) ํด๊ฒฐ๋ฒ์ ๋์ ํ ๊ฒ์ด๋ค. ์ด ๊ฐ์ฒด๋ ๊ฒ์ ์ผ๋จ ํ๋ฒ ๋ ๋ฆฝ์ฑ/์ ๋ขฐ์ฑ์ด ๋๊ฒ ๋ง๋ค์ด ๋๊ธฐ๋ง ํ๋ฉด ๊ทธ ์ดํ์ ๊ทธ ๊ฐ์ฒด๋ฅผ ์์ ์์ด ์ฌ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ๊ธฐ๊ฐ๊ณผ ๋น์ฉ์ด ๋ํญ ์ค์ด๋ค๊ฒ ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฑ์ฅ ๋น์์๋ ๊ธฐ์กด์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋น๊ตํด ๋งค์ฐ ์ด์ง์ ์ด๊ณ , ๋น์ ์ปดํจํฐ์ ์ฒ๋ฆฌ๋ฅ๋ ฅ์ด ๋ณ๋ก ์ข์ง ์์์ ๋ณ ์ฃผ๋ชฉ์ ๋ฐ์ง ๋ชปํ์๋ค. ๊ทธ๋ฌ๋ค๊ฐ GUI๊ฐ ๋ฑ์ฅํ๋ฉด์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๊ธ๋ถ์ํ๊ฒ ๋๋ค. ํ๋ฉด์ ๋ ์๋ ์ฌ๋ฌ ๊ฐ์ ์ฐฝ์ ๊ฐ์์ ์คํ ์ฝํ ์คํธ๋ฅผ ๊ฐ์ง๋๋ฐ ์ฝํ ์คํธ์ ํ์ฌ ์ํ(ํ์ฑํ, ๋นํ์ฑํ, ์ต์ํ ๋ฑ)์ ๋ฐ๋ผ ๊ฐ์ ๋ช ๋ น์๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด๋ด์ผ ํ์ผ๋ฉฐ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ํด ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ ์ํํด์ผ ํ๋ค. ํนํ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ ๋น๋๊ธฐ์ ์ธ ์์ฑ ๋๋ฌธ์ ๊ธฐ์กด ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ผ์ข ์ ํก๋จ ๊ด์ฌ์ฌ๊ฐ ๋์ด ๋ฒ๋ ค ์ฝ๋ ์ ์ฒด์ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ํฉ์ด์ ธ ์๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ์์๋ค. ๊ทธ๋์ OOP๋ฅผ ๋์ ํ์ฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ๋ ์ํ๋๋ ๊ธฐ๋ฅ(Event Handler, Callback)์ ๊ตฌํํ ์ ์๋ ๋จ์ผ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ , ํ๋ก๊ทธ๋๋จธ๋ค์ ์ด๋ฅผ ํ์ํ ํํ๋ก ์์์ ๊ตฌํํ๋ฉฐ, ํน์ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ฌ์ ๋ ์คํ๋์ด์ผ ํ๋ ๊ธฐ๋ฅ๋ค์ ๋ฑ๋กํ ๋ค์, ์ด์์ฒด์ ๋ ์์ฉํ๋ก๊ทธ๋จ์ด ์ค์ ๋ก ํด๋น ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํด๋น ์ด๋ฒคํธ์ ๋ฑ๋ก๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ/์ฝ๋ฐฑ์ ์ฃผ์ฑ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ตฌ์กฐ๊ฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ฐ๋๋ฉด์ OOP ๋ํ ๋น ๋ฅด๊ฒ ํ์ฐ๋์๋ค.
๋จ, ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ณ๊ฐ์ ๊ฐ๋ ์ด๋ค. ์ฌ์ค ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ ๊ฐ์ฒด ์งํฅ๋ณด๋ค ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํจ์ฌ ๋ ์ ์ง์ํ๋ค. ๊ทธ ์์๋ก, ๊ฐ์ ์ผ์ ํ๋ Java์ Scala ์ฝ๋์ GUI ๋ก์ง์ ๋ณด๋ฉด Scala ์ชฝ์ด ์๋์ ์ผ๋ก ๋จ์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๋ค๋ง ๊ธฐ์กด ์ ์ฐจํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ง์ํ์ง ์์ ์ฝ๋ฐฑ ๊ตฌํ์ด ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ์์๊ณ (์ ์ฐจํ์ธ C์ธ์ด์์๋ ํจ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค) ๋ง์นจ ๋ฑ์ฅํ ๊ฐ์ฒด ์งํฅ ์ธ์ด๊ฐ ์ธํฐํ์ด์ค๋ผ๋ ๊ฐ๋ ์ ์ ๊ณตํ๊ธฐ์ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ ์ข ๋ ์ด์ธ๋ ธ์ ๋ฟ์ด๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ด ๋์ฌ ๋น์์๋ LISP ๋ฑ ํจ์ํ ์ธ์ด๊ฐ ์๊ธด ํ์ผ๋ ๊ธฐ์กด ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ์ฉํ๊ธฐ์๋ ๋๋ฌด ๊ณ ์์ค์ ๊ฐ๋ ์ ๋ค๋ฃจ๊ณ ์์๊ณ ์ฑ๋ฅ๋ ๋๋ฌด ๋ฎ์๊ธฐ ๋๋ฌธ์ ๋น์์๋ ์ฃผ๋ชฉ๋ฐ์ง ๋ชปํ๋ค. ๋น์ฅ for ๋ฃจํ๋ก ๋ฆฌ์คํธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฐ ๋ฆฌ์คํธ ํด์์ด๋ map/reduce๋ ๋ ๋ค์ด๋ดค์ ํ์ ํ๋ก๊ทธ๋๋จธ์ ๊ท์ ๋ค์ด๊ฐ ๋ฆฌ๊ฐ ์์๋ค. ๋ฌผ๋ก ์ง๊ธ์ ๊ณ ์ฐจ ํจ์๋ ํด๋ก์ ๊ฐ์ ๊ฐ๋ ๊น์ง ๋์ ํด์ผ ํ ์ ๋๋ก ํ๋ก๊ทธ๋จ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ด์ฌ์ ๋ณด์ด๊ณ ์๋ค. ํ๋์ ๋ง๋ค์ด์ง๋ ํ๋ก๊ทธ๋จ์ ๊ทธ ์ ๋๋ก ๋ณต์กํด์ก๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง๋ฉด์ ์ด๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ ํ์์ฑ์ด ์๊ธด ๊ด๊ณ๋ก '๋์์ธ ํจํด'์ด๋ผ๋ ๊ฒ์ด ์๊ฒผ๋ค. ํ๋ก๊ทธ๋๋ฐ ํ์์ ์ ํ๋ ์ผ์ข ์ ์ฝ์์ผ๋ก, ์ด๋ ํนํ ํ์ ์ ์ ์ ๋ก ํ ํ๊ฒฝ์์ ํนํ ๊ฐ์กฐ๋๊ณ ์๋ค.
๊ทธ๋ฌ๋, ์ด ๋ฐฉ์์ ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉด ๋ชจ๋ฅผ๊น ์กฐ๊ธ๋ง ๋ณต์กํด์ง๋ฉด ์์๋๋ก ๋ํ๋ด๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ์ ๋๋ก ๊ผฌ์ธ "์คํ๊ฒํฐ ์ฝ๋"๋ฅผ ๋ง๋ค๊ฒ ๋๋ค. ๊ฐ๋จํ ๋งํด์ ์คํํฌ๋ํํธ๋ฅผ ์์ ์์๋๋ก ๊ทธ๋ ค์ผ ๋๋ค๊ณ ์๊ฐํด๋ด๋ผ! ์ด๋ ๊ฒ ๊ผฌ์ฌ๋ฒ๋ฆฐ ์ฝ๋๋ ๋ค๋ฅธ ์ฌ๋์ด ๋ณด๊ณ ์ดํดํ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ ๋ฟ๋๋ฌ ์ฌ์ง์ด๋ ์์ฑํ ๋ณธ์ธ์กฐ์ฐจ๋ ์ ์ง๋ณด์์ ์ด๋ ค์์ ๊ฒช๊ฒ ๋๋ค. ๋ช ๋ น์ด์ ์์ด ๋ง์์ง๋ ๊ฒ์ ๊ธฐ๋ณธ์ด๊ณ , ํน์ ์ฝ๋ ๋ถ๋ถ์ ์ด๋์ ์ฌ์ฉ๋๋ ์ฝ๋๊ณ ํด๋น ์ฝ๋ ๋ถ๋ถ์ ์ด๋๊น์ง ์ด์ด์ง๋์ง์ ํ๋ฆ์ ํ์ ํ๊ธฐ๋ ํ๋ค์ด์ง๋ฉฐ, ์ค๋ณต ์ฝ๋ ๋์ฒ๋ ๋งค์ฐ ๊ณจ์น์ํ๋ค. OOP๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ค๋ณต์ ์ด๋ ์ ๋ ์ค์ผ ์ ์๊ณ ์ ๋ ฅ ์ฝ๋, ๊ณ์ฐ ์ฝ๋์ ๊ฒฐ๊ณผ ์ถ๋ ฅ ์ฝ๋ ๋ฑ ์ฝ๋์ ์ญํ ๋ถ๋ด์ ์ข ๋ ํ์คํ๊ฒ ํ ์ ์์ด์ ๊ฐ๋ ์ฑ์ด ๋์์ง ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ธ ํ๋ฅด ๋ค์ต์คํธ๋ผ๊ฐ 1968๋ GOTO๋ฌธ์ ํด๋ก์์ด๋ผ๋ ๋ ผ๋ฌธ์์ ํ๋ก๊ทธ๋จ์ ํจ์(procedure) ๋จ์๋ก ๋๋๊ณ ํ๋ก์์ ธ๋ผ๋ฆฌ ํธ์ถ์ ํ๋ ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์ ์ํ๋ฉด์ ์ด๋ฌํ ์๊ธฐ๋ฅผ ๋ฒ์ด๋๊ฒ ๋๋ค. ํ๋ก๊ทธ๋จ์ด๋ผ๋ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ทธ๊ฒ์ ๋ช๊ฐ์ ์์ ๋ฌธ์ ๋ค๋ก ๋๋์ด ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์ ํํฅ์(Top-down) ๋ฐฉ์์ด๋ผ๊ณ ๋ ํ๋ค.
ํ์ง๋ง ํจ์๋ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๊ตฌ์กฐํํ์๋ฟ, ๋ฐ์ดํฐ ์์ฒด๋ ๊ตฌ์กฐํํ์ง ๋ชปํ๋ค. ์ด๋ ์ ์ญ ๋ค์์คํ์ด์ค ํฌํ ๋ฌธ์ (๋ณ์ ์ด๋ฆ์ ๋ค ์จ์ ์ด๋ฆ ์ง๊ธฐ๋ ํ๋ ์ํฉ(...))๋ฅผ ๋ณ๊ฒ ๋์๋ค.[1] ๊ฒ๋ค๊ฐ ์คํ ์ฝํ ์คํธ๋ฅผ ์ ์ฅํ ๋ง๋ ํ ๋ฐฉ๋ฒ์ด ์์ด์ง๋ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. ์คํ ์ฝํ ์คํธ๋ ํนํ GUI์์ ์ค์ํด์ง๋๋ฐ ์ด๋ค ์ฐฝ์ ํ์ฌ ์ํ์ ๋ฐ๋ผ ํจ์๊ฐ ์คํํด์ผ ํ๋ ๋์ ๋ฐฉ์์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ์๋ฑํ ๋ฐ์ดํฐ๊ฐ ์๋ฑํ ํจ์์ ์ ๋ฌ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์ค์ผ์ํค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ๊ทธ๋ฐ ๊ฐ๋ฅ์ฑ ๋๋ฌธ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ ํจ์์ ์๋์ ์ํฅ์ ๋ฐ๋ ๋ณ์๋ฅผ ์กฐ์ฌํด์ผ ํ ๋ ๋ชจ๋ ๋ณ์๋ฅผ ๋ค ์กฐ์ฌํด์ผ ํ๋ ์ด๋ ค์์ ๋ด์ฐฉํ๋ค. ๋ณ์์ ๊ฐฏ์๊ฐ ์๋ฐฑ ๊ฐ ์ดํ์ธ ์ฝ๋์์์ผ ์ด๊ฒ ์ฌ๋์ ํ์ผ๋ก ๊ฐ๋ฅํ์ง ์ฝ๋์ ๋ฉ์น๊ฐ ์ปค์ง๋ฉด์ ํจ์๊ฐ ์ ๊ทผํ ์ ์๋ ๋ฐ์ดํฐ์ ๋ฒ์์ ๋ช ์์ ์ธ ์ ํ์ ๊ฑธ์ด์ผ ํ๋ ์ํฉ์ด ๋๋ํ๋ค. ์ด๋ฅผ ์ง์ญ ๋ณ์๋ ๊ตฌ์กฐ์ฒด(struct) ๋ฑ์ผ๋ก ์ด์ฐ ์ ์ดํ๊ณ ์๊ธฐ๋ ํ์ง๋ง ๋ ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ฑ ์ด ํ์ํ๋ค.
์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํ ๋์์ผ๋ก ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. ํฐ ๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐ๋ ๊ฒ์ด ์๋๋ผ, ๋จผ์ ์์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ ์ ์๋ ๊ฐ์ฒด๋ค์ ๋ง๋ ๋ค, ์ด ๊ฐ์ฒด๋ค์ ์กฐํฉํด์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ํฅ์(Bottom-up) ํด๊ฒฐ๋ฒ์ ๋์ ํ ๊ฒ์ด๋ค. ์ด ๊ฐ์ฒด๋ ๊ฒ์ ์ผ๋จ ํ๋ฒ ๋ ๋ฆฝ์ฑ/์ ๋ขฐ์ฑ์ด ๋๊ฒ ๋ง๋ค์ด ๋๊ธฐ๋ง ํ๋ฉด ๊ทธ ์ดํ์ ๊ทธ ๊ฐ์ฒด๋ฅผ ์์ ์์ด ์ฌ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ๊ธฐ๊ฐ๊ณผ ๋น์ฉ์ด ๋ํญ ์ค์ด๋ค๊ฒ ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฑ์ฅ ๋น์์๋ ๊ธฐ์กด์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋น๊ตํด ๋งค์ฐ ์ด์ง์ ์ด๊ณ , ๋น์ ์ปดํจํฐ์ ์ฒ๋ฆฌ๋ฅ๋ ฅ์ด ๋ณ๋ก ์ข์ง ์์์ ๋ณ ์ฃผ๋ชฉ์ ๋ฐ์ง ๋ชปํ์๋ค. ๊ทธ๋ฌ๋ค๊ฐ GUI๊ฐ ๋ฑ์ฅํ๋ฉด์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๊ธ๋ถ์ํ๊ฒ ๋๋ค. ํ๋ฉด์ ๋ ์๋ ์ฌ๋ฌ ๊ฐ์ ์ฐฝ์ ๊ฐ์์ ์คํ ์ฝํ ์คํธ๋ฅผ ๊ฐ์ง๋๋ฐ ์ฝํ ์คํธ์ ํ์ฌ ์ํ(ํ์ฑํ, ๋นํ์ฑํ, ์ต์ํ ๋ฑ)์ ๋ฐ๋ผ ๊ฐ์ ๋ช ๋ น์๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด๋ด์ผ ํ์ผ๋ฉฐ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ํด ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ ์ํํด์ผ ํ๋ค. ํนํ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ ๋น๋๊ธฐ์ ์ธ ์์ฑ ๋๋ฌธ์ ๊ธฐ์กด ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ผ์ข ์ ํก๋จ ๊ด์ฌ์ฌ๊ฐ ๋์ด ๋ฒ๋ ค ์ฝ๋ ์ ์ฒด์ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ํฉ์ด์ ธ ์๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ์์๋ค. ๊ทธ๋์ OOP๋ฅผ ๋์ ํ์ฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ๋ ์ํ๋๋ ๊ธฐ๋ฅ(Event Handler, Callback)์ ๊ตฌํํ ์ ์๋ ๋จ์ผ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ , ํ๋ก๊ทธ๋๋จธ๋ค์ ์ด๋ฅผ ํ์ํ ํํ๋ก ์์์ ๊ตฌํํ๋ฉฐ, ํน์ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ฌ์ ๋ ์คํ๋์ด์ผ ํ๋ ๊ธฐ๋ฅ๋ค์ ๋ฑ๋กํ ๋ค์, ์ด์์ฒด์ ๋ ์์ฉํ๋ก๊ทธ๋จ์ด ์ค์ ๋ก ํด๋น ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํด๋น ์ด๋ฒคํธ์ ๋ฑ๋ก๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ/์ฝ๋ฐฑ์ ์ฃผ์ฑ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ตฌ์กฐ๊ฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ฐ๋๋ฉด์ OOP ๋ํ ๋น ๋ฅด๊ฒ ํ์ฐ๋์๋ค.
๋จ, ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ณ๊ฐ์ ๊ฐ๋ ์ด๋ค. ์ฌ์ค ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ ๊ฐ์ฒด ์งํฅ๋ณด๋ค ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํจ์ฌ ๋ ์ ์ง์ํ๋ค. ๊ทธ ์์๋ก, ๊ฐ์ ์ผ์ ํ๋ Java์ Scala ์ฝ๋์ GUI ๋ก์ง์ ๋ณด๋ฉด Scala ์ชฝ์ด ์๋์ ์ผ๋ก ๋จ์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๋ค๋ง ๊ธฐ์กด ์ ์ฐจํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ง์ํ์ง ์์ ์ฝ๋ฐฑ ๊ตฌํ์ด ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ์์๊ณ (์ ์ฐจํ์ธ C์ธ์ด์์๋ ํจ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค) ๋ง์นจ ๋ฑ์ฅํ ๊ฐ์ฒด ์งํฅ ์ธ์ด๊ฐ ์ธํฐํ์ด์ค๋ผ๋ ๊ฐ๋ ์ ์ ๊ณตํ๊ธฐ์ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ ์ข ๋ ์ด์ธ๋ ธ์ ๋ฟ์ด๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ด ๋์ฌ ๋น์์๋ LISP ๋ฑ ํจ์ํ ์ธ์ด๊ฐ ์๊ธด ํ์ผ๋ ๊ธฐ์กด ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ์ฉํ๊ธฐ์๋ ๋๋ฌด ๊ณ ์์ค์ ๊ฐ๋ ์ ๋ค๋ฃจ๊ณ ์์๊ณ ์ฑ๋ฅ๋ ๋๋ฌด ๋ฎ์๊ธฐ ๋๋ฌธ์ ๋น์์๋ ์ฃผ๋ชฉ๋ฐ์ง ๋ชปํ๋ค. ๋น์ฅ for ๋ฃจํ๋ก ๋ฆฌ์คํธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฐ ๋ฆฌ์คํธ ํด์์ด๋ map/reduce๋ ๋ ๋ค์ด๋ดค์ ํ์ ํ๋ก๊ทธ๋๋จธ์ ๊ท์ ๋ค์ด๊ฐ ๋ฆฌ๊ฐ ์์๋ค. ๋ฌผ๋ก ์ง๊ธ์ ๊ณ ์ฐจ ํจ์๋ ํด๋ก์ ๊ฐ์ ๊ฐ๋ ๊น์ง ๋์ ํด์ผ ํ ์ ๋๋ก ํ๋ก๊ทธ๋จ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ด์ฌ์ ๋ณด์ด๊ณ ์๋ค. ํ๋์ ๋ง๋ค์ด์ง๋ ํ๋ก๊ทธ๋จ์ ๊ทธ ์ ๋๋ก ๋ณต์กํด์ก๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง๋ฉด์ ์ด๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ ํ์์ฑ์ด ์๊ธด ๊ด๊ณ๋ก '๋์์ธ ํจํด'์ด๋ผ๋ ๊ฒ์ด ์๊ฒผ๋ค. ํ๋ก๊ทธ๋๋ฐ ํ์์ ์ ํ๋ ์ผ์ข ์ ์ฝ์์ผ๋ก, ์ด๋ ํนํ ํ์ ์ ์ ์ ๋ก ํ ํ๊ฒฝ์์ ํนํ ๊ฐ์กฐ๋๊ณ ์๋ค.
2.2. ์ง์ํ๋ ์ธ์ด[ํธ์ง]
- Smalltalk ์ธ์ด
์จ๋ฐ ์ผ์ด๊ฐ 1972๋ ํ๋ก ์ํ ๋ฆฌ์์น ์ผํฐ(PARC)์์ ๋ง๋ Smalltalk๊ฐ ์ต์ด๋ก OOP๋ฅผ ์ง์ํ ํ๋ก๊ทธ๋จ์ด๋ค. ์๋ฎฌ๋ ์ด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ์๋ฎฌ๋ผ-67์์ ์ํฅ์ ๋ฐ์๋ค.
์ค๋ชฐํ ํฌ๋ ์จ๋ฐ ์ผ์ด๊ฐ "๋๊ตฌ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ปดํจํฐ"๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ง๋ค์ด์ก๋ค. ๋ฌธ์ ๋ ์จ๋ฐ ์ผ์ด๊ฐ ๊ธ์ ์ฝ๊ณ ์ธ ์๋ง ์์ผ๋ฉด 4-5์ธ์ ์์ด๋ค๋ ํ๋ก๊ทธ๋๋ฐ ํ ์ ์๋ ๊ฒ์ ์ด์์ ์ธ ๋ชฉํ๋ก ํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ ์ ํ๋ ๋ชฉํ๋ฅผ ์ํ์ ๋ ผ๋ฆฌ๊ตฌ์กฐ(์๊ณ ๋ฆฌ์ฆ)๋ก ๊ฐ๋ ํํ ๋ค์ ๊ทธ์ ๋ฐ๋ผ ํ๋ก๊ทธ๋๋ฐ ํ๋ ๊ฒ ์๋๊ณ [2] ๋น ์ํ์ ์ธ ์ฌ๊ณ ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ก ์ธ์ด๊ฐ ์ค๊ณ๋์ด ์์๊ณ , ์ด ๋๋ฌธ์ ๋ชจ๋ ๊ฒ์ ๊ฐ์ฒด ๋จ์๋ก ๋ถํดํ๊ณ ๊ทธ ๊ฐ์ฒด๋ค์ด ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ก ํ๋ก๊ทธ๋๋ฐ์ ํด์ผ๋ง ํ๋ค. - Ruby์ Python
Ruby: Smalltalk์ ๊ณ๋ณด๋ฅผ ์๋ ์์ ๊ฐ์ฒด์งํฅ ์ธ์ด. ๊ธฐ์กด์ C++๋ Java ๋ฑ์ ๋นํด์ ๋์ด๋๊ฐ ์ฝ๋ค.
Python: ์ญ์ ์์ ๊ฐ์ฒด์งํฅ์ ์ง์ํ๊ณ ์๋ค. Ruby์ ๋น์ทํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ฏธ์ธํ ๋ช ๋ น์ด๋ ๊ธฐ๋ฒ ์ฐจ์ด ๋ฑ์ด ์์ ๋ฟ, ๊ฑฐ์ ํ์ ์ฒ๋ผ ๊ฐ๊น์ด ์ธ์ด๋ค์ด๋ค. ์ํ์ฝ๋ฉ์์๋ ์ด ๋ ์ธ์ด๋ฅผ ๊ฑฐ์ ๋๊ฐ์ ์ธ์ด๋ผ๊ณ ์ค๋ช ํ๋ฉด์ ๋ฃจ๋น์ ํ์ด์ฌ์ ์ฝ๋ฉ์ ๋์์ ๊ฐ๋ฅด์น๋ ๊ฐ์ข๋ฅผ ๊ฐ์คํด ๋์๋ค. - C์ธ์ด์ ๊ฐ์ฒด ์ฒ๋ฆฌ ๊ธฐ๋ฅ ์ถ๊ฐ
๋ธ๋ ์ค ์ฝ์ค์ ํฐ ๋ฌ๋ธ๋ ์ค๋ชฐํ ํฌ๋ฅผ ๋ณด๊ณ ์๋ก์ด ์๊ฐ์ผ๋ก ๊ฐ์ฒด์งํฅ์ ๋ฐ๋ผ๋ณด์๋๋ฐ ๊ทธ๊ฒ์ ์์ค ์ฝ๋์ ์์ ์๋ ์ฌํ์ฉ์ด์๋ค. ๊ทธ๋ค์ ์ด ๊ฐ๋ ์ ์ค์ ์ธ์ด์ ์ ์ฉํ์ฌ 1983๋ ๋์ ์ค๋ชฐํ ํฌ์ ๊ฐ์ฒด ์ฒ๋ฆฌ ๋ฐฉ์์ C์ธ์ด์ ์ถ๊ฐํ๋ค. C์ธ์ด์ ํ์ค์ ์งํค๋ฉด์ ์ค๋ชฐํ ํฌ ๋ฐฉ์์ ๊ฐ์ฒด ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ์ค ์ธ์ด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ํผ์ (Superset)์ด๋ฆฌ๊ณ ํ๋ค. ๋ฐ๋๋ก ํ์ค์ธ์ด์ ๊ธฐ๋ฅ์ ์ถ์ํ ๊ฒ์ ์๋ธ์ (Subset)์ด๋ผ๊ณ ํ๋ค. ์ปดํ์ผ๋ฌ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ๊ต์กํ ๋ชฉ์ ์ผ๋ก ๋ง๋ Small-C๊ฐ ๋ํ์ ์ธ ์๋ธ์ ์ด๋ค.- C++
1983๋ ์ ๋น์๋ฅด๋ค ์คํธ๋ก์ฐ์คํธ๋ฃจํ๊ฐ C์ธ์ด๋ฅผ ํ์ฅ์ํจ C++๋ฅผ ๋ฐํํ๋ค. - Objective-C
1983๋ ์ ๋ธ๋๋ ์ฝ์ค์ ํฐ ๋ฌ๋ธ๊ฐ C์ธ์ด์์ ํ์๋ Objective-C๋ฅผ ๋ง๋ค์ด ๋ฐํํ๊ณ ์ค์ ์ ์ฉํ๋ค๋ ๊ฒ์ ์ค์ฆํ์๋ค. ๊ทธ๋ฆฌ๊ณ , Objective-C๋ 1989๋ ๋น์ ๊ฐ์ฅ ํ์ ์ ์ธ ์ด์์ฒด์ ์๋ NeXTSTEP์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉ๋์๋ค. NeXTSTEP์ 1996๋ ๋์ Apple์ ์ธ์๋์ด 2001๋ ๋์ ์ถ์๋ Mac OS X์ ๊ธฐ๋ฐ์ด ๋์๋ค.
- ๊ธฐํ ์ฌ๋ฌ ์ธ์ด๋ค
์ด ๋ ์ธ์ด์ ์ฑ๊ณต์ผ๋ก ์ดํ Java, C#, Objective-Pascal ๋ฑ ๋ง์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ค์ด ์์ํ ๊ฐ์ฒด ์งํฅ๋ณด๋ค๋ ๊ธฐ์กด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ์ฒด ์งํฅ ์์๋ฅผ ํ์ฅํ๊ฑฐ๋ ์ถ๊ฐํ ํํ๋ก ๋ง๋ค์ด์ง๊ฒ ๋์๋ค.
3. ์์[ํธ์ง]
3.1. ์บก์ํ(Encapsulation)[ํธ์ง]
๋ณ์์ ํจ์๋ฅผ ํ๋์ ๋จ์๋ก ๋ฌถ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, ๋ฐ์ดํฐ์ ๋ฒ๋ค๋ง(Bundling)์ด๋ค. ๋๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ด ๋ฒ๋ค๋ง์ ํด๋์ค๋ฅผ ํตํด ๊ตฌํ๋๊ณ , ํด๋น ํด๋์ค์ ์ธ์คํด์ค ์์ฑ์ ํตํด ํด๋์ค ์์ ํฌํจ๋ ๋ฉค๋ฒ ๋ณ์์ ๋ฉ์๋์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค. ํด๋์ค๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ๊ฑฐ์ ๋๋ถ๋ถ์ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ์ 1์์์ด๋ค.
3.1.1. ์ ๋ณด ์๋(Information Hiding)[ํธ์ง]
ํ๋ก๊ทธ๋จ์ ์ธ๋ถ ๊ตฌํ์ ์ธ๋ถ๋ก ๋๋ฌ๋์ง ์๋๋ก ํน์ ๋ชจ๋ ๋ด๋ถ๋ก ๊ฐ์ถ๋ ๊ฒ์ด๋ค. ๋ด๋ถ์ ๊ตฌํ์ ๊ฐ์ถ๊ณ ๋ชจ๋ ๋ด์์์ ์์ง๋๋ฅผ ๋์ด๋ฉฐ, ์ธ๋ถ๋ก์ ๋
ธ์ถ์ ์ต์ํํ์ฌ ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋จ์ด๋จ๋ ค ์ ์ฐํจ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ๊ฐ๋
์ ๊ฑฐ์ ๋ชจ๋ ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋
น์ ์๋ค. ๋ง์ ๊ฐ์ฒด ์งํฅ ์ธ์ด์์ ์ฌ์ฉ๋๋ ํด๋์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด, ํด๋์ค ์ธ๋ถ์์๋ ๋ฐ๊นฅ์ผ๋ก ๋
ธ์ถ๋ ํน์ ๋ฉ์๋์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฉฐ ํด๋์ค ๋ด๋ถ์์ ์ด๋ค ์์ผ๋ก ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋์ง๋ ์์ง ๋ชปํ๋๋ก ์ค๊ณ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ธ ์ข ๋ฅ์ ์ ๊ทผ ์ ํ์ด ์ฌ์ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ธ ์ข ๋ฅ์ ์ ๊ทผ ์ ํ์ด ์ฌ์ฉ๋๋ค.
- public: ํด๋์ค์ ์ธ๋ถ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๋ ธ์ถ์ํค๋ ๊ฒ์ด๋ค.
- protected: ๋ค๋ฅธ ํด๋์ค์๊ฒ๋ ๋ ธ์ถ๋์ง ์์ง๋ง, ์์๋ฐ์ ์์ ํด๋์ค์๊ฒ๋ ๋ ธ์ถ๋๋ ๊ฒ์ด๋ค.
- private: ํด๋์ค์ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ฉฐ ์ธ๋ถ๋ก ๋ ธ์ถ๋์ง ์๋๋ค.
๋ณดํต ์บก์ํ์ ์ ๋ณด ์๋์ ๋ฌถ์ด์ ์๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ ๋ณด ์๋์ ์บก์ํ๋ก๋ถํฐ ํ์๋ ๋ณด์กฐ ๊ฐ๋ ์ด์ง '์บก์ํ = ์ ๋ณด ์๋'์ ์๋๋ค. Python์ ์ ๋ณด ์๋์ ์ง์ํ์ง ์์ง๋ง ํด๋์ค๋ฅผ ํตํ ์บก์ํ๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ก ๋ถ๋ฅ๋๋ค.
3.2. ์์(Inheritance)[ํธ์ง]
์์์ ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ํน์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ ๋งํ๋ค. ๊ธฐ๋ฅ์ ์ผ๋ถ๋ถ์ ๋ณ๊ฒฝํด์ผ ํ ๊ฒฝ์ฐ ์์ ํด๋์ค์์ ์์๋ฐ์ ๊ทธ ๊ธฐ๋ฅ๋ง์ ์์ ํด์ ๋ค์ ์ ์ํ๊ฒ ๋๋๋ฐ, ์ด๋ฌํ ์์
์ '์ค๋ฒ๋ผ์ด๋ฉ(Overriding)'์ด๋ผ๊ณ ํ๋ค. ์์์ ์บก์ํ๋ฅผ ์ ์งํ๋ฉด์๋ ํด๋์ค์ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํ๋๋ก ํด ์ค๋ค.
์์ธํ ๋ด์ฉ์ ๋ฌธ์ ์ฐธ์กฐ.
์์ธํ ๋ด์ฉ์ ๋ฌธ์ ์ฐธ์กฐ.
3.3. ๋คํ์ฑ(Polymorphism)[ํธ์ง]
ํ๋์ ๋ณ์, ๋๋ ํจ์๊ฐ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ํด์๋ ์ ์๋ ๊ฒ์ ๋งํ๋ค.
- ์๋ธํ์ ๋คํ์ฑ(Subtype Polymorphism / Inclusion Polymorphism / Subtyping)
์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ OOP์ ๊ทธ๊ฒ. ๊ธฐ์ด ํด๋์ค ๋๋ ์ด๋ ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์์ ํด๋์ค๋ฅผ ์์ฑํ๊ณ , ํด๋น ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ค์์ ํ์ ํด๋์ค๋ค์ ๋ง๋ค์ด ์์ ํด๋์ค์ ํฌ์ธํฐ๋ ์ฐธ์กฐ๋ณ์ ๋ฑ์ด ํ์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ฒ ํ๋ ๊ฒ์ด๋ค. ์ด ๋ ๊ฐ๊ฐ์ ํ์ ํด๋์ค๋ ์์ ํด๋์ค์ ๋ฉ์๋ ์์ ์์ ์ ๋ฉ์๋๋ฅผ ๋ฎ์ด์ฐ๋ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ(Method overriding)์ ์ํํ๋ฉฐ, ์์ ํด๋์ค์ ์ฐธ์กฐ๋ณ์๊ฐ ์ด๋ค ํ์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋๋์ ๋ฐ๋ผ ํธ์ถ๋๋ ๋ฉ์๋๊ฐ ๋ฌ๋ผ์ง๋ค.[3] Java, C++, C#, Python, Ruby ๋ฑ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ ๊ฐ๋ . - ๋งค๊ฐ๋ณ์ ๋คํ์ฑ(Parametric Polymorphism)
ํ์ ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์๋ก์ด ํ์ ์ ๋๋๋ ค์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ ํด๋์ค ํน์ ๋ฉ์๋๋ ์ฌ์ฉํ ๋ ๋งค๊ฐ๋ณ์์ ํ์ ์ ์ง์ ํ๊ฒ ๋๋ฉฐ, ์ปดํ์ผ ์ ์ง์ ํ ํ์ ์ ๋ฐ๋ผ ํด์๋๋ค.- ํ ํ๋ฆฟ(Template)
C++์์ ์ฌ์ฉํ๋ ๊ฐ๋ ์ผ๋ก, ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅํ ํ์ ์ผ๋ก ์นํํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด๋ค. ํ์ ๋ฟ ์๋๋ผ ๋ณ์๋ ์ ๋ ฅํ ์ ์์ผ๋ฉฐ, ๊ฐ์ฒด ๋ด๋ถ์์ ์ฐ์ฐ์ด๋ ํจ์ ํธ์ถ์ ํ ์ ์์ง๋ง, ํด๋น ์ฐ์ฐ์ด๋ ํจ์๊ฐ ์ ์๋์ง ์์ ํ์ ์ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉฐ ์ปดํ์ผ์ด ๋๋ ค์ง๊ณ ํ์ผ์ด ์ปค์ง๋ค. - ์ ๋ค๋ฆญ(Generic)
Java์ C# ๋ฑ์ ๋์ ๋ ๊ฐ๋ ์ผ๋ก, ์ง์ ํ ํ์ ๋งค๊ฐ๋ณ์์ ํด๋นํ๋ ํ์ ๋ง์ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ์ฝ์ํ๋ ๋ฐฉ์์ด๋ค. ํ์ ๋งค๊ฐ๋ณ์๊ฐ ํน์ ๊ฐ์ฒด๋ฅผ ์์ํ ๊ฒฝ์ฐ ์์ํ๋ ๊ฐ์ฒด์ ํจ์๋ ํธ์ถํ ์ ์์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํ์ ๋งค๊ฐ๋ณ์๋ก ์ง์ ๋ ๊ฐ์ฒด์ ๋ฉค๋ฒ์๋ ์ ๊ทผํ ์ ์๋ค.
- ์์ ๋คํ์ฑ(Ad hoc Polymorphism)
- ํจ์ ์ค๋ฒ๋ก๋ฉ(Function overloading)
C++๊ณผ C#, Java์์๋ ํจ์ ์ค๋ฒ๋ก๋ฉ์ ํตํด ๋์ผํ ์ด๋ฆ์ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ๋์ํ๋๋ก ํ ์ ์๋ค. ํจ์ ์ค๋ฒ๋ก๋ฉ์ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ๋ฉด ์ ์ฒด์ ์ธ ์ฝ๋์ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ฏ๋ก, ํ ํ๋ฆฟ ๋๋ ์ ๋ค๋ฆญ์ผ๋ก ๋์ฒดํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. - ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ(Operator overloading)
C++, C# ๋ฑ์์๋ ์ฐ์ฐ์๋ฅผ ์ค๋ฒ๋ก๋ฉํด์ ๊ธฐ๋ณธ ์ฐ์ฐ์๊ฐ ํด๋น ํด๋์ค์ ๋ง๋ ์ญํ ์ ์ํํ๊ฒ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. Java์์๋ ์ฐ์ฐ์์ ์ค๋ฒ๋ก๋ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. Perl 6๋ Smalltalk, F#, Kotlin ๋ฑ ์ฐ์ฐ์์ ์ ๊ท ์ ์๊ฐ ๊ฐ๋ฅํ ์ธ์ด๋ ์๋ค. ํ๊ธ ์ํค๋ฐฑ๊ณผ์ ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ์ ๋ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ถ๋ฅ
- ๊ฐ์ ๋คํ์ฑ(Coercion Polymorphism)
- ๋ฌต์์ ํ ๋ณํ(Implicit type coercion)
'double a = 30;'์ด๋ผ๋ ์์ด ์คํ๋๋ฉด intํ ๊ฐ 30์ double๋ก ๋ฌต์์ ํ ๋ณํ์ด ์ด๋ฃจ์ด์ง๋ค. double์ int๋ณด๋ค ํฌ๊ธฐ๊ฐ ํฐ ์๋ฃํ์ด๋ฏ๋ก, ์ด๋ฌํ ํ ๋ณํ์ ์๋ฃํ ์น๊ธ(Type promotion)์ด๋ผ๊ณ ํ๋ค. C++์ ๋ณํ ์์ฑ์์ ์ํ ํ ๋ณํ๋ ๋ฌต์์ ๋ณํ์ ์ํ๋ฉฐ, ์ด๋ฅผ ๋ง์ผ๋ ค๋ฉด ์์ฑ์ ์์ explicit ํค์๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค. - ๋ช ์์ ํ ๋ณํ(Explicit type coercion)
'double a = (double)30;'์ด๋ผ๋ ์์ ์์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ง๋ง, (double)์ ํตํด intํ ๊ฐ 30์ด doubleํ์ผ๋ก ๋ณํ๋จ์ ๋ช ์์ ์ผ๋ก ํํํ์๋ค.
4. ์์น[ํธ์ง]
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ/์์น, ๋์์ธ ํจํด ๋ฌธ์ ์ฐธ์กฐ.
5. ์ฅ๋จ์ [ํธ์ง]
- ๋ฐ์ดํฐ ํด๋์ค์ ์์์ด๋ผ๋ ๊ฐ๋ ์ ๊ต์ฅํ ๋ฐ์ด๋์ง๋ง ๋ง์ฐฌ๊ฐ์ง๋ก ๊ต์ฅํ ๋ณต์กํ ํน์ฑ์ ์ง๋๊ฒ ํด์ค๋ค. ์ด OOP ํน์ฑ ๋๋ถ์ ๋ฉด๋ฐํ ์๋ฃ ๋ถ์[4], ๊ฐ๋ฐ์๊ฐ ๋จ์ถ[5], ์ข๋ ์ ํํ ์ฝ๋ฉ[6]์ ๋ณด์ฆํ์ง๋ง ์ฝ๋์ ๋์ด๋๊ฐ ๊ธ์์นํ๋ค. ํ ๋ง๋๋ก ์ด๋ ค์์ง๋ค. ํนํ, ๋ค์ค ์์์ด ๋๋ฉด ์์ฒญ ๋ณต์กํด์ง๋ค. ๊ทธ๋์ ๋๋ค์์ OOP ์ธ์ด๋ค์ ๋ค์ค ์์์ ์ง์ํ์ง ์์๊ณ ์ค์ ๊ตฌํ์ด ์ ํ ์๋ ๊ป๋ฐ๊ธฐ์ธ ์ธํฐํ์ด์ค๋ง ์ถ๊ฐ๋ก ์์ํ ์ ์๊ฒ ํ๋๋ฐ, ์ด๊ฒ ๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ํ์ ํ๊ฒ ๋จ์ด๋จ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์์ด์[7] ์ต๊ทผ์ ๋ฏน์ค์ธ์ด๋ ํธ๋ ์ดํธ๊ฐ์ด ๋ค์ค์์์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์๋ค. ์์์ด ๋ณต์กํ๊ฒ ์ฝํ ์์ค ๋ถ์์ด ์ด๋ ค์์ง ์ํ๋ ๋ผ์๋ ์ฝ๋๋ผ๊ณ ๊ณง์ ๋ถ๋ฆฌ๋ ํธ.
- ํด๋์ค๋ ์ค๋ก์ง ๊ด๋ จ ๋ฐ์ดํฐ๋ง์ ์ ์ํ๊ธฐ ๋๋ฌธ์, ํ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์ํ๋ ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋๋ก ๊ฑด๋๋ฆด ์ ์๊ฒ ๋๋ค. ๋๋ถ์ ๋์ ์์คํ ๋ณด์์ ์ ๊ณตํ๊ณ , ์๋ฃ ํผ์์ ๋ฐฉ์งํ๋ ํจ๊ณผ๊ฐ ์๋ค. ํ์ง๋ง public ๋ณ์๋ฅผ ๋จ๋ฐํด ๋ฒ๋ฆฌ๋ฉด... ๋ ์ด์์ ์์ธํ ์ค๋ช ์ ์๋ตํ๋ค. ๋น์ฐํ์ง๋ง, ์ด๋ ํ๋ก๊ทธ๋จ ๋ด์์์ ๊ฐ ์ธ์คํด์ค๊ฐ ๋ด๋ถ์ ์ธ ์ ๊ทผ์ ๋ฒ์๋ฅผ ์ ํํ๋ ๊ฒ์ด๋ค. ์ธ๋ถ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๋ฌธ์ ์๋ ๋ค๋ฅธ ๋ฒ์ฃผ. ์ธ๋ถ์์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ๊น์ง ์ฐจ๋จํ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ณ์กฐ๋ ์ด๋ป๊ฒ ๋๋จ ๋ง์ธ๊ฐ. ์ ์ด์ ์ด์์ฒด์ ์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๋ชปํ๊ฒ ๋ ๊ฒ์ด๋ค. Visual Studio 6.0์ C++๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฃ ์ฒ๋ฆฌ ์ ๋ณ์๋ฅผ ๋ชจ๋ public์ผ๋ก ์ฒ๋ฆฌํ์๋ค. ์ด ์ด์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๋๊ฐ 50๊ฐ์ด๋ฉด get๊ณผ set ๋ฉ์๋๋ฅผ ๋ชจ๋ ๊ตฌํํด์ฃผ๋ฉด 100๊ฐ์ ๋ฉ์๋๊ฐ ๋ง๋ค์ด์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ณ์ 50๊ฐ์ ๋ฉ์๋ 100๊ฐ๋ฅผ ๋ค 150๊ฐ๋ฅผ ํค๋ณด๋๋ก ์ณ์ผ ํ๋ค.[8] ์๊ฐ๋ง ํด๋ ์ผํ ๊ธฐ๋ถ์ด ์๋๋ค. ์ด๊ฑด Java๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ๋ณ์์ get๊ณผ set ๋ฉ์๋ ๊ตฌํ์ ์ด์ฐ๋๋ ๊ต์ฅํ ๊ท์ฐฎ์ ์์ ์ด๋ค. ๋ฐ์ดํฐ์ ์๋๋ ์ค์ํ์ง๋ง ํ๋ก๊ทธ๋๋จธ์ ์๊ฐ๋ฝ ๊ฑด๊ฐ๋ ์๊ฐํด ๋ด์ผ ํ๋ค. C#์ 2.0๋ถํฐ ํ๋กํผํฐ ํ๋๋ง ์ ์ธํด ์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํฐ ๋ฌธ์ ๋ ์๋ค.
๊ตฌ์ฒด์ ์ธ ํด๋น ์ฌ๋ก๋ฅผ ์ ์ ์์ผ๋ ์๋ฌธ์ ๋จ๊ฒจ๋์ง๋ง, C++ ์ปดํ์ผ๋ฌ๋ผ๋ฉด ์ด๋ ๊ฒ์ด๋ ์์๊ณผ ํ์ ์ ์ธ, ์ค๋ฒ๋ก๋ฉ ๋ฑ์ ์ฌ์ฉํ๋ฉด public ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋น์ทํ ์ฝ์คํธ๋ก ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์ถ๋ ฅ์ ๊ตฌํํ ์ ์๋ค. ๋ฉ์๋๊ฐ ์์ผ๋ฉด ํด๋ผ์ด์ธํธ์ ๋ณํ๋ฌด์ํ ๊ฐ์์๊ธฐ์ ๋ํ ๋์๋ ฅ์ด ๋จ์ด์ ธ์ ์คํ๋ ค ๋ ํผ๊ณคํด์ง ์ํ์ด ๋์ ์ฝ๋๋ค. - ํด๋์ค์ ์ ์๋ ์ต์ด๋ก ์์ฑํ ํ๋ก๊ทธ๋จ๋ฟ ์๋๋ผ ๋ค๋ฅธ OOP์์๋ ๋๊ฐ์ด ์ฌ์ฉ๋ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ , ์ด๋ฐ ์ด์ ๋ก ๋คํธ์ํฌ์ ์ฝ๊ฒ ๋ถ์ฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง ํ๋ก๊ทธ๋๋จธ์๊ฒ๋ ์์ฃผ ํ๋ ๋ ธ๋ ฅ์ ๊ฐ์ํ๋ค. ๋คํธ์ํฌ ํต์ ์ด๋ผ๋ ๊ฒ์ ํธํ์ฑ์ ์ํด 7bit ASCII ์ฝ๋๋ก ์ ์กํ๋ค. 1960๋ ๋ ๋ง๋ค์ด์ง ํต์ ๊ธฐ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ณณ๋ ์์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋๋ฌธ์ Quarter-Print, Base64๋ UTF-8 ๊ฐ์ ๊ฒ์ด ๋ง๋ค์ด์ง ๊ฒ์ด๋ค. ๊ฒฐ๊ตญ ๊ฐ์ฒด๋ 7bit ASCII ์ฝ๋๋ก ์ ์ก์ ํด์ผ ํ๋ค. ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ASCII ์ฝ๋ํ ํ๋ ๊ฒ์ ์ง๋ ฌํ(Serialization)๋ผ๊ณ ํ๊ณ ASCII ์ฝ๋๋ฅผ ๋ค์ ๊ฐ์ฒดํ ํ๋ ๊ฒ์ ์ญ์ง๋ ฌํ(Deserialization)๋ผ๊ณ ํ๋ค. ํ์ง๋ง ๋ง๋ฒ์ฒ๋ผ ๊ทธ๋ฅ ๋๋ ๊ฒ ์๋๊ณ "์ง๋ ฌํ ์ธํฐํ์ด์ค"๋ฅผ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๊ตฌํํ์ ๋๋ง ๊ฐ๋ฅํ๋ค. Java๋ฅผ ๋น๋กฏํ ๋๋ค์์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ค์ ์ง๋ ฌํ-์ญ์ง๋ ฌํ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๊ณ ์๋ค. ์ด๋ฌํ ์์ด๋์ด๋ฅผ ๋ฐ์ ์ํจ ๊ฒ์ด CORBA์ MS์ COM/DCOM/COM+์ด๋ค. ์ต๊ทผ์๋ SOAP๋ JSON, XML-RPC ๋ฑ ํ ์คํธ ๊ธฐ๋ฐ์ ์ง๋ ฌํ ๊ธฐ์ ๋ ๋ง์ด ์ฌ์ฉ๋๋ค. Java์๋ Java Runtime๋ผ๋ฆฌ ํต์ ํ๊ธฐ ์ํ RMI(Remote Method Invocation)๋ ์ง์ํ๋ค.
- ๋ฐ์ดํฐ ํด๋์ค ๊ฐ๋ ์ ์ธ์ด์ ์ ์๋์ง ์์ ์๋ก์ด ๋ฐ์ดํฐ ํ์์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์๋ก ์ ํ ์ ์๋๋ก ํด์ค๋ค.
- ์บก์ํ์ ๊ฒฉ๋ฆฌ ๊ตฌ์กฐ ์ค๊ณ๋ก ์ธํ ์ฑ๋ฅ ํ๋ฝ์ด ์๋ค. ๊ฑฐ์ ๋๋ถ๋ถ์ ๊ฐ์ฒด์งํฅ ์ธ์ด์์ ๊ธฐ๋ฅ์ ๋ฌถ์ผ๋ฉด ๊ฒฐ๊ตญ ํจ์ ํธ์ถ์ด ์ถ๊ฐ๋ก ๋ค์ด๊ฐ๊ฑฐ๋ ๊ณ์ฐ์ ์ค๊ฐ์ ํฌ์ธํฐ ์ฐ์ฐ ๋ฑ์ด ํ์ํด์ง๋ฉฐ, ๋ฉค๋ฒ ํจ์ ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ ๊ฐ์ฒด์ ํจ์์ธ์ง ์ง์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ ํฌ์ธํฐ ํฌ๊ธฐ์ ์ฐ์ฐ ๋น์ฉ์ด ๋ค์ด๊ฐ๋ค. ์ธ๋ผ์ธ ํจ์์ ์ปดํ์ผ๋ฌ ์ต์ ํ(ํนํ RVO(Return Value Optimization)) ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋์ ๋๋ ๊ฒฉ์ฐจ๋ฅผ ์ค์ฌ์ฃผ๋ ์ญ์ ๊ทธ๋ฅ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ๋ณด๋ค๋ ๋ฌด๊ฑฐ์์ง๋ค.
- ๊ฐ๋ ์ ๊ธฐ์ค์ผ๋ก ๋๋๋ค๋ณด๋ ๋ฐ๋ณต ์ฐ์ฐ์ด ์ปดํจํฐ ์นํ์ ์ด์ง ์๊ณ , ํนํ ๋ฐฐ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ฉํ๊ธฐ ํ๋ค์ด์ง๋ค. ๊ฐ์ฒด ํ๋ํ๋๋ฅผ ๋ฐ๋ก ์บก์ํ์ํค๊ณ ์์์ ๋ถ๋ชจ๋ง ๊ฐ์ผ๋ฉด ์์์ ์ข ๋ฅ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๋ค๋ณด๋ ๊ฐ์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ฉฐ, ๊ฒฐ๊ตญ ๊ณ ์ ๋ ์ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ด์ ์๊ฐ ์๊ฒ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐฐ์ด๋ก ํ์ง ๋ชปํ๊ฒ ๋๋ ๋ฐ๋ก๋ฐ๋ก ์์ฑํ๊ฒ ๋๋๋ฐ ์ด๋ ๊ฒ ๊ฐ๊ฐ์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ํ๊ดด๊ฐ ๋ฐ๋ณต๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ผ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ฒ ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ธฐ๋ฅ์ด ๋ง๋ค์ด์ง ์ด์ ์ค ํ๋. ๋ ์ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ๊ธฐ ํ๋ค์ด์ง๋ค๋ ๊ฑด ์บ์์ ํจ์จ์ ์ฌ์ฉ์ ํฐ ๋ฌธ์ ๊ฐ ์๊ธด๋ค๋ ๋ป์ด๊ธฐ๋ ํด์ ์ฑ๋ฅ ๊ฒฉ์ฐจ๋ ๋ ๋ฒ์ด์ง๊ฒ ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ์ฝ๋ฉ ํจ๋ฌ๋ค์์ผ๋ก DOP(Data Oriented Programming)๊ฐ ์๊ณ ๊ตฌํ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ์ด ์๋ค.
- ๊ฐ์ฒด ํ๋ํ๋๋ฅผ ๋ฐ๋ก ๋๋๋๋ฐ ์ฃผ๋ ฅํ๋ค๋ณด๋ ์๋ก ๋น์ทํ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ฝ๋๊ฐ ์๋ก๋ฅผ ๊ฑด๋๋ฆด ์ ์๊ฒ ๋์๊ณ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด getter(์ ๊ทผ์: ๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋), setter(์ค์ ์: ํ๋์ ๊ฐ์ ์ ์ฅํ๋ ๋ฉ์๋)์ฌ์ฉ์ด ๋๋ฌด ๋ง์์ก๋ค. ์ด ๊ณผ์ ์์ ์บก์ํ๊ฐ ๊นจ์ง๊ณ ๊ทธ๋ฅ public์ผ๋ก ๊ณต๊ฐํ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ธ ์ํ๊ฐ ๋์ด ์๋ฏธ๊ฐ ํด์๋์๊ณ , ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด ํ์ํด์ก๋ค. AOP(Aspect Oriented Programming)๋ ๋ชจ๋ ์ฝ๋ ํ๋ํ๋๋ฅผ ๋ณ๊ฐ์ ๊ฐ์ฒด๋ก ๋ถ๋ฆฌํ๊ธฐ๋ณด๋ค '์ด๋ค ์ผ์ ์ด๋์ ์ฒ๋ฆฌํ๋๊ฐ' ์ ๋ ์ค์ ์ ๋์ด ํฐ ๋ฒ์๋ก ๋ฌถ์ด์ฃผ์ด ๋ชจ๋ํ ํจ์จ์ ๊ฐ์ ์์ผฐ๊ณ , ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฝ๋๋ค์ ์๋ณธ ๊ฐ์ฒด ์งํฅ ๋ฐฉ์์ ๊ทธ๋ฅ ๊ทธ๋๋ก ์ ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฌผ๋ค.
6. ๊ธฐํ[ํธ์ง]
์ต๊ทผ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์๋ ํจ์ํ ํจ๋ฌ๋ค์๊ณผ๋ ๋ค์ ์๋ฐ๋ ์์น์ ์๋ค. OOP์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ ์ ์ง๋ณด์์ ๋ฐ์ดํฐ ์ถ๊ฐ๋ ์๋ก์ด ํด๋์ค๋ฅผ ๋ํ๋ ๊ฒ์ผ๋ก ๋น๊ต์ ๊ฐ๋จํ๊ฒ ๊ฐ๋ฅํ์ง๋ง operation set์ ๋ณ๊ฒฝํ ๋๋ ๊ด๋ จ๋ ๋ค์ ํด๋์ค๋ฅผ ์์ ํด์ผ ํ๋ฏ๋ก ๋์กํด์ง๋ ๊ฒฝํฅ์ด ์๋ค. ๋ฐ๋๋ก ํจ์ํ ํจ๋ฌ๋ค์์์๋ operation set์ ์ถ๊ฐ๋ ๊ฐ๋จํ์ง๋ง ๋ฐ์ดํฐ ์ถ๊ฐ๋ ๊ด๋ จ๋ ๋ค์์ ํจ์๋ฅผ ๋ฐ๊ฟ์ผ ํ๋ฏ๋ก ๋ํดํ ์ ์ด ์๋ค.
์ฃผ์ํ ์ ์ OOP์ ํจ์ํ ํจ๋ฌ๋ค์์ด ์๋ฐ๋ ์์น์ ์๊ธด ํ์ง๋ง ๋๋น๋๋ ๊ฐ๋ ์ ์๋๋ฉฐ, ์์ฆ์๋ ํจ์ํ ์ธ์ด์๋ OOP ๊ฐ๋ ์ ์ถ๊ฐํ๋ค๋ ๊ฐ(F#), ๋ฐ๋๋ก ๊ฐ์ฒด์งํฅ ์ธ์ด์ ํจ์ํ ํจ๋ฌ๋ค์์ ์ถ๊ฐํ๋(C#, C++, Python...) ๋ฑ ๋ฉํฐํจ๋ฌ๋ค์ ์ถ์ธ๋ก ๊ฐ๊ณ ์๋ค.
ํด๋์ค๊ฐ ์์ด์ผ๋ง ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ผ๊ณ ์๊ฐํ ์๋ ์์ง๋ง, ์ฌ์ค ํด๋์ค ์๋ OOP ์ธ์ด๋ ๊ฝค ์๋ค. ํ๋กํ ํ์ ์ ์ฌ์ฉํ๋ JavaScript[9], ์ก์ ์คํฌ๋ฆฝํธ 2.0[10], ํธ๋ ์ดํธ(Trait)๋ฅผ ์ฌ์ฉํ๋ Rust ๋ฑ.
์ฃผ์ํ ์ ์ OOP์ ํจ์ํ ํจ๋ฌ๋ค์์ด ์๋ฐ๋ ์์น์ ์๊ธด ํ์ง๋ง ๋๋น๋๋ ๊ฐ๋ ์ ์๋๋ฉฐ, ์์ฆ์๋ ํจ์ํ ์ธ์ด์๋ OOP ๊ฐ๋ ์ ์ถ๊ฐํ๋ค๋ ๊ฐ(F#), ๋ฐ๋๋ก ๊ฐ์ฒด์งํฅ ์ธ์ด์ ํจ์ํ ํจ๋ฌ๋ค์์ ์ถ๊ฐํ๋(C#, C++, Python...) ๋ฑ ๋ฉํฐํจ๋ฌ๋ค์ ์ถ์ธ๋ก ๊ฐ๊ณ ์๋ค.
ํด๋์ค๊ฐ ์์ด์ผ๋ง ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ผ๊ณ ์๊ฐํ ์๋ ์์ง๋ง, ์ฌ์ค ํด๋์ค ์๋ OOP ์ธ์ด๋ ๊ฝค ์๋ค. ํ๋กํ ํ์ ์ ์ฌ์ฉํ๋ JavaScript[9], ์ก์ ์คํฌ๋ฆฝํธ 2.0[10], ํธ๋ ์ดํธ(Trait)๋ฅผ ์ฌ์ฉํ๋ Rust ๋ฑ.
6.1. ๊ต์ก์ ์ด๋ ค์[ํธ์ง]
ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ธ ๋ ๋ง๋๊ฒ ๋๋ ๋๊ด์ด๊ธฐ๋ ํ๋ค. C๋ฅผ ๋ฐฐ์ด ๋ค C++์ ๋ฐฐ์ฐ๋ ์ํฉ์์ ํนํ ์ฌํ๊ธด ํ๋ฐ, ๊ณง๋ฐ๋ก Java๋ Python์ผ๋ก ๋ฐฐ์ฐ๊ธฐ ์์ํ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์๋ํ๋ฉด ์ด์ ๊น์ง ๋ฐฐ์ ๋ ๊ฒ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌธ๋ฒ์ด์๋ค๋ฉด(์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก์์ ๋ฌธ๋ฒ), OOP๋ ๊ฐ์ฅ ๋ฌธ์ ๊ฐ ๋ ์๊ธฐ๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋ฉํ๊ฒ๋ ํ๋ ๊ฐ์ด๋๋ผ์ธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.(๊ถ์ฅ์ฌํญ) ์ด์ ๋ง ์ํ๋ฒณ๊ณผ ๊ธฐ์ด ์๋ฌธ๋ฒ์ ๋ ํ์์๊ฒ ์์ฌ๋ฒ ๋ด์ง๋ ๋
ผ๋ฆฌ์ ์๋ฌธ์ ๊ฐ๋ฅด์น๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒ์ด๋ค.
์ด ๋ฌธ์ ๋ผ๋ ๊ฒ๋ ์์ฒ, ์๋ง ์ค์ง๋ฆฌ ์ฝ๋๋ฅผ ์๋ ๊ฐ ์ ์ง๋ณด์ํ ๋๋ ๋ชธ์ ์๋ฟ์ ํ ๋ฐ, ๊ธฐ๊ปํด์ผ ๊ณผ์ ์ ์ถํ๊ณ ๋ค์ ์๋์ง ์์ ๊ธธ์ด์ผ ์๋ฐฑ ์ค์ง๋ฆฌ ์ฝ๋๋ ์ง๋ดค์ ํ์๋ค์๊ฒ๋ ์ ํ ์ฒด๊ฐํ ์ ์๋ค. ๊ฒ๋ค๊ฐ ๋๋ถ๋ถ์ ์ธ์ด๋ค์ ๊ธฐ์กด์ ์ธ์ด์ ๊ฐ์ฒด์งํฅ์ ์น์ด๋์ ํํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด OOP์ ๋ง์ถฐ์ ์ง์ง ์์๋ ์ํ๋ ๊ฒฐ๊ณผ๋ ์ผ๋จ ๋์จ๋ค. ์ด๋ฌํ ์ด์ ๋ค๋ก ์ธํด ํ์๋ค์๊ฒ C++ ๊ณผ์ ๋ฅผ ๋ด์ฃผ๋ฉด C++ ๋ฌธ๋ฒ์ ์ฌ์ฉํ C ํ๋ก๊ทธ๋จ์ธ ๊ฒฝ์ฐ๊ฐ ํ๋ฐ์ด๋ค. ์ด๋ Java ๊ฐ์ ์ธ์ด์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ํ๋๋ ํ์์ด๋ค. Java ๋ฌธ๋ฒ์ด์ง๋ง C ํ๋ก๊ทธ๋จ ์ฒ๋ผ ์ง๋ ๊ฒ์ '์จ์๋ฐ'๋ผ๊ณ ํ๋ค. ๊ฐ ํ๋ ์๋ค์ ์ ์ถ๋ ฅ ์ธํฐํ์ด์ค๋ฅผ ์ค๊ณํ๊ณ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ ์ ์ํ ๋ค์ ํ์๋ค์๊ฒ ๊ทธ์ ๋ง์ถฐ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ๊ณตํ๋ผ๊ณ ๊ณผ์ ๋ด์ฃผ๋ ๊ฒ OOP ๊ณผ์ ์ธ๋ฐ, ํ์ค์ ๋๋ ๋ช ์ค์ ์๊ตฌ์ฌํญ์ผ๋ก ์ ์ฒด ํ๋ก๊ทธ๋จ ์ง ์๋ผ๊ฐ ์ ๋ถ์ธ ๊ฒ ๋ณดํต์ด๋ค. ๊ทธ๋ฌ๋ ํ์๋ค์ด ๊ธฐ๊ป ๋ช ๋ฐฑ ์ค ์ง๋ฆฌ ์ฝ๋ ์ง๋ ๋ฐ procedural ๋์ OOP๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ ๊ฑด ๊ต์ ๋ฐ ์กฐ๊ต๋ค์ ๋ง์์ด๋ค. ์์ ๋ค๋ ๋ชป ํ๊ฑฐ๋ ๋งค์ฐ ๊ท์ฐฎ์ ํ๋ ์ผ์ ์ ๊ธฐ๊ปํด์ผ 1-2๋ ๋์ ์ผ์ฃผ์ผ์ 3-4์๊ฐ ๊ต์ก๋ฐ์ ๋จ์๊ฒ ์ํฌ๊น ์ถ์ง๋ง ์ด๊ฒ์ด ๋ฐ๋ก ํ์๊ณต๋ก . ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์์ผ๋ก ๊ต์ก์ ํ๋ ์์ ๋ ธ๊ฐ๋ค๊พผ๋ฐ์ ์์ฐ์ด ์ ๋๋ ๊ฒ์ด๋ค.
์์ธ๋ก ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ํท๊ฐ๋ฆฌ๋ ๊ฒ๋ OOP์ ๊ฐ๋ ์ ์ด๋ ต๊ฒ ํ๋ ์์ธ. ๋๊ฐ ๋ถ์ด๋นต ํ(ํด๋์ค)๊ณผ ๋ถ์ด๋นต(๊ฐ์ฒด)์ ๊ด๊ณ๋ก ๊ฐ๋ฅด์น๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ํ์ง๋ง ์ฌ๋ - ๊น์ฐ์, ํญ๊ท - ๋ฝ๋ก๋ก์ด๋ฐ์์ผ๋ก property์ ์ ๋ฌด๋ก ๊ตฌ๋ถํ๋ผ๋ ์์ ๋ ์กด์ฌํ๋ค. ๋ํ ์ธ์คํด์ค๋ผ๋ ์ฉ์ด์๋ ํท๊ฐ๋ ค ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ธ์คํด์ค๋ ๊ฐ์ฒด๋ฅผ ์ค์ฒดํํ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์ฆ ํ๋ก๊ทธ๋จ ์ฝ๋ ์์์ ์๋ฃํ์ด ์์์ ํด๋์ค๋ก ์ ์ธ๋ ์๋ณ์๋ '๊ฐ์ฒด'๋ผ ํ๊ณ , ์ฝ๋ ์ปดํ์ผ ํ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ํด๋น ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๋ฉด '์ธ์คํด์ค'๋ผ๊ณ ๋ถ๋ฆฐ๋ค.[11] ์ด๋ ๋จ๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋๋์ ์ฐจ์ด์ผ ๋ฟ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ ๊ฐ์ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
์ด ๋ฌธ์ ๋ผ๋ ๊ฒ๋ ์์ฒ, ์๋ง ์ค์ง๋ฆฌ ์ฝ๋๋ฅผ ์๋ ๊ฐ ์ ์ง๋ณด์ํ ๋๋ ๋ชธ์ ์๋ฟ์ ํ ๋ฐ, ๊ธฐ๊ปํด์ผ ๊ณผ์ ์ ์ถํ๊ณ ๋ค์ ์๋์ง ์์ ๊ธธ์ด์ผ ์๋ฐฑ ์ค์ง๋ฆฌ ์ฝ๋๋ ์ง๋ดค์ ํ์๋ค์๊ฒ๋ ์ ํ ์ฒด๊ฐํ ์ ์๋ค. ๊ฒ๋ค๊ฐ ๋๋ถ๋ถ์ ์ธ์ด๋ค์ ๊ธฐ์กด์ ์ธ์ด์ ๊ฐ์ฒด์งํฅ์ ์น์ด๋์ ํํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด OOP์ ๋ง์ถฐ์ ์ง์ง ์์๋ ์ํ๋ ๊ฒฐ๊ณผ๋ ์ผ๋จ ๋์จ๋ค. ์ด๋ฌํ ์ด์ ๋ค๋ก ์ธํด ํ์๋ค์๊ฒ C++ ๊ณผ์ ๋ฅผ ๋ด์ฃผ๋ฉด C++ ๋ฌธ๋ฒ์ ์ฌ์ฉํ C ํ๋ก๊ทธ๋จ์ธ ๊ฒฝ์ฐ๊ฐ ํ๋ฐ์ด๋ค. ์ด๋ Java ๊ฐ์ ์ธ์ด์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ํ๋๋ ํ์์ด๋ค. Java ๋ฌธ๋ฒ์ด์ง๋ง C ํ๋ก๊ทธ๋จ ์ฒ๋ผ ์ง๋ ๊ฒ์ '์จ์๋ฐ'๋ผ๊ณ ํ๋ค. ๊ฐ ํ๋ ์๋ค์ ์ ์ถ๋ ฅ ์ธํฐํ์ด์ค๋ฅผ ์ค๊ณํ๊ณ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ ์ ์ํ ๋ค์ ํ์๋ค์๊ฒ ๊ทธ์ ๋ง์ถฐ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ๊ณตํ๋ผ๊ณ ๊ณผ์ ๋ด์ฃผ๋ ๊ฒ OOP ๊ณผ์ ์ธ๋ฐ, ํ์ค์ ๋๋ ๋ช ์ค์ ์๊ตฌ์ฌํญ์ผ๋ก ์ ์ฒด ํ๋ก๊ทธ๋จ ์ง ์๋ผ๊ฐ ์ ๋ถ์ธ ๊ฒ ๋ณดํต์ด๋ค. ๊ทธ๋ฌ๋ ํ์๋ค์ด ๊ธฐ๊ป ๋ช ๋ฐฑ ์ค ์ง๋ฆฌ ์ฝ๋ ์ง๋ ๋ฐ procedural ๋์ OOP๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ ๊ฑด ๊ต์ ๋ฐ ์กฐ๊ต๋ค์ ๋ง์์ด๋ค. ์์ ๋ค๋ ๋ชป ํ๊ฑฐ๋ ๋งค์ฐ ๊ท์ฐฎ์ ํ๋ ์ผ์ ์ ๊ธฐ๊ปํด์ผ 1-2๋ ๋์ ์ผ์ฃผ์ผ์ 3-4์๊ฐ ๊ต์ก๋ฐ์ ๋จ์๊ฒ ์ํฌ๊น ์ถ์ง๋ง ์ด๊ฒ์ด ๋ฐ๋ก ํ์๊ณต๋ก . ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์์ผ๋ก ๊ต์ก์ ํ๋ ์์ ๋ ธ๊ฐ๋ค๊พผ๋ฐ์ ์์ฐ์ด ์ ๋๋ ๊ฒ์ด๋ค.
์์ธ๋ก ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ํท๊ฐ๋ฆฌ๋ ๊ฒ๋ OOP์ ๊ฐ๋ ์ ์ด๋ ต๊ฒ ํ๋ ์์ธ. ๋๊ฐ ๋ถ์ด๋นต ํ(ํด๋์ค)๊ณผ ๋ถ์ด๋นต(๊ฐ์ฒด)์ ๊ด๊ณ๋ก ๊ฐ๋ฅด์น๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ํ์ง๋ง ์ฌ๋ - ๊น์ฐ์, ํญ๊ท - ๋ฝ๋ก๋ก์ด๋ฐ์์ผ๋ก property์ ์ ๋ฌด๋ก ๊ตฌ๋ถํ๋ผ๋ ์์ ๋ ์กด์ฌํ๋ค. ๋ํ ์ธ์คํด์ค๋ผ๋ ์ฉ์ด์๋ ํท๊ฐ๋ ค ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ธ์คํด์ค๋ ๊ฐ์ฒด๋ฅผ ์ค์ฒดํํ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์ฆ ํ๋ก๊ทธ๋จ ์ฝ๋ ์์์ ์๋ฃํ์ด ์์์ ํด๋์ค๋ก ์ ์ธ๋ ์๋ณ์๋ '๊ฐ์ฒด'๋ผ ํ๊ณ , ์ฝ๋ ์ปดํ์ผ ํ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ํด๋น ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๋ฉด '์ธ์คํด์ค'๋ผ๊ณ ๋ถ๋ฆฐ๋ค.[11] ์ด๋ ๋จ๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋๋์ ์ฐจ์ด์ผ ๋ฟ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ ๊ฐ์ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
6.2. C์ธ์ด์ ๊ฐ์ฒด์งํฅ[ํธ์ง]
C์ธ์ด๋ ๋ฌธ๋ฒ์ ์ผ๋ก ๊ฐ์ฒด ์งํฅ์ ์ง์ํ์ง ์์ผ๋, C์ธ์ด๋ก ๊ฐ์ฒด ์งํฅ์ ์ธ ๊ตฌํ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์๋๋ค. ๋ฆฌ๋
์ค ์ปค๋์ ๋ง๋ ๋ฆฌ๋์ค ํ ๋ฅด๋ฐ์ค์ ๋ง์ ๋ค์ด๋ณด์. "you can write object-oriented code (useful for filesystems etc) in C, _without_ the crap that is C++." ๋งํฌ C++๊ฐ ๊ตฌ๋ฆฌ๋ค๋ ๋ง์ ๋์ด๊ฐ์
C๋ฅผ C++๋ก ํ์ฅ์ํค๊ณ ์ต์ด์ C++ ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ ๋น์๋ฅด๋ค ์คํธ๋ก์ฐ์คํธ๋ฃจํ์ ๊ฒฝ์ฐ ์ฒ์ ์ปดํ์ผ๋ฌ๋ฅผ ๊ตฌํํ ๋ C++๋ฅผ C ์ธ์ด๋ก ๋ณํ์ํค๋ ์ธํฐํ๋ฆฌํฐ๋ฅผ ํตํด ๋ง๋ค์๋ค. (๋ฌผ๋ก ํ์กดํ๋ ๋๋ถ๋ถ์ ์ปดํ์ผ๋ฌ๋ C++์ C๋ก ๋ฐ๊พธ๋ ์์ ์ ํ์ง ์๊ณ ๋ฐ๋ก ์ปดํ์ผ์ ์ํํ๋ค.) ์ฆ, C๋ก ๊ฐ์ฒด์งํฅ ์ฝ๋ฉ์ด ๊ฐ๋ฅํ๋ค๋ ๋ง. ์คํธ๋ก์ฐ์คํธ๋ฃจํ๊ฐ ์ง์ ์ ์ ํ The C++ Programming Language ์ฑ ์ ํด๋น ๋ด์ฉ์ ์ธ๊ธํ๋ค.
์ด๊ฑธ ์ค์ฉ์ ์ผ๋ก ์ฐ๋ ๋ถ์ผ๋ ์๋ค. ์๋ฒ ๋๋๋ ํ์จ์ด ๊ด๋ จ ํ๋ก์ ํธ์์๋ ์ฌ๋ฌ๊ฐ์ง ์ฌ์ ์ผ๋ก (์ฌ๋ฌ ํ๋ซํผ์ ํฌํ ๊ฐ๋ฅํด์ผ ํ๋ค๊ฑฐ๋, ํด์ฒด์ธ์ ์ง์ํ์ง ์๋๋ค๊ฑฐ๋) C์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํฐ ๊ท๋ชจ์ ์์ค์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๋ฅผ ๋์ ํ์ฌ์ผ ๋ชจ๋์ด๋ ๋ ์ด์ด ์ฌ์ด์ ํผ์ก์ ํผํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ํ๋ก๊ทธ๋๋จธ๋ค์ ๊ฐ์ฒด์งํฅ์ ์ธ C์ ์ค๊ณ๋ ๋ฐ๋์ ์ตํ์ผ ํ ๋ด์ฉ์ด๋ค.
๊ทธ๋ฌ๋ ํ ๋ถ์ผ์์๋ ๊ธฐ์ ์ ํ์๊ณต๋ก ์ ๊ฐ๊น์ด ์ด์ผ๊ธฐ๋ก, ์ค์ฉ์ ์ธ ์๋ฏธ๊ฐ ์ ํ ์๋ค. "๊ฐ๋ฅํ๊ธฐ๋ ํ๋ค"๋ ๊ฒ์ผ ๋ฟ ํ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๋นํ๋ฉด ์ด๋ด ๊ฑฐ๋ฉด ๊ทธ๋ฅ ์ฐ์ง ๋ง ์์ค์ผ๋ก ๋ฌด์งํ๊ฒ ๋นํจ์จ์ ์ด๊ณ ๊ด๋ฆฌํ๊ธฐ๋ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ ํ ์๋ฏธ๊ฐ ์๋ค. OOP๋ ์ข ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฝ๋ฉํ๊ณ ์ ์ง ๊ด๋ฆฌ๋ฅผ ํ์๋ ์ด์ ๋ก ๋ฑ์ฅํ ๊ฐ๋ ์ด๋ฏ๋ก, ๋ณธ๋ง์ ๋๊ฐ ๋๋ฉด ๋ฌด์๋ฏธํ๋ค. ์์ง๋์ด๋ง์ ๊ธฐ์ ์ ์ผ๋ก ๊ฐ๋ฅํ๋๋ผ๋ ํฌ์ ์์ ๋๋น ์ฐ์ถ ํจ์จ์ ๋ฐ๋์ ๋ฐ์ ธ๋ด์ผ ํ๋ ๋ถ์ผ๋ค.
์ผ๋ฐ์ ์ธ OOP ์ธ์ด๋ฅผ ์ฐ๋ ๊ฒ์ ๋นํ๋ฉด,
C๋ฅผ C++๋ก ํ์ฅ์ํค๊ณ ์ต์ด์ C++ ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ ๋น์๋ฅด๋ค ์คํธ๋ก์ฐ์คํธ๋ฃจํ์ ๊ฒฝ์ฐ ์ฒ์ ์ปดํ์ผ๋ฌ๋ฅผ ๊ตฌํํ ๋ C++๋ฅผ C ์ธ์ด๋ก ๋ณํ์ํค๋ ์ธํฐํ๋ฆฌํฐ๋ฅผ ํตํด ๋ง๋ค์๋ค. (๋ฌผ๋ก ํ์กดํ๋ ๋๋ถ๋ถ์ ์ปดํ์ผ๋ฌ๋ C++์ C๋ก ๋ฐ๊พธ๋ ์์ ์ ํ์ง ์๊ณ ๋ฐ๋ก ์ปดํ์ผ์ ์ํํ๋ค.) ์ฆ, C๋ก ๊ฐ์ฒด์งํฅ ์ฝ๋ฉ์ด ๊ฐ๋ฅํ๋ค๋ ๋ง. ์คํธ๋ก์ฐ์คํธ๋ฃจํ๊ฐ ์ง์ ์ ์ ํ The C++ Programming Language ์ฑ ์ ํด๋น ๋ด์ฉ์ ์ธ๊ธํ๋ค.
์ด๊ฑธ ์ค์ฉ์ ์ผ๋ก ์ฐ๋ ๋ถ์ผ๋ ์๋ค. ์๋ฒ ๋๋๋ ํ์จ์ด ๊ด๋ จ ํ๋ก์ ํธ์์๋ ์ฌ๋ฌ๊ฐ์ง ์ฌ์ ์ผ๋ก (์ฌ๋ฌ ํ๋ซํผ์ ํฌํ ๊ฐ๋ฅํด์ผ ํ๋ค๊ฑฐ๋, ํด์ฒด์ธ์ ์ง์ํ์ง ์๋๋ค๊ฑฐ๋) C์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํฐ ๊ท๋ชจ์ ์์ค์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๋ฅผ ๋์ ํ์ฌ์ผ ๋ชจ๋์ด๋ ๋ ์ด์ด ์ฌ์ด์ ํผ์ก์ ํผํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ํ๋ก๊ทธ๋๋จธ๋ค์ ๊ฐ์ฒด์งํฅ์ ์ธ C์ ์ค๊ณ๋ ๋ฐ๋์ ์ตํ์ผ ํ ๋ด์ฉ์ด๋ค.
๊ทธ๋ฌ๋ ํ ๋ถ์ผ์์๋ ๊ธฐ์ ์ ํ์๊ณต๋ก ์ ๊ฐ๊น์ด ์ด์ผ๊ธฐ๋ก, ์ค์ฉ์ ์ธ ์๋ฏธ๊ฐ ์ ํ ์๋ค. "๊ฐ๋ฅํ๊ธฐ๋ ํ๋ค"๋ ๊ฒ์ผ ๋ฟ ํ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๋นํ๋ฉด ์ด๋ด ๊ฑฐ๋ฉด ๊ทธ๋ฅ ์ฐ์ง ๋ง ์์ค์ผ๋ก ๋ฌด์งํ๊ฒ ๋นํจ์จ์ ์ด๊ณ ๊ด๋ฆฌํ๊ธฐ๋ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ ํ ์๋ฏธ๊ฐ ์๋ค. OOP๋ ์ข ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฝ๋ฉํ๊ณ ์ ์ง ๊ด๋ฆฌ๋ฅผ ํ์๋ ์ด์ ๋ก ๋ฑ์ฅํ ๊ฐ๋ ์ด๋ฏ๋ก, ๋ณธ๋ง์ ๋๊ฐ ๋๋ฉด ๋ฌด์๋ฏธํ๋ค. ์์ง๋์ด๋ง์ ๊ธฐ์ ์ ์ผ๋ก ๊ฐ๋ฅํ๋๋ผ๋ ํฌ์ ์์ ๋๋น ์ฐ์ถ ํจ์จ์ ๋ฐ๋์ ๋ฐ์ ธ๋ด์ผ ํ๋ ๋ถ์ผ๋ค.
์ผ๋ฐ์ ์ธ OOP ์ธ์ด๋ฅผ ์ฐ๋ ๊ฒ์ ๋นํ๋ฉด,
- ์ ์ฐจ ์งํฅ ์ธ์ด๋ก ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ์ง์ ํ๋ ํ๋ ๊ตฌํํด์ผ ํ๋ ํ๋ก์ ํธ ์งํ ๊ธฐ๊ฐ์ด ํ๋ ๋๋ ์์ด ๋์ด๋๊ณ ,
- ์ด๊ฑธ ์ง์ ๊ตฌํํ ์ ์๋ ๊ณ ๊ธ ํ๋ก๊ทธ๋๋จธ๋ฅผ ๊ตฌํ๋๋ผ ์ธ๊ฑด๋น๊ฐ ์ถ๊ฐ ์ง์ถ๋๋ฉฐ[12],
- ๊ทธ๋ ๋ค๊ณ C์ธ์ด๋ก ๊ตฌํ๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ๊ฐ ์ง์ง๋ฐฐ๊ธฐ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๋นํด ์ ์ง/๋ณด์ํ๊ธฐ ์ฌ์ธ ๋ฆฌ๋ ๋ง๋ฌดํ๋ค.
๋ฐ๋ผ์ ์ธ๊ฑด๋น๋ฅผ ํฌํจํ ํ๋ก์ ํธ ์ ์ง/๊ด๋ฆฌ๋น๊ฐ ํญ์ฆํ๊ฒ ๋๋๋ฐ, ์์ ๊ฐ์ ์ฌํ๋ฅผ ์ฉ๋ฉํ ํด๋ผ์ด์ธํธ๋ ๊ฑฐ์ ์กด์ฌํ์ง ์๋๋ค.
ํ๋ก๊ทธ๋๋ฐ์์ C์ธ์ด๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๋ ๋๊ฐ ์ปค๋์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ด ์ฑ๋ฅ์ด ์ ๋์ ์ผ๋ก ํ์ํ ๊ฒฝ์ฐ๋ค. ํ์ง๋ง ์ด๋ฐ ๊ณณ์์๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ๋ผ์๋ฃ์ด ๋ถํ์ํ ์ค๋ฒํค๋๋ฅผ ์ฃผ๋ ํ์ ์์ฒด๋ฅผ ์ง์ํด์ผ ํ๋ค. C์ธ์ด๋ ๊ธฐ๋ณธ ์ปจ์ "ํ๋ก๊ทธ๋๋จธ๋ฅผ ๋ฏฟ๋๋ค"๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ์์ฑํ๋์ง์ ๋ฐ๋ผ ๋ฌธ์ ๊ฐ ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์์ง ์ ์๋ค. ๋ฐ๋ฉด ๊ฐ์ฒด ์งํฅ์ ๋ค์ ์ฑ๋ฅ ์ ํ๋ฅผ ๊ฐ์ํ๋๋ผ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ค์ํ ์ฌ์ง๋ฅผ ์ค์ฌ๋ณด๋ ค๋ ์์๊ฐ ๊ณณ๊ณณ์ ์ฐ์ฌํด ์๋ค. ์๊ทน๋ ์ด๋ฐ ์๊ทน์ด ์๋ ์ .
๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ ๊ตณ์ด C๋ก ๊ตฌํํด์ ์ฐ๊ธฐ๋ณด๋ค๋ Java๋ C# ๊ฐ์ ๊ณ ์์ค ์ธ์ด๋ฅผ ์ฐพ์๋ณด๋ ๊ฒ์ด ์ข๋ค. ABI(Application Binary Interface)๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด C ๊ฐ์ ์ ์์ค ์ธ์ด๋ ๋ฌด์๋ฏธํ๋ค.
7. ๊ด๋ จ ๋ฌธ์[ํธ์ง]
[1] ์ฐธ๊ณ ๋ก ์ ๋ํ๋ ์ด๋ฐ ๋ค์์คํ์ด์ค ํฌํ์ ๋ํ ๊ฐ๊ทธ์ด๊ธฐ๋ ํ์ง๋ง, ์ ๋ง๋ก ํด๋์ค/๋ฉ์๋/๋ณ์ ์ด๋ฆ์ ์ง๋ ๊ฒ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๋์จ ๊ฐ๊ทธ์ด๊ธฐ๋ ํ๋ค. ์ฉ๋๋ฅผ ์ ํํํ ์ ์๊ณ , (ํจ์์ ๊ฒฝ์ฐ๋ผ๋ฉด) ์
๋ ฅ๊ณผ ์ถ๋ ฅ๊น์ง ์ ๋ช
์ํ ์ ์์ผ๋ฉฐ, ๊ฐ๋
์ฑ์ ํด์น์ง ์์ ์ ๋๋ก ์งง๊ณ ๊ฐ๊ฒฐํ ๋ฐ๋ค๊ฐ, ๊ฑฐ๊ธฐ์ ์ค๋ณต๊น์ง ํํผํ ์ ์๋ ์ด๋ฆ์ ์ง๋ ๊ฑด ์๋นํ ์ฐฝ์์ ๊ณ ํต(โฆ)์ ์๋ฐํ๋ ์ผ์ด๋ค. ํด๋์ค/๋ฉ์๋ ์ด๋ฆ๋ง ๋๋ฐ๋ก ์ง์ด๋๋ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ ๋ฐ ์ด์์ ๋จน๊ณ ๋ค์ด๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ค์ํ ์ผ์ด๋ค. '์์์ด ๋ฐ์ด๋ค'๋ผ๋ ์ ๋ช
ํ ๊ฒฉ์ธ์ด ๊ดํ ํ๋ก๊ทธ๋๋ฐ์๋ ์ ์ฉ๋๋ ๊ฒ ์๋๋ค.
[2] "1+2" ๋ผ๋ ์์๋ ์์์ผ๋ก ๋ณด์ง ์๋๋ค. "1"์ด๋ผ๋ ๊ฐ์ฒด์ "+2"๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋๊ฒ์ผ๋ก ๋ณธ๋ค. ๊ดํธ๋ฅผ ์ ์ธํ ์ฌ์น์ฐ์ฐ์ ์์๋ ์๊ฐํ์ง ์๋๋ค. 1+2X2์ด๋ฉด, ์์๋๋ก "1"์ด๋ผ๋ ๊ฐ์ฒด์ "+2","X2"๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด์ ์ฐ์ฐํ ๋ฟ์ด๋ค. ๊ฐ์ฒด์งํฅ์ด์ง๋ง ์ฌ์น์ฐ์ฐ ๊ณฑ์
๋ถํฐ ํ๋ ์ธ์ด๋ค์ ๋ณธ๋ฐ์์ผ ํ๋ค
[3] ๋จ, C++์ ๊ฒฝ์ฐ ์ด๋ฐ ๋์์ ๋ด๋ ค๋ฉด ํด๋น ๋ฉ์๋๋ฅผ ๊ฐ์ ํจ์๋ก ์ ์ธํด์ผ ํ๋ค.
[4] ๋จ, ์ด๊ธฐ ๊ฐ๋ฐ ์๊ตฌ์ฌํญ ๋ถ์๋จ๊ณ์์ ํ์์ด ์ ๋ง๊ฑฐ๋ ์ ํํ๊ฒ ํ์ง ๋ชปํ๋ฉด ๋งํ์ด์.
[5] ์ ๋ง๋ค์ด์ง ํด๋์ค๋ ์ฌ์ฌ์ฉ์ฑ์ ๋ณด์ฅํ๋ค. Ctrl C+V์ ๊ณต์ ๋์ค์ ์์ ์ฌํญ์ด ์๊ฒผ์ ๋ ์ผ์ผํ ์ฐพ์์ ๋ฐ๊ฟ์ค์ผ ํ์ง๋ง ํด๋์ค๋ ํ ๊ณณ์์๋ง ๋ฐ๊พธ๋ฉด ๋์ด๋ค.
[6] ๊ตฌํ ๋ชฉ์ ์ ์ํด ํด๋์ค๋ฅผ ๋๋ ์ ์์ผ๋ ๊ตฌํ ๋จ์์ ๋ชฉํ๊ฐ ๋๋ ทํด์ง๋ค.
[7] ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋๋ฐ ๊ณตํต ๋์์ด ์์ด์ผ ํ๋ค๋ฉด, ๊ฒฐ๊ตญ ํ ์ ์๋๊ฑด Ctrl+C Ctrl+V ์ ๊ณต ๋ฟ์ด๋ค.(...)
[8] ์ดํด๋ฆฝ์ค์์ Alt+ Shift + S๋ฅผ ๋๋ฅด๋ฉด ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๋ฉ๋ด๊ฐ ๋์จ๋ค. IntelliJ IDEA๋ Alt+Insert๋ฅผ ๋๋ฅด๋ฉด Getter์ Setter๋ฅผ ์์ฑํ๋ ํ์
๋ฉ๋ด๊ฐ ๋ฌ๋ค.
[9] ES6๋ถํฐ ํด๋์ค ๋ฌธ๋ฒ์ด ์ถ๊ฐ๋์๋ค. ํ๋กํ ํ์
์ ๋ฌธ๋ฒ์ ์คํ์ ๋ถ๊ณผํ๋ค๋ ํ๋ ์์์ผ๋ ํ๋กํ ํ์
์ ๋นํด ํจ์ฌ ๋ ์๋ฐํ(=์ค์ํ ์ฌ์ง๋ฅผ ๋ ์ค์ด๋) ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐํด์ผ ๋๊ธฐ ๋๋ฌธ์ ๋จ์ํ ํ๊ฐํ๊ธฐ๋ ์ด๋ ต๋ค.
[10] 3.0์์ ํด๋์ค๊ฐ ์ถ๊ฐ๋์๋ค.
[11] Java๋ '๊ฐ์ฒด'๋ฅผ ๋ปํ๋ ์๋จ์ด Object๋ก ๋ช
๋ช
๋ ํด๋์ค๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์, ๊ตฌ๋ถ์ ์ํ์ฌ ์ธ์คํด์ค๋ผ๋ ํํ์ ๊ณต์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ค.
[12] ๋ค๋ฅธ ๊ณ ๊ธ ์ธ์ด์ ๋น๊ตํด C์ธ์ด๊ฐ ๋งค์ฐ ๋น์์ฐ์ ์ธ ์ธ์ด์ธ ํ๋ ์๋ค.