๊ฑฐ์˜ ๋ชจ๋“  ์šด์˜์ฒด์ œ๋Š” C๋กœ ์ž‘์„ฑ๋จ


C๋Š” ๋ฉ”๋ชจ๋ฆฌ ์—ฐ์‚ฐ์ด ํŽธ๋ฆฌํ•˜๊ณ  ์„ฑ๋Šฅ๋„ ๊ดœ์ฐฎ์•„์„œ ์—ฐ๊ตฌ์šฉ์ด ์•„๋‹Œ ์ƒ์šฉ ์šด์˜์ฒด์ œ๋Š” ๊ฑฐ์˜ 100% C๋กœ

์ž‘์„ฑ๋œ๋‹ค. ๋ฌผ๋ก  ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ๋“ค์€ C++ ๋กœ๋„ ์ž‘์„ฑ๋˜์ง€๋งŒ ์ฝ”์–ด๋Š” ๋ชจ๋‘ C๋ผ๊ณ 

์ƒ๊ฐํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. ์˜ˆ์ „ Mac OS๋Š” PASCAL๋กœ ์ž‘์„ฑ๋˜๊ธฐ๋„ ํ–ˆ๋Š”๋ฐ(์ง€๊ธˆ์€ C๋กœ ์žฌ์ž‘์„ฑ๋จ)

PASCAL๋„ ๋ฌธ๋ฒ•๋งŒ ์กฐ๊ธˆ ๋‹ค๋ฅผ๋ฟ ๊ฑฐ์˜ C์™€ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด๋œ๋‹ค.


FFI (foreign function interface)


FFI ๋Š” ์–ด๋–ค ์–ธ์–ด A ์—์„œ ๋‹ค๋ฅธ ์–ธ์–ด B๋ฅผ ํ˜ธ์ถœํ• ์ˆ˜ ์žˆ๊ฒŒ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ธ๋ฐ

ํ˜„์‹ค์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„ B๊ฐ€ C์–ธ์–ด๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ณ  ์ด๊ฒƒ์€ ์–ธ์–ด ์ƒ์กด์— ํ•„์ˆ˜ ์ ์ธ๊ฒƒ์ด๋‹ค.


์ƒˆ๋กœ์šด ์–ธ์–ด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ์šฐ์„ ์ ์œผ๋กœ ๊ฐ€์žฅ ๋จผ์ €์ž‘์—…๋˜๋Š” ๊ฒƒ์ด C์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ• ์ˆ˜ ์žˆ๋„๋ก

์–ธ์–ด์—์„œ ์ง€์›ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. ์ด์œ ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ž€ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๊ณ„์‚ฐํ•˜๊ณ  ์ถœ๋ ฅ์„ ํ•˜๋Š” ๊ฒƒ์ด๊ณ 

(๊ฒŒ์ž„๋„ ์œ ์ €์˜ ํ‚ค๋ณด๋“œ๋‚˜ ๋งˆ์šฐ์Šค ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋น„๋””์˜ค๋ฉ”๋ชจ๋ฆฌ๋กœ ์ถœ๋ ฅํ•˜๋Š”๊ฒƒ)

์ด๋Ÿฌํ•œ ์ž…์ถœ๋ ฅ์ด ๋ชจ๋‘ ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋Š”๋ฐ

์ด๋“ค ํ•จ์ˆ˜๊ฐ€ ๋ชจ๋‘ C๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ซ๋˜ ์ข‹๋˜ ์ƒˆ๋กœ์šด ์–ธ์–ด๋Š” ๋ฌด์กฐ๊ฑด C ์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“ˆ์„

ํ˜ธ์ถœํ• ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.


์ œํ’ˆ์˜ ๊ฒฝ์Ÿ๋ ฅ


์ œํ’ˆ์˜ ๊ฒฝ์Ÿ๋ ฅ์€ ์ œํ’ˆ์˜ ํ’ˆ์งˆ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ๋งŽ์€ ๊ฒฝ์šฐ ํƒ€์ด๋ฐ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ์šฐ์„  ์‹œ์žฅ์— ๋จผ์ € ๋นจ๋ฆฌ

๋‚ด๋†“์•„ ์„ ์ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฐ€๋ น ์œˆ๋„์šฐ์—์„œ ๊ฒŒ์ž„๊ฐœ๋ฐœ์— ์—„์ฒญ๋‚˜๊ฒŒ ํšจ๊ณผ์ ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๊ณ 

๊ฐ€์ •ํ•˜์ž. C๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์œ ๋‹ˆํ‹ฐ๊ฐ™์€ ์—”์ง„์ด ์ด๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค.

๋งŒ์•ฝ ๋‚ด๊ฐ€ C์–ธ์–ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด (C๋กœ ๋ณต์žกํ•œ ๋กœ์ง์„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ• ์ˆ˜ ์žˆ๋Š” ์—ญ๋Ÿ‰ ๊นŒ์ง€๋Š” ํ•„์š”์—†๋‹ค)

์ด๊ธฐ๋Šฅ(ํ•จ์ˆ˜)์„ ์ž๋ฐ”๋‚˜ C#์—์„œ ์ง์ ‘ ํ˜ธ์ถœํ• ์ˆ˜ ์žˆ๊ณ  ๋‚จ๋“ค๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ œํ’ˆ์„ ์ถœ์‹œ ํ• ์ˆ˜ ์žˆ๋‹ค.


๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ ์ผ๋ณธ์—์„œ ์–ด๋งˆ์–ด๋งˆํ•˜๊ฒŒ ๋ˆ์„ ํˆฌ์žํ•ด์„œ ์ƒˆ๋กœ์šด ์ฐจ์„ธ๋Œ€ ๊ฒŒ์ž„๊ธฐ๋ฅผ ๊ฐœ๋ฐœํ–ˆ๊ณ  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์—„์ฒญํ•œ ํ˜œํƒ์„

์ฃผ๋ฉด์„œ ๊ฐœ๋ฐœ์„ ์žฅ๋ คํ•˜๋Š”๋ฐ ์œ ๋‹ˆํ‹ฐ๊ฐ€ ์•„์ง ์ด ๊ฒŒ์ž„๊ธฐ๋ฅผ ์ง€์›์„ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด๋Ÿฐ๊ฒฝ์šฐ C๋ฅผ ์ดํ•ดํ•˜๋Š”

๊ฐœ๋ฐœ์ž๋Š” ์ง์ ‘ ์œ ๋‹ˆํ‹ฐ ๋นŒ๋“œํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด์„œ ์ œํ’ˆ์ถœ์‹œ๋ฅผ ํ• ์ˆ˜ ์žˆ๋‹ค.

์•„์ดํฐ ์ดˆ๊ธฐ์— ๋งŽ์€ ๊ฒŒ์ž„๋“ค์ด SDL + C/C++ ๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ณ  ์ดˆ๊ธฐ ์‹œ์žฅ ๊ณต๋žต์œผ๋กœ ๋ˆ์„ ๋งŽ์ด ๋ฒˆ๊ฒƒ์€ ๋ˆ„๊ตฌ๋‚˜ ์•„๋Š” ์‚ฌ์‹ค์ด๋‹ค.


์œ ๋‹ˆํ‹ฐ๋กœ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์„ ํ• ๊ฑด๋ฐ C ๋ฅผ ์•Œ์•„์•ผ ํ•˜๋Š”๊ฐ€?


์•„๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์•Œ๋ฉด ์ข‹๋‹ค. ์•Œ๋ฉด ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœํญ์ด ๋„“์–ด ์ง„๋‹ค. ๋งˆ์น˜ ๋ˆ์„ ๋ฒŒ๊ธฐ ์œ„ํ•ด ์˜์–ด๊ฐ€ ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ

์˜์–ด๋ฅผ ํ• ์ค„ ์•Œ๋ฉด ํ™œ๋™ ํญ์ด ๋„“์–ด ์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์ˆ  ์Šต๋“์— ์œ ๋ฆฌํ•˜๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” C# ๊ฐ™์€ ๊ณ ๊ธ‰์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

๋กœ์šฐ ๋ ˆ๋ฒจ์„ ์ž˜๋ชฐ๋ผ๋„ ๋ ๊ฑฐ ๊ฐ™์ง€๋งŒ ๊ทธ๊ฒƒ์€ ์ด์ƒ์ ์ธ ๊ฒƒ์ด๊ณ  ๋ชจ๋“  ํ™˜๊ฒฝ์ด ํ•ญ์ƒ ์ด์ƒ์ ์ธ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋Š”๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์„œ์ ๋งŒ ๋ด๋„ ๊ทธ๋ ‡๋‹ค. ํ•ญ์ƒ ๋‚ด ์ˆ˜์ค€์— ์ ํ•ฉํ•œ ๊ธฐ์ˆ ์„œ์ ์ด ์ถœํŒ๋˜๋Š”๊ฐ€? ๊ทธ๋ฆฌ๊ณ  ๋ฒˆ์—ญ๋ณธ์„ ๋ณด๋ฉด ๋˜๋Š”๋ฐ ์™œ ์šฐ๋ฆฌ๋Š” ์›์„œ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด

์˜์–ด๋ฅผ ๊ณต๋ถ€ํ•˜๋‚˜? ๊ทธ ์ด์œ ๋Š” ํ•„์š”ํ•œ ์„œ์ ์ด ํ•ญ์ƒ ๋ฒˆ์—ญ๋˜์„œ ์ถœํŒ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋น„์Šทํ•˜๊ฒŒ ๋กœ์šฐ ๋ ˆ๋ฒจ์„ ์–ด๋А์ •๋„ ์ดํ•ดํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์Šต๋“์ด๋‚˜ ๊ฐœ๋ฐœ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜๊ธฐ์— ์œ ๋ฆฌํ•˜๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์•„๋Š” ๋งŒํผ๋งŒ ์‹œ๋„ํ• ์ˆ˜์žˆ๋‹ค.


๋ฏธ์•ˆํ•˜๋‹ค. ์ˆ ๋จน๊ณ  ์ž๊ธฐ์ „์— ์ง€๋ž„ํ•œ๋ฒˆ ํ•ด๋ดค๋‹ค. ์‚ฌ์‹ค C ๊ณต๋ถ€ํ•  ํ•„์š” ์—†๋‹ค.