{{위키데이터 속성 추적}}
컴퓨팅에서 '''바인딩'''(binding)은 [[프로그래밍 언어]]가 해당 언어에 네이티브하지 않는 외부 [[라이브러리 (컴퓨팅)|라이브러리]]나 [[운영 체제]] 서비스를 사용할 수 있도록 만들어주는 [[글루 코드]]를 제공하는 [[API]]이다.

바인딩은 일반적으로 하나를 다른 것으로 매핑시키는 것을 의미한다. [[라이브러리 (컴퓨팅)|소프트웨어 라이브러리]] 문맥에서 바인딩은 두 프로그래밍 언어를 이어주는 [[래퍼 라이브러리]]이며 여기서 한 언어로 작성된 라이브러리는 다른 언어에서 사용이 가능하게 된다.<ref>{{웹 인용|url=http://www.cairographics.org/manual/language-bindings.html |title=Appendix A. Creating a language binding for cairo |publisher=Cairographics.org |date= |access-date=2014-04-02}}</ref>  수많은 소프트웨어 라이브러리들은 [[C (프로그래밍 언어)|C]]나 [[C++]]과 같은 [[시스템 프로그래밍 언어]]로 작성된다. [[자바 (프로그래밍 언어)|자바]], [[커먼 리스프]], [[스킴]], [[파이썬]], [[루아]] 등 일반적으로 더 고급의 다른 언어에서 해당 라이브러리들을 사용하려면 라이브러리에 대한 바인딩은 해당 언어에서 생성되어야 하며, 필요한 수정의 정도에 따라 잠재적으로는 해당 언어 코드의 [[컴파일러|재컴파일]]이 요구될 수 있다.<ref>{{웹 인용 |url=http://www.acm.org/tsc/apis.html |title=Standards, APIs, Interfaces and Bindings |publisher=Acm.org |date= |access-date=2014-04-02 |보존url=https://web.archive.org/web/20150116081559/http://www.acm.org/tsc/apis.html |보존날짜=2015-01-16 |url-status=dead }}</ref> 그러나 대부분의 언어들은 파이썬과 [[OCaml]]의 <code>ctypes</code>, [[임베더블 커먼 리스프]]의 <code>cffi</code>와 <code>uffi</code> 등의 [[외부 함수 인터페이스]]를 제공한다.<ref>{{웹 인용|url=https://docs.python.org/2/library/ctypes.html |title=15.17. ctypes – A foreign function library for Python |work=Python v2.7.6 documentation |publisher=Docs.python.org |date= |access-date=2014-04-02}}</ref><ref>{{웹 인용 |url= https://realworldocaml.org/v1/en/html/foreign-function-interface.html |title= Real Worl OCaml, Chapter 19. Foreign Function Interface |year= 2013 |access-date= 2015-07-19 |last= Hickey |first= Jason |last2= Madhavapeddy |first2= Anil |last3= Minsky |first3= Yaron |website= realworldocaml.org |archive-date= 2015-07-18 |archive-url= https://web.archive.org/web/20150718235806/https://realworldocaml.org/v1/en/html/foreign-function-interface.html }}</ref><ref>{{웹 인용|url=http://common-lisp.net/project/cffi/manual/html_node/Introduction.html#Introduction |title=Introduction – CFFI User Manual |publisher=Common-lisp.net |date= |access-date=2014-04-02}}</ref>

예를 들어, 파이썬 바인딩은 일부 목적으로 작성된 현존하는 C 라이브러리를 파이썬에 사용하기 위해 쓰인다. 다른 예로 C로 작성된 <code>libsvn</code>을 통해 [[서브버전]] [[소프트웨어 저장소]]로 접근하기 위한 API를 제공할 수 있다. 자바 코드 안에서 서브버전에 접근하려면 설치된 <code>libsvn</code>에 의존하는 <code>libsvnjavahl</code>를 사용할 수 있으며 언어 자바와 <code>libsvn</code> 간 다리 역할을 함으로써 해당 작업을 수행하기 위해 <code>libsvn</code>로부터 함수를 호출하는 API를 제공하게 된다.<ref>{{웹 인용 |url=http://subclipse.tigris.org/wiki/JavaHL |title=Subversion JavaHL FAQ |publisher=Subclipse.tigris.org |date=2013-06-18 |access-date=2014-04-02 |보존url=https://web.archive.org/web/20141227185536/http://subclipse.tigris.org/wiki/JavaHL |보존날짜=2014-12-27 |url-status=dead }}</ref>

라이브러리 바인딩을 생성하는 주된 동기에는 여러 언어의 라이브러리로 라이브러리 하나를 다시 구현하는 일을 줄이기 위한 [[코드 재사용|소프트웨어 재사용]], 일부 고급 언어에서 일부 [[알고리즘]]을 효율적으로 구현하는데 따르는 어려움이 포함된다.

== 같이 보기 ==
* [[API]]
* [[응용 프로그램 이진 인터페이스]] (ABI)
* [[호출 규약]]
* [[임베디드 SQL]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* [http://www.open-std.org/JTC1/SC22/WG11/ JTC1/SC22/WG11 - Binding Techniques], an ISO standard for language bindings
* [https://stackoverflow.com/questions/25865/what-is-a-language-binding What is a language binding?]

{{응용 프로그램 이진 인터페이스}}

[[분류:컴파일러]]
[[분류:라이브러리]]