๋ธ”๋กœ๊ทธ์—์„œ ์œ ๋‹ˆํ‹ฐ ๊ฐœ๋ฐœ์ž ๋ฉด์ ‘ ์งˆ๋ฌธ ํ˜ผ์ž ๋Œ€๋‹ตํ•ด๋ดค์Œ. ๋‹ต์ง€ ์ ˆ๋Œ€ ์•ˆ๋ด„. ๋‚ด์‹ค๋ ฅ์ž„



1. virtual, abstract, interface ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ด๋ผ


virtual: C++ ์—์„œ๋Š” ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์— ์—ฐ๊ฒฐํ•ด์„œ ๋ถ€๋ชจ์™€ ์ž์‹์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ๋ณ„ํ•ด์ฃผ๋Š”๊ฑฐ์˜€๋Š”๋ฐ C#์€ ๋ชจ๋ฅด๊ฒ ์Œ


abstract: ๋ชจ๋ฅด๊ฒ ์Œ.


interface: ํด๋ž˜์Šค์˜ ํ˜•ํƒœ๋Š” ๊ฐ€์ง€๋Š”๋ฐ ๊ตฌํ˜„์€ ๊ฐ€์ง€์ง€ ์•Š์Œ. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์˜ ๋ฉ”์„œ๋“œ๋“ค์€ ๊ตฌํ˜„ํ•ด์•ผํ•จ.


2. ์ฝ”๋ฃจํ‹ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ด๋ผ


์ค‘๊ฐ„์— ๋ฉˆ์ถœ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜. yield return ์„ ํ†ตํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ๋น ์ ธ๋‚˜์˜ค๊ณ  ๋‹ค์‹œ ์‹คํ–‰์‹œ yield return ํ•œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹คํ–‰ํ•จ.ย 


์‹ฑ๊ธ€์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์‹œ์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฐ€๋Šฅํ•ด์ง.


์œ ๋‹ˆํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ์—์„œ๋งŒ ์•ˆ์ „ํ•˜๋‹ค ๋ณด๋‹ˆ ์ฝ”๋ฃจํ‹ด์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ.


3. ์ฝ”๋ฃจํ‹ด๊ณผ invoke ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ด๋ผ


invoke ๋Š” ํ•จ์ˆ˜ ์‹คํ–‰์„ ์˜ˆ์•ฝ๊ฑธ์–ด๋‘”๋‹ค๋Š” ๋А๋‚Œ. ์ฝ”๋ฃจํ‹ด๊ณผ ๋‹ฌ๋ฆฌ ํ•จ์ˆ˜ ์ค‘๊ฐ„์— ๋Š๊ณ  ๋ฆฌํ„ด์‹œํ‚ฌ ์ˆœ ์—†๋‹ค.


4. ๋ชจ๋ฐ”์ผ ๊ฒŒ์ž„์€ ์ €์‚ฌ์–‘ ๊ธฐ๊ธฐ์—์„œ ๋Œ์•„๊ฐ€๋Š”๊ฒƒ๋„ ์ค‘์š”ํ•œ๋ฐ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ํ–ˆ์—ˆ๋˜ ์ผ๋“ค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ด๋ผย 


๊ฒŒ์ž„ ๊ฐœ๋ฐœ ์•ˆํ•ด๋ด„. ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ์€ ์„œ๋ฒ„์—์„œ ๋Œ€์‹  ํ•ด์ฃผ๊ฑฐ๋‚˜ ํ™”๋ฉด์— ๋‚˜์˜ค์ง€ ์•Š๋Š” ์˜์—ญ์€ ์ž˜๋ผ๋‚ด๊ฑฐ๋‚˜, ์œ ๋‹ˆํ‹ฐ์—์„œ ๋ฏธ๋Š” ECS ๋กœ ๊ต์ฒดํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ


5. ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ด๋ผ


์šด์˜์ฒด์ œ๊ฐ€ ํ• ๋‹นํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹จ์œ„. ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฝ”๋ฃจํ‹ด์ฒ˜๋Ÿผ ์ž ๊น ์‹คํ–‰ํ–ˆ๋‹ค๊ฐ€ ๋ฉˆ์ท„๋‹ค๊ฐ€ ํ•˜๋Š” ๋“ฑ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ์ž‘์—…์„ ํ•ด์ค€๋‹ค.


6. ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ด๋ผ


์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๋” ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋ฒ„์ „. ํ”„๋กœ์„ธ์Šค๋Š” 1๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.


ํ”„๋กœ์„ธ์Šค ๋ผ๋ฆฌ๋Š” ์ž์›์„ ๊ณต์œ ํ•˜์ง€ ์•Š์ง€๋งŒ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ๋Š” ์Šคํƒ์„ ์ œ์™ธํ•œ ์ž์›์„ ๊ณต์œ ํ•œ๋‹ค.


์“ฐ๋ ˆ๋“œ๋ผ๋ฆฌ๋„ ์Šค์œ„์นญ์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ CPU์˜ ์ฝ”์–ด ๊ฐœ์ˆ˜๋ณด๋‹ค ํ•„์š” ์ด์ƒ์œผ๋กœ ๋งŽ์ด ์ƒ์„ฑํ•ด๋‘๋ฉด ์˜คํžˆ๋ ค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์ง„๋‹ค.


7. ์Šค๋ ˆ๋“œ์™€ ์ฝ”๋ฃจํ‹ด์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด๋ด๋ผ


์ฝ”๋ฃจํ‹ด์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์Šค์œ„์นญ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋А๋‚Œ์ด๋ผ๋ฉด ์Šค๋ ˆ๋“œ๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์•Œ์•„์„œ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.


๋ฉ€ํ‹ฐ์ฝ”์–ด ํ™˜๊ฒฝ์—์„œ๋„ ์ฝ”๋ฃจํ‹ด์€ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šค์œ„์นญ์„ ํ•ด์ฃผ์ง€๋งŒ ์Šค๋ ˆ๋“œ๋Š” ์Šค์œ„์นญ ์—†์ด ๊ฐ๊ฐ์˜ ์ฝ”์–ด์— ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—… ํ•  ์ˆ˜ ์žˆ๋‹ค.


8. C# ๊ณผ C++ ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ๋ญ”๊ฐ€


C#์€ ๊ธฐ๋ณธ์ ์œผ๋กœ OOP ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ํฉ์–ด์ ธ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. C++ ์€ ๋‚ด๊ฐ€ ๊ด€๋ฆฌํ•ด์•ผํ•œ๋‹ค.


9. GC์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ด๋ผ.


์•„๊นŒ C#์€ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๊ด€๋ฆฌ๋œ๋‹ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ ์ด ์—ฐ๊ฒฐ์ด ๋Š์–ด์ ธ ์‹ค์ œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ์„ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค.


์ด๋Ÿฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜๊ฑฐํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.


10. GC ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ํ• ์ˆ˜์žˆ๋Š” ์ผ์€ ๋ฌด์—‡์ด ์žˆ์„์ง€ ์„ค๋ช…ํ•ด๋ด๋ผ.


using ์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•œ๋‹ค.ย 


์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•œ๋‹ค.


์ž์ฃผ์“ฐ๋Š” ๊ฐ์ฒด๋Š” ์‚ฌ์šฉํ• ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑํ•˜์ง€๋ง๊ณ  ํšŒ์ˆ˜ํ•ด์„œ ์žฌ์‚ฌ์šฉํ•ด๋ผ


11. GC์˜ ์žฅ์ ‘๊ณผ ๋‹จ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ด๋ผ.


GC๊ฐ€ ์—†๋‹ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ดย 


delete ๋ฅผ ํ•ด์ค˜์•ผ ํ• ์ง€, ๊ฐ’์ด ์•„๋‹ˆ๋ผ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋„˜๊ฒจ์„œ ์˜๋„์น˜ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๋ฆญ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์„์ง€๋ฅผ ๋Š์ž„์—†์ด ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.


๊ทธ ๊ณผ์ •์„ ์ƒ๋žตํ•ด์ค€๋‹ค๋Š”๊ฒŒ ๊ฐ€์žฅ ํฐ ์žฅ์ ์ธ๊ฒƒ ๊ฐ™๋‹ค.


ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋Œ€์‹  GC ์„ฑ๋Šฅ ๊ด€๋ฆฌ๋ผ๋Š”๊ฒŒ ์ƒ๊ฒจ๋ฒ„๋ ธ๋‹ค.



์ด๋ก  ใ…ใ…Œใ…Š?