์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
OOP์—์„œ ๋„˜์–ด์˜ด
1. ๊ฐœ์š”2. ์—ญ์‚ฌ
2.1. ์‹œ์ž‘๊ณผ ๋ฐœ์ „2.2. ์ง€์›ํ•˜๋Š” ์–ธ์–ด
3. ์š”์†Œ
3.1. ์บก์Аํ™”(Encapsulation)
3.1.1. ์ •๋ณด ์€๋‹‰(Information Hiding)
3.2. ์ƒ์†(Inheritance)3.3. ๋‹คํ˜•์„ฑ(Polymorphism)
4. ์›์น™5. ์žฅ๋‹จ์ 6. ๊ธฐํƒ€
6.1. ๊ต์œก์˜ ์–ด๋ ค์›€6.2. C์–ธ์–ด์™€ ๊ฐ์ฒด์ง€ํ–ฅ
7. ๊ด€๋ จ ๋ฌธ์„œ

1. ๊ฐœ์š”[ํŽธ์ง‘]

ๆผข: ๅฎข้ซ” ๆŒ‡ๅ‘ โ€” / En: Object-Oriented Programming (OOP)

ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„๋ฐฉ๋ฒ•๋ก ์ด์ž ๊ฐœ๋…์˜ ์ผ์ข….

ํ”„๋กœ๊ทธ๋žจ์„ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ์™€ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜๋งŽ์€ '๊ฐ์ฒด(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๋‹ˆ ๋– ๋“ค์–ด๋ดค์ž ํ˜„์—… ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ท€์— ๋“ค์–ด๊ฐˆ ๋ฆฌ๊ฐ€ ์—†์—ˆ๋‹ค. ๋ฌผ๋ก  ์ง€๊ธˆ์€ ๊ณ ์ฐจ ํ•จ์ˆ˜๋‚˜ ํด๋กœ์ € ๊ฐ™์€ ๊ฐœ๋…๊นŒ์ง€ ๋„์ž…ํ•ด์•ผ ํ•  ์ •๋„๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€์‹ฌ์„ ๋ณด์ด๊ณ  ์žˆ๋‹ค. ํ˜„๋Œ€์— ๋งŒ๋“ค์–ด์ง€๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ๊ทธ ์ •๋„๋กœ ๋ณต์žกํ•ด์กŒ๋‹ค.

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์ด ๋ณต์žกํ•ด์ง€๋ฉด์„œ ์ด๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌํ•  ํ•„์š”์„ฑ์ด ์ƒ๊ธด ๊ด€๊ณ„๋กœ '๋””์ž์ธ ํŒจํ„ด'์ด๋ผ๋Š” ๊ฒƒ์ด ์ƒ๊ฒผ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ˜•์‹์„ ์ •ํ•˜๋Š” ์ผ์ข…์˜ ์•ฝ์†์œผ๋กœ, ์ด๋Š” ํŠนํžˆ ํ˜‘์—…์„ ์ „์ œ๋กœ ํ•œ ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ๊ฐ•์กฐ๋˜๊ณ  ์žˆ๋‹ค.

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 ๋“ฑ.

6.1. ๊ต์œก์˜ ์–ด๋ ค์›€[ํŽธ์ง‘]

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์šธ ๋•Œ ๋งŒ๋‚˜๊ฒŒ ๋˜๋Š” ๋‚œ๊ด€์ด๊ธฐ๋„ ํ•˜๋‹ค. C๋ฅผ ๋ฐฐ์šด ๋’ค C++์„ ๋ฐฐ์šฐ๋Š” ์ƒํ™ฉ์—์„œ ํŠนํžˆ ์‹ฌํ•˜๊ธด ํ•œ๋ฐ, ๊ณง๋ฐ”๋กœ Java๋‚˜ Python์œผ๋กœ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด์ „๊นŒ์ง€ ๋ฐฐ์› ๋˜ ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์ด์—ˆ๋‹ค๋ฉด(์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ์„œ์˜ ๋ฌธ๋ฒ•), OOP๋Š” ๊ฐ€์žฅ ๋ฌธ์ œ๊ฐ€ ๋œ ์ƒ๊ธฐ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฝ”๋”ฉํ•˜๊ฒŒ๋” ํ•˜๋Š” ๊ฐ€์ด๋“œ๋ผ์ธ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(๊ถŒ์žฅ์‚ฌํ•ญ) ์ด์ œ ๋ง‰ ์•ŒํŒŒ๋ฒณ๊ณผ ๊ธฐ์ดˆ ์˜๋ฌธ๋ฒ•์„ ๋—€ ํ•™์ƒ์—๊ฒŒ ์ˆ˜์‚ฌ๋ฒ• ๋‚ด์ง€๋Š” ๋…ผ๋ฆฌ์  ์ž‘๋ฌธ์„ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ฒƒ์ด๋‹ค.

์ด ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ๋„ ์ˆ˜์ฒœ, ์ˆ˜๋งŒ ์ค„์งœ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜๋…„๊ฐ„ ์œ ์ง€๋ณด์ˆ˜ํ•  ๋•Œ๋‚˜ ๋ชธ์— ์™€๋‹ฟ์„ ํ…๋ฐ, ๊ธฐ๊ปํ•ด์•ผ ๊ณผ์ œ ์ œ์ถœํ•˜๊ณ  ๋‹ค์‹œ ์†๋Œ€์ง€ ์•Š์„ ๊ธธ์–ด์•ผ ์ˆ˜๋ฐฑ ์ค„์งœ๋ฆฌ ์ฝ”๋“œ๋‚˜ ์งœ๋ดค์„ ํ•™์ƒ๋“ค์—๊ฒŒ๋Š” ์ „ํ˜€ ์ฒด๊ฐํ•  ์ˆ˜ ์—†๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด๋“ค์€ ๊ธฐ์กด์˜ ์–ธ์–ด์— ๊ฐ์ฒด์ง€ํ–ฅ์„ ์–น์–ด๋†“์€ ํ˜•ํƒœ๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด 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 ์–ธ์–ด๋ฅผ ์“ฐ๋Š” ๊ฒƒ์— ๋น„ํ•˜๋ฉด,
  • ์ ˆ์ฐจ ์ง€ํ–ฅ ์–ธ์–ด๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ์ง์ ‘ ํ•˜๋‚˜ ํ•˜๋‚˜ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋‹ˆ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ธฐ๊ฐ„์ด ํ•œ๋„ ๋๋„ ์—†์ด ๋Š˜์–ด๋‚˜๊ณ ,
  • ์ด๊ฑธ ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ๊ตฌํ•˜๋А๋ผ ์ธ๊ฑด๋น„๊ฐ€ ์ถ”๊ฐ€ ์ง€์ถœ๋˜๋ฉฐ[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์–ธ์–ด๊ฐ€ ๋งค์šฐ ๋น„์ƒ์‚ฐ์ ์ธ ์–ธ์–ด์ธ ํƒ“๋„ ์žˆ๋‹ค.