[design-patterns] 래퍼 클래스 란 무엇입니까?

래퍼 클래스 란 무엇입니까?
그러한 수업은 어떻게 유용합니까?



답변

일반적으로 래퍼 클래스는 다른 클래스 나 구성 요소의 기능을 “랩핑”또는 “캡슐화”하는 클래스입니다. 이것들은 기본 클래스 또는 구성 요소의 구현에서 추상화 수준을 제공함으로써 유용합니다. 예를 들어 COM 구성 요소를 래핑하는 래퍼 클래스는 호출 코드를 방해하지 않고 COM 구성 요소를 호출하는 프로세스를 관리 할 수 ​​있습니다. 또한 관련된 인터페이스 포인트 수를 줄여 기본 개체의 사용을 단순화 할 수 있습니다. 이로 인해 기본 구성 요소를보다 안전하게 사용할 수 있습니다.


답변

간단하게 또는 다른 API로 다른 클래스 또는 API의 기능을 “랩핑”하는 클래스입니다.

참조 : 어댑터 패턴 , 외관 패턴


답변

랩퍼 클래스는 기본 유형을 오브젝트로 사용하는 방법을 제공합니다. 각 프리미티브마다 다음과 같은 래퍼 클래스가 있습니다.

int Integer
byte Byte

정수 및 바이트는 기본 int 및 바이트의 래퍼 클래스입니다. 래퍼 클래스가 boxing / unboxing이라는 메커니즘을 제공하도록 프리미티브를 오브젝트로 사용해야하는 경우 시간 / 제한이 있습니다.

다음 예제에서는 개념을 다음과 같이 잘 이해할 수 있습니다.

double d = 135.0 d;
Double doubleWrapper = new Double(d);

int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();

이것이 래퍼 클래스 타입을 사용하여 다른 프리미티브 타입으로 변환 할 수있는 방법입니다. 이 유형의 변환은 기본 유형을 객체로 변환하고이를 사용하여 다른 기본 유형을 가져와야하는 경우에 사용됩니다.이 방법을 사용하려면 큰 코드를 작성해야합니다. 그러나 간단한 코드 작성 기술을 사용하면 다음과 같이 코드 스 니펫을 얻을 수 있습니다.

double d = 135.0;
int integerValue = (int) d ;

double 값은 명시 적으로 정수 값으로 변환되지만 다운 캐스팅이라고도합니다.


답변

랩퍼 클래스가 반드시 다른 클래스를 랩핑 할 필요는 없습니다. dll 파일과 같은 API 클래스 래핑 기능 일 수 있습니다.

예를 들어 dll 래퍼 클래스를 생성하면 모든 dll 초기화 및 정리를 처리하고 예를 들어 생성 된 함수 포인터를 래핑하는 클래스 메서드를 만드는 것이 매우 유용 할 수 있습니다 GetProcAddress().

건배!


답변

랩퍼 클래스는 이름과 같이 다른 것을 둘러싼 클래스입니다.

보다 공식적인 정의는 Adapter Pattern 을 구현하는 클래스입니다 . 이를 통해 하나의 API 세트를보다 유용하고 읽기 쉬운 형식으로 수정할 수 있습니다. 예를 들어 C #에서 네이티브 Windows API를 사용하려면 .NET 디자인 지침을 준수하는 클래스로 래핑하는 것이 좋습니다.


답변

랩퍼 클래스라고하는 몇 가지 디자인 패턴이 있습니다.

프록시, 데코레이터, 어댑터 및 브리지 패턴은 어떻게 다릅니 까? “에 대한 내 답변을 참조하십시오.


답변

또한 일부 환경에서는 래퍼 클래스가 수행 할 수있는 많은 작업이 측면으로 대체되고 있다는 점에 유의해야합니다.

편집하다:

일반적으로 랩퍼는 랩핑 구현에 대해 걱정하지 않고 랩핑이 수행하는 기능을 확장합니다. 일반적인 예는 해당 인터페이스의 모든 구현에 추가하는 것이 아니라 다른 서비스 인터페이스 주위에 타이밍 정보 또는 로깅 기능을 추가하는 것입니다.

그런 다음 이것은 Aspect 프로그래밍의 전형적인 예입니다. 기능별 인터페이스 기능을 사용하고 상용구 로깅을 추가하는 대신, 측면 프로그래밍에서는 메소드에 대한 정규식의 일종 인 포인트 컷을 정의한 다음 일치하는 모든 메소드 전후에 실행하려는 메소드를 선언합니다. 포인트 컷. 어 스펙트 프로그래밍은 데코레이터 패턴을 사용하는 일종의 래퍼 클래스도 사용할 수 있지만 두 기술 모두 다른 용도로 사용된다고 말할 수 있습니다.