래퍼 라이브러리
Wrapper library래퍼 라이브러리(또는 라이브러리 래퍼)는 라이브러리의 기존 인터페이스를 호환되는 인터페이스로 변환하는 코드(심)의 얇은 레이어로 구성됩니다.여기에는 다음과 같은 몇 가지 이유가 있습니다.
- 설계가 불량하거나 복잡한 인터페이스를 개량하기 위해
- 호환되지 않는 데이터 형식과 같이 코드가 함께 작동하도록 허용
- 크로스 언어 및/또는 런타임 상호 운용성 실현
래퍼 라이브러리는 어댑터, 파사드를 사용하여 구현할 수 있습니다.또, 보다 적은 범위로 프록시 설계 패턴을 사용할 수도 있습니다.
구조 및 구현
래퍼 라이브러리가 구현되는 구체적인 방법은 래퍼 라이브러리가 작성되는 환경 및 래퍼 라이브러리가 대처하려는 시나리오에 따라 매우 고유합니다.이는 특히 크로스 언어/런타임 상호 운용성을 고려하는 경우에 해당됩니다.
예
다음은 일반적인 래퍼 라이브러리 구현의 일반적인 예를 보여 줍니다.이 예에서는, C++ 인터페이스는, C언어 인터페이스 주위의 「워퍼」로서 기능합니다.
C 인터페이스
인트 pthread_syslogx_init(pthread_syslogx_t * 뮤텍스 , pthread_subxattr_t * 특성); 인트 pthread_syslogx_syslog (pthread_syslogx_t * 뮤텍스); 인트 pthread_syslogx_lock (pthread_syslogx_t * 뮤텍스 ); 인트 pthread_syslogx_syslog (pthread_syslogx_t * 뮤텍스 );
C++ 래퍼
학급 뮤텍스 { pthread_syslogx_t 뮤텍스; 일반의: 뮤텍스() { pthread_syslogx_init(&뮤텍스, 0); } ~뮤텍스() { pthread_syslogx_syslog(&뮤텍스); } 사적인: 친구. 학급 잠그다; 무효 잠그다() { pthread_syslogx_lock(&뮤텍스); } 무효 언락() { pthread_syslogx_syslog(&뮤텍스); } }; 학급 잠그다 { 사적인: 뮤텍스 &뮤텍스; 일반의: 잠그다(뮤텍스 &뮤텍스): 뮤텍스{뮤텍스} { 뮤텍스.잠그다(); } ~잠그다() { 뮤텍스.언락(); } };
원래 C 인터페이스는 특히 라이브러리의 사용자가 이미 잠긴 뮤텍스의 잠금을 해제하는 것을 잊어버린 경우 오류가 발생하기 쉬운 것으로 간주됩니다.새로운 인터페이스는 새로운 환경에서 RAII(Resource Acquisition is Initialization)를 효과적으로 활용합니다.Mutex 및 Lock 클래스는 Mutex가 최종적으로 잠금 해제되고 pthread_mutex_t 객체가 자동으로 해제되도록 합니다.
위의 코드는 boost::scopeed_lock 및 boost::mutex의 구현을 거의 모방하고 있습니다.이것들은 boost::thread 라이브러리의 일부입니다.
드라이버 래퍼
언어 간/런타임 상호 운용성
일부 래퍼 라이브러리는 클라이언트 응용 프로그램과 호환되지 않는 기술을 사용하여 작성된 라이브러리 간의 브리지 역할을 합니다.예를 들어 Java 어플리케이션에서는 시스템콜을 실행해야 하는 경우가 있습니다.그러나 시스템 콜은 일반적으로 C 라이브러리 함수로 노출됩니다.이 문제를 해결하기 위해 Java는 이러한 시스템 호출을 Java 응용 프로그램에서 호출할 수 있도록 하는 래퍼 라이브러리를 구현합니다.
이를 달성하기 위해 Java와 같은 언어는 이를 가능하게 하는 외부 함수 인터페이스라는 메커니즘을 제공합니다.이러한 메커니즘의 예는 다음과 같습니다.
- Java 네이티브 인터페이스(JNI)
- Java 네이티브 액세스(JNA)
- Python용 외부 함수 라이브러리
- 관리 확장 기능
- SWIG(Simplified Wrapper and Interface Generator)
기존 래퍼 라이브러리
기존 래퍼 라이브러리의 몇 가지 예: