래퍼 라이브러리

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와 같은 언어는 이를 가능하게 하는 외부 함수 인터페이스라는 메커니즘을 제공합니다.이러한 메커니즘의 예는 다음과 같습니다.

기존 래퍼 라이브러리

기존 래퍼 라이브러리의 몇 가지 예:

「 」를 참조해 주세요.