์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. ๊ฐ์[ํธ์ง]
<Foreign Function Interface>์ ์๋จธ๋ฆฌ ์ํ๋ฒณ์ ๋ด ์ฝ์๋ค. ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(์ดํ A)์์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(์ดํ B)์ ์ฝ๋๋ฅผ ํธ์ถํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋งํ๋ค. A๋ก๋ ๋ถ๊ฐ๋ฅํ ์ผ์ด B๋ก๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ, A๋ก๋ ๋นํจ์จ์ ์ธ ์ผ์ด B๋ก๋ ํจ์จ์ ์ธ ๊ฒฝ์ฐ, B๋ก ์ฐ์ฌ์ง ์ฝ๋๊ฐ ์ด๋ฏธ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ A๋ก์ ๋ฒ์ญ์์ด ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ ๋ฑ์์ A๋ FFI๋ฅผ ํตํด B์ ์ฝ๋๋ฅผ ์ด์ฉํ ์ ์๋ค. C ์ธ์ด๋ ์ญ์ฌ๊ฐ ์ค๋ ๋์์ ๋ฟ๋ง ์๋๋ผ ๊ทธ ๋์ ์ถ์ ๋ ์ฝ๋๋ฒ ์ด์ค(code base)๊ฐ ํ๋ถํ๋ฏ๋ก ๋ง์ ์ธ์ด๋ค์ด C ์ธ์ด๋ก ์์ฑํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ FFI๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
2. ์ฃผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค(์ํ๋ฒณ ์)์ FFI[ํธ์ง]
3. ๊ด๋ จ ๊ฐ๋ [ํธ์ง]
- API - ์์ค์ฝ๋ ์ฌ์ด์ ์ธํฐํ์ด์ค
- ABI - ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ ์ฝ๋ ๊ฐ์ ์ธํฐํ์ด์ค
- ํธ์ถ๊ท์ฝ - ๋ฐ์ด๋๋ฆฌ ์ฝ๋ ๊ฐ์ ํธ์ถ์ ์ํ ๊ท์น
- Name Mangling(Name Decoration)
- RPC - ์๊ฒฉ ํ๋ก์์ ํธ์ถ
- SWIG(Simplified Wrapper and Interface Generator) - ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํด ์ฃผ๋ ์คํ์์ค ์ํํธ์จ์ด.
- Transcompiler - ํ ์ธ์ด์ ์์ค์ฝ๋๋ฅผ ๋ค๋ฅธ ์ธ์ด์ ๊ฒ์ผ๋ก ๋๋ ๋์ผ ์ธ์ด์ ๊ตฌ(่)๋ฒ์ ์ ์ฝ๋๋ฅผ ์ (ๆฐ)๋ฒ์ ์ ๊ฒ์ผ๋ก ๋ณํํด ์ฃผ๋ ์ปดํ์ผ๋ฌ (ex. babel javascript, scala.js)