래퍼 라이브러리
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
래퍼 라이브러리는 다른 프로그래밍 언어나 환경에서 사용하기 위해 기존 라이브러리를 감싸는 역할을 한다. 구현 방식은 환경과 목적에 따라 다르며, 크로스 랭귀지/런타임 상호운용성을 고려하는 경우가 있다. C 인터페이스를 C++로 감싸는 예시처럼, 기존 인터페이스의 사용성을 개선하거나 자원 관리의 안정성을 높이는 데 사용될 수 있다. 자바 네이티브 인터페이스(JNI)와 같은 외래 함수 인터페이스를 통해 다른 언어의 라이브러리를 호출할 수 있게 하며, WIN32를 위한 Pthreads, 파이썬을 위한 OpenGL 바인딩 등이 널리 사용되는 래퍼 라이브러리 예시다.
더 읽어볼만한 페이지
- 라이브러리 - 바이너리 재컴파일러
- 라이브러리 - 동적 링크 라이브러리
동적 링크 라이브러리(DLL)는 윈도우 운영체제에서 프로그램 실행 시 필요한 코드와 데이터를 제공하며, 여러 프로그램에서 공유되어 메모리 효율성을 높이고 모듈성을 향상시키는 라이브러리 형식이다.
래퍼 라이브러리 |
---|
2. 구조와 구현
래퍼 라이브러리는 사용 환경이나 목적에 따라 구현 방식이 매우 다양하다. 특히, 크로스 랭귀지/런타임 상호운용성이 고려될 때 더욱 그렇다.
몇몇 래퍼 라이브러리들은 클라이언트 애플리케이션과 호환되지 않는 기술을 사용해 쓰여진 라이브러리 사이의 다리 역할을 한다. 예를 들어 자바 애플리케이션에서 시스템 호출을 실행해야 할 수 있다. 그러나 시스템 호출은 일반적으로 C 라이브러리 함수로 제공된다. 이 문제를 해결하기 위해 자바는 이러한 시스템 호출을 자바 애플리케이션에서 호출할 수 있게 래퍼 라이브러리들을 구현하였다.
이를 위해 자바와 같은 언어들은 외부 함수 인터페이스라는 메커니즘을 제공한다. 이러한 예시는 다음과 같다.
- 자바 네이티브 인터페이스 (JNI)
- 자바 네이티브 액세스 (JNA)
- [https://docs.python.org/library/ctypes.html 파이썬을 위한 외부 함수 라이브러리]
- SWIG (단순화된 래퍼와 인터페이스 생성기)
2. 1. 예시
다음은 일반적인 래퍼 라이브러리 구현 예시다. 이 예시에서 C++ 인터페이스는 C 인터페이스를 감싸는 "래퍼"로 동작한다. 원래 C 인터페이스는 오류가 발생하기 쉬운데, 특히 라이브러리 사용자가 이미 잠긴 뮤텍스를 잠금 해제하는 것을 잊는 경우에 그렇다. 새로운 인터페이스는 RAII를 활용하여 Mutex가 결국 잠금 해제되고 pthread_mutext_t 객체가 자동으로 해제되도록 보장한다.위 코드는 [https://web.archive.org/web/20160513055556/http://www.boost.org/doc/libs/1_38_0/doc/html/thread.html boost::thread] 라이브러리의 boost::scoped_lock 및 boost::mutex 구현을 모방한 것이다.
2. 1. 1. C 인터페이스
다음은 일반적인 래퍼 라이브러리 구현 예시다. 이 예시에서 C++(C++) 인터페이스는 C 인터페이스를 "래핑"하는 역할을 한다.```c
int pthread_mutex_init(pthread_mutex_t * mutex , pthread_mutexattr_t * attr);
int pthread_mutex_destroy (pthread_mutex_t * mutex);
int pthread_mutex_lock (pthread_mutex_t * mutex );
int pthread_mutex_unlock (pthread_mutex_t * mutex );
2. 1. 2. C++ 래퍼
C++ 인터페이스는 C 언어 인터페이스를 감싸는 "래퍼"로서 동작한다. 다음은 C++ 래퍼 클래스 예시이다.```cpp
class Mutex
{
pthread_mutex_t mutex;
public:
Mutex()
{
pthread_mutex_init(&mutex, 0);
}
~Mutex()
{
pthread_mutex_destroy(&mutex);
}
private:
friend class Lock;
void lock()
{
pthread_mutex_lock(&mutex);
}
void unlock()
{
pthread_mutex_unlock(&mutex);
}
};
class Lock
{
Mutex& mutex;
public:
Lock(Mutex& mutex):mutex(mutex){mutex.lock();}
~Lock(){mutex.unlock();}
};
```
이 코드는 RAII 기법을 활용하여, `Mutex` 객체가 해제될 때 `pthread_mutex_t` 객체가 자동으로 해제되도록 보장한다. 이는 라이브러리 사용자가 뮤텍스 잠금 해제를 잊어버리는 오류를 방지한다.
위 코드는 [https://web.archive.org/web/20160513055556/http://www.boost.org/doc/libs/1_38_0/doc/html/thread.html boost::thread] 라이브러리의 `boost::scoped_lock` 및 `boost::mutex` 구현을 모방한 것이다.
2. 2. 드라이버 래퍼
driver wrapper영어에 대해서는 드라이버 래퍼 문서를 참고하라.3. 크로스 랭귀지/런타임 상호운용성
몇몇 래퍼 라이브러리들은 클라이언트 애플리케이션과 호환되지 않는 기술을 사용해 쓰여진 라이브러리 사이의 다리 역할을 위해 존재한다. 예를 들면 자바 애플리케이션은 시스템 호출을 실행할 필요가 있을 것이다. 그러나 시스템 호출은 일반적으로 C 라이브러리 함수들로 표출된다. 이 문제를 풀기 위해 자바는 이러한 시스템 호출들을 자바 애플리케이션에서 호출할 수 있게 래퍼 라이브러리들을 구현하였다.
이 목적을 위해 자바 같은 언어들은 외부 함수 인터페이스라고 불리는 메커니즘을 제공한다. 이러한 예시는 다음과 같다:
- 자바 네이티브 인터페이스 (JNI)
- 자바 네이티브 액세스 (JNA)
- [https://docs.python.org/library/ctypes.html 파이썬을 위한 외부 함수 라이브러리]
- SWIG (단순화된 래퍼와 인터페이스 생성기)
4. 존재하는 래퍼 라이브러리들
다음은 현존하는 래퍼 라이브러리들의 예시이다.
- https://sourceware.org/pthreads-win32/ WIN32를 위한 Pthreads
- https://pyopengl.sourceforge.net/ 파이썬을 위한 OpenGL 바인딩
- https://web.archive.org/web/20160503093805/http://tangentsoft.net/mysql++/ MySQL++
- https://code.google.com/p/javacv/ JavaCV
- 와인D3D
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com