래퍼 라이브러리

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

기존 래퍼 라이브러리

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

「 」를 참조해 주세요.