์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
1. ๊ฐœ์š”2. ์ฃผ์š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค(์•ŒํŒŒ๋ฒณ ์ˆœ)์˜ FFI3. ๊ด€๋ จ ๊ฐœ๋…

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

<Foreign Function Interface>์˜ ์•ž๋จธ๋ฆฌ ์•ŒํŒŒ๋ฒณ์„ ๋”ด ์•ฝ์ž๋‹ค. ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(์ดํ•˜ A)์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(์ดํ•˜ B)์˜ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งํ•œ๋‹ค. A๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ์ผ์ด B๋กœ๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ, A๋กœ๋Š” ๋น„ํšจ์œจ์ ์ธ ์ผ์ด B๋กœ๋Š” ํšจ์œจ์ ์ธ ๊ฒฝ์šฐ, B๋กœ ์“ฐ์—ฌ์ง„ ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ A๋กœ์˜ ๋ฒˆ์—ญ์—†์ด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ๋“ฑ์—์„œ A๋Š” FFI๋ฅผ ํ†ตํ•ด B์˜ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. C ์–ธ์–ด๋Š” ์—ญ์‚ฌ๊ฐ€ ์˜ค๋ž˜ ๋˜์—ˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ ๋™์•ˆ ์ถ•์ ๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค(code base)๊ฐ€ ํ’๋ถ€ํ•˜๋ฏ€๋กœ ๋งŽ์€ ์–ธ์–ด๋“ค์ด C ์–ธ์–ด๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ FFI๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

2. ์ฃผ์š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค(์•ŒํŒŒ๋ฒณ ์ˆœ)์˜ FFI[ํŽธ์ง‘]

  • C++ : C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ C++ ์ฝ”๋“œ ๋‚ด์—์„œ ํŠน๋ณ„ํ•œ ์ฒ˜๋ฆฌ ์—†์ด ์ง์ ‘ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๋‹ค. C์—์„œ C++ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด extern "C"๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • D : C์™€ C++(์ผ๋ถ€), Object C(์ผ๋ถ€)๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Go : Go ์†Œ์Šค ์ฝ”๋“œ์— C ์ฝ”๋“œ๋ฅผ ์ฃผ์„์˜ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๊ณ , Go๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” "C"๋ผ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ž„ํฌํŠธ(import)ํ•ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ .
  • Haskell : ํ•˜์Šค์ผˆ๋„ FFI๋ฅผ ์ง€์›ํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ .
  • Java : JNI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ C ์–ธ์–ด์™€ ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Scala : JVM ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ Java์™€ ๊ฐ™๋‹ค

3. ๊ด€๋ จ ๊ฐœ๋…[ํŽธ์ง‘]

  • API - ์†Œ์Šค์ฝ”๋“œ ์‚ฌ์ด์˜ ์ธํ„ฐํŽ˜์ด์Šค
  • ABI - ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค
  • ํ˜ธ์ถœ๊ทœ์•ฝ - ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ ๊ฐ„์˜ ํ˜ธ์ถœ์„ ์œ„ํ•œ ๊ทœ์น™
  • Name Mangling(Name Decoration)
  • RPC - ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ
  • SWIG(Simplified Wrapper and Interface Generator) - ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด.
  • Transcompiler - ํ•œ ์–ธ์–ด์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๊ฒƒ์œผ๋กœ ๋˜๋Š” ๋™์ผ ์–ธ์–ด์˜ ๊ตฌ(่ˆŠ)๋ฒ„์ „์˜ ์ฝ”๋“œ๋ฅผ ์‹ (ๆ–ฐ)๋ฒ„์ „์˜ ๊ฒƒ์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ (ex. babel javascript, scala.js)