API

다메즈마 (토론 | 기여)님의 2016년 10월 24일 (월) 21:24 판 (→‎API의 예)


Application Programming Interface 의 약자.

소개

API.png

API를 해석하자면 Application Programming Interface, 즉 프로그램을 제작할 때, 그래픽카드나 네트워크카드, 운영체제, 파일같은 프로그램 밖에 있는 것들에 접근하기 위해서 만들어진 함수와 구조체, 혹은 클래스의 집합을 말한다. API는 해당 함수나 클래스가 어떠한 동작을 하는 지를 프로그래머에게 공개한다. 이를 사양(Specification)이라고 한다. 그러면 프로그래머는 이 사양을 보고 프로그램을 제작한다. 해당 함수나 클래스에서 실제로 무슨 일을 하는지는 신경쓰지 않아도 된다.

가령 DirectX의 경우 엔비디아의 그래픽카드든, AMD의 그래픽카드든 프로그래머는 (이론상) 신경쓰지 않고 DirectX의 클래스와 함수만을 호출하여 화면에 3D모델을 그릴 수 있다. 이때 엔비디아와 AMD가 DirectX의 사양에 따라 DirectX의 실제 동작을 만드는 것, 동작을 구현(Implementation)이라고 한다.

대표적인 API는 유닉스의 POSIX 표준, 윈도우의 MFC나 Win32, DirectX, OpenGL, C++의 Standard Template Library(STL), Java API 등이 있다.

API의 예

이렇게 API의 경우 응용프로그램 제작자에게 복잡한 하드웨어나, 소프트웨어의 조작을 함수와 구조체, 혹은 클래스로 제어할 수 있게 하기 때문에 직접 조작하는 것보다 더 편해지고 쉬워지며 프로그램 제작 시간을 단축시키며 노동량을 줄인다.

그리고 프로그램에서 플러그인을 지원하기 위해서 API를 설계하는 경우가 있는데, 이 경우 플러그인이 API에 맞춰 제작되면 프로그램의 별도의 수정 없이 프로그램의 기능을 추가할 수 있다. 대표적으로 웹 브라우저인 인터넷 익스플로러, 파이어폭스, 크롬의 플러그인, 애드온이 있다.

또한 단순히 컴퓨터 안에서의 조작을 제공하는 것만이 API가 아니고 원격으로 서버에 접근하여 서버를 조작하거나, 데이터를 요구하는 것 또한 API라고 하는데 SOAP이나 RESTful같은 API을 구현할 때 가이드? 같은 존재가 있다.

API의 예를 또하나 들어 보면 C언어에서 터미널·명령프롬프트에서 Hello, World!라는 문자열을 출력하는 프로그램을 만든다고 하였을 때, printf함수를 사용하여 출력을 할 것이다. printf함수는 C언어 표준 라이브러리에서 문자열을 출력한다라는 기능이 정의되고 그것을 본 프로그래머는 printf함수의 안에서 어떻게 출력하는 지는 신경쓰지 않고 printf함수가 문자열을 출력한다는 기능을 사용하는 것이다.

API와 라이브러리, ABI, SDK, 프레임웍의 차이

API 는 프로그래밍에 사용될 것을 전제로 설계되어 소스 코드 수준에서 정의되는 인터페이스다. 이와는 달리 기계어 이진 바이너리 수준에서 정의되는 이러한 인터페이스를 Application Binary Interface(ABI)라고 한다. API 자체는 구현물인 라이브러리와 독립적인 관계에 있다.

라이브러리는 실제로 동작할 수 있는 기계어로 된 단편화된 프로그램의 모음이라는 점에서 API와 다르다. 라이브러리 자체는 API 가 없이 존재할 수 있고, 이미 구현되어 기계어로 컴파일된 프로그램에 의해 사용될 수 있다. 이미 구현된 라이브러리와 기계어로 번역된 프로그램 사이의 인터페이스 사양은 Application Binary Interface(ABI)라고 한다.

유닉스는 애초에 C언어로 개발되었기 때문에, 당연히 C언어를 위한 API가 기본으로 제공된다. MS-DOS는 그렇지 않았기 때문에, 특정 언어를 위한 API 같은 것은 존재하지 않았고, 기계어(또는 어셈블리어) 수준에서 소프트웨어 인터럽트를 제공했다. MS-DOS의 이러한 방식을 지금의 관점에서 보면, ABI를 정의한 것으로 볼 수 있다.

프로그래밍을 해서 프로그램을 작성할 때 사용되는 것을 목적으로 하는 것이 아닌, 이미 작성된 프로그램을 실행하는 것이 목적이라면 API 없이 라이브러리만 필요하게 된다. 이와 같이 API 없이 실행하는데 필요한 라이브러리만 배포되는 대표적인 경우로 "Visual C++ Runtime Library", "DirectX Runtime"이 있다.

프레임웍은 명확하게 정의된 API가 존재한다는 점에서 API와 비슷하나, 일반적인 API는 전체 제어 구조를 사용하는 쪽에서 원하는대로 진행할 수 있지만, 프레임웍에서는 그럴 수 없는 경우가 많다는 점이 다르다.