SWIG

SWIG
원저자데이브 비즐리(Dave Beazley)
개발자SWIG 개발자
발표일1996년 2월(30년 전)(1996-02)
안정화 버전
4.5.0 위키데이터에서 편집하기 / 2026년 8월 6일(2개월 전)(2026년 8월 6일)
저장소
프로그래밍 언어C, C++
운영 체제크로스 플랫폼
라이선스GPL
웹사이트swig.org

SWIG(Simplified Wrapper and Interface Generator)는 C나 C++로 작성된 컴퓨터 프로그램이나 라이브러리들을 루아, 펄, PHP, 파이썬, R, 루비, Tcl과 같은 스크립트 언어 및 C 샤프, 자바, 자바스크립트, Go, 모듈라-3, OCaml, 옥타브, Scilab, 스킴 등의 다른 언어들과 연결하는데 사용하는 오픈 소스 소프트웨어 도구이다.

역사

SWIG는 C와 C++로 작성되어 있으며, 1996년 2월 이후로 일반에 공개되었다. 초기 개발자이자 주요 개발자는 데이브 비즐리이며, 로스 앨러모스 국립 연구소 및 유타 대학교에서 학부생으로 일하는 동안, 또 시카고 대학교에서 교수로 활동하는 동안 SWIG를 개발하였다. 개발은 현재 윌리엄 펄튼(William Fulton) 주도의 활발한 자발자들의 그룹에 의해 지원을 받고 있다. SWIG는 GNU GPL에 의거하여 출시되고 있다.

기능

다른 프로그래밍 언어가 C나 C++로 작성된 네이티브 함수의 호출을 허용하고, 복잡한 자료형을 해당 함수에 전달하고, 메모리를 부적절하게 해제하지 못하게 하며, 언어 간에 오브젝트 클래스를 상속할 수 있게 하는 것이 목적이다. 프로그래머는 C/C++ 함수의 목록이 포함된 인터페이스 파일을 작성하여 인터프리터에 보이게 한다. SWIG는 인터페이스를 컴파일한 다음 일반 C/C++ 및 대상 프로그래밍 언어를 발생시킨다. SWIG는 단순한 인수가 포함된 함수들을 위한 변환 코드를 만든다. 즉, 복잡한 인수형의 변환 코드는 프로그래머에 의해 작성되어야 한다. SWIG 도구는 C/C++과 대상 언어 간의 접착제(glue)를 제공하는 소스 코드를 만든다. 이 언어에 의존하여 이 접착제는 2가지 형태로 나타난다:

SWIG는 네이티브 코드에 의해 해석된 함수를 호출하기 위해 사용되지는 않는다. 즉, 프로그래머가 수동으로 완성해야 한다.

예

SWIG는 선언이 C 프로그램에서 사용되는 방식과 동일한 인터페이스를 작성함으로써 단순한 C 선언들을 래핑한다. 이를테면, 다음의 인터페이스 파일이 있다고 가정한다:

%module example

%inline %{
extern double sin(double x);
extern int strcmp(const char *, const char *);
extern int Foo;
%}
#define STATUS 50
#define VERSION "1.1"

이 파일에서 sin() 및 strcmp()라는 두 개의 함수와 전역 변수 Foo, 그리고 STATUS와 VERSION이라는 두 개의 상수가 있다. SWIG가 확장 모듈을 만들 때 이 선언들은 스크립트 언어 함수, 변수, 상수로 각각 접근이 가능하다. 파이썬에서는:

>>> example.sin(3)
0.141120008
>>> example.strcmp('Dave','Mike')
-1
>>> print example.cvar.Foo
42
>>> print example.STATUS
50
>>> print example.VERSION
1.1

목적

기존의 C/C++ 프로그램에서 스크립트 엔진을 임베드하는 주된 이유는 2가지가 있다:

현존하는 인터프리터에 로드할 수 있는 동적 라이브러리를 만드는 이유가 몇 가지 있는데 다음을 포함한다:

SWIG를 이용한 프로젝트

같이 보기

참고 문헌

각주

외부 링크