[c#] 프로그래밍에서 WRAPPER라는 용어는 어디에서 어떻게 사용됩니까?

다른 클래스 나 API 또는 일부 코드의 래퍼를 만드는 용어를 사용하는 소프트웨어 개발자를 만났습니다. 이것은 숙련 된 소프트웨어 프로그래머가 사용하는 용어입니다.

그래서 그것들이 무엇을 의미하는지 알 수 있습니다.

예 : 간단한 질문; 두 가지 유형의 배열 정렬 기술이 있습니다. 이에 대한 래퍼를 만들어 보겠습니다.

위는 아주 간단한 예입니다



답변

‘래퍼’라는 용어는 많이 사용됩니다. 일반적으로 다른 클래스의 인스턴스를 포함하지만 해당 인스턴스를 직접 노출하지 않는 클래스를 설명하는 데 사용됩니다. 래퍼의 주요 목적은 래핑 된 개체를 사용하는 ‘다른’방법을 제공하는 것입니다 (아마도 래퍼는 더 간단한 인터페이스를 제공하거나 일부 기능을 추가 할 수 있습니다).

‘래퍼’라는 단어는 고전적인 디자인 패턴을 설명 할 때도 사용할 수 있습니다.

단순화 된 인터페이스를 제공하기 위해 객체를 래핑하는 것은 종종 ‘Facade’패턴으로 설명됩니다. 래퍼는 외관입니다.

때로는 특정 인터페이스에 적합한 클래스가있을 수 있지만 해당 인터페이스에 맞게 코드를 변경할 수 없습니다. 인터페이스를 구현하지만 대부분의 호출을 래핑 된 개체로 보내는 해당 클래스에 대한 래퍼를 만들 수 있습니다. 이것이 바로 ‘어댑터’패턴입니다. 래퍼는 어댑터입니다.

다른 알고리즘을 사용하여 배열 정렬을 수행 할 수있는 두 개의 클래스가있는 경우 설명하는 인스턴스는 ‘전략’패턴처럼 들립니다. 여기서 일부 객체에 대해 작업을 수행하는 방법을 제공하지만 해당 작업에 사용되는 알고리즘은 상황에 따라 다를 수 있습니다. 그 물체의 구조에.

예를 들어 정렬 알고리즘 중 하나는 길이가 100 미만인 배열에 적합 할 수 있지만 성능이 문제가 될 수 있습니다. 다른 알고리즘은 더 큰 배열에 적합 할 수 있습니다. 정렬 작업을 지원하지만 배열 길이에 따라 사용할 알고리즘을 결정하는 두 알고리즘에 대한 ‘래퍼’를 만들 수 있습니다.

대부분의 래퍼는 일종의 복잡성을 숨기기 위해 존재합니다.


답변

유추에 의한 간단한 설명 : 포장이란 무엇입니까?

설명하는 데 사용되지 않는 코드입니다.

예제 1 : Ipad가 Iphone을 “포장”합니다.

iPhone이하지 않는 ipad는 무엇을합니까?

화면이 더 큰 것을 제외하면 기본적으로 똑같지 않나요?

Ipad는 iPhone을 “포장”합니다. 즉, ipad 자체에 iPhone의 모든 이점이 있고 더 큰 화면 등의 이점이 있습니다. 그러나 근본적으로 ipad 내부에는 Iphone이 있습니다.

그렇다면 무엇이 다른가요? 유일한 차이점은 외관입니다. 화면이 더 크며 Ipad에서 전화를 걸 수 없습니다.

아이폰은 아이 패드 안에있는 유일한 것입니다.  Ipad는 말 그대로 Iphone을 감 쌉니다.  전화를 걸 수있는 기능이 "노출"되지 않았기 때문에 Ipad로 전화를 걸 수 없다는 점을 제외하면.  애플은 하나가 아닌 x2 제품을 구매하기를 원합니다.

문자 그대로 “객체”와 동일합니다.

…………. 안쪽은 똑같지 만 외관이 다른 좋은 물건을 모두 가지고 있습니다. 다른 래퍼.

“래퍼는 기본 개체와 다른 기능을 노출 할 수 있습니다.” …… 좋습니다. 그러나 이것은 무엇을 의미합니까?

때때로 래퍼는 내부에서 액세스 할 수있는 항목을 제한 할 수 있습니다. 예를 들어, ipad는 그 안에 묻혀있는 Iphone이 그 기능을 가지고 있더라도 전화를 걸 수있는 능력을 제한 할 수 있습니다.

예 2 : 수동 자동차의 래퍼 역할을하는 자동 자동차

자동 자동차와 수동 자동차를 생각하십시오. 이면에서 자동 자동차에는 기어를 자동으로 변경하는 엔지니어링 메커니즘이 있지만 근본적으로 표면 아래에서 자동차는 여전히 수동 자동차입니다. 즉, 자동차의 자동 기능이 자동차의 수동 기능을 “포장”합니다. 자동 자동차에서 직접 기어를 수동으로 바꾸고 싶었다면 할 수 없습니다. 기어 변경 기능은 자동 차량에서 “노출되지 않습니다”. 그러나 그것은 수동 자동차에 노출됩니다. 비유가 약간 부담 스러웠지만 내가 무엇을 얻고 있는지 보셨기를 바랍니다.

그러나 래퍼의 목적은 무엇입니까?

단순화하고 싶다면 래핑 클래스를 작성합니다. 사용하기 쉬운 ‘래퍼’를 만들고 모든 복잡한 비트를 래퍼 안에 남겨 두어 복잡한 비트가 ‘노출’되지 않도록합니다.

예를 들어 아래에 COM 호출을 수행하는 .net 래퍼가있을 수 있습니다. 래퍼가 없으면 COM 호출을 직접 만들어야합니다. 운 좋게도 래퍼를 사용하면 .net 래핑 코드를 호출하면 COM 호출이 수행됩니다. 그리고 그것은 당신을 위해 일을 단순화 할 것입니다.


답변

코드의 복잡성을 숨기기 위해 사용하기 쉬운 코드를 작성하는 것뿐입니다. 높은 수준의 언어에서 낮은 수준의 API를 호출해야하고 “추악한”코드를 모두 숨기고 싶을 때 특히 유용합니다.

편집 : 라이브러리기능 이라는 두 개의 위키 문서에서 더 많은 것을 찾을 수 있습니다.


답변

래퍼는 실제 API를 변경하지 않고 일부 API를 내부적으로 호출하기 위해 생성 된 일부 코드입니다.

이에 대한 예는 Facebook의 Facebook C # SDK 릴리스입니다 . SDK는 특정 메서드와 클래스를 제공하지 않고 기본 플랫폼 만 호출 할 수 있기 때문에 실제로 래퍼입니다. 반면에 Facebook Developer Toolkit 은 전체 API입니다.


답변

“래퍼”의 많은 예가 있으며이 용어는 때때로 같은 의미로 사용됩니다. 다음은 떠오르는 몇 가지 예입니다.

DLL 래퍼

과거에는 COM을 이해하지만 .NET을 이해하지 못하는 이전 응용 프로그램에서 .NET의 고급 기능을 사용하기 위해 .NET DLL 주위에 COM 래퍼를 만들었습니다.

객체 래퍼 (Java)

Java java.lang에는 8 가지 기본 유형에 대한 객체 메소드를 제공하기 위해 패키지에 제공 되는 클래스가 있습니다. Java의 모든 기본 래퍼 클래스는 변경할 수 없습니다. 따라서 Wrapper클래스는가 Object필요할 때 기본 값을 나타내는 데 사용됩니다 .


답변

두 번째 함수를 호출하는 것이 주 목적인 래퍼 함수


답변

코드에 더 많은 기능을 추가하고 싶지만 코드를 변경할 수 없다고 가정합니다. 그것이 래퍼가 도움이되는 곳입니다. 래퍼를 사용하여 원래 코드를 변경하지 않고 출력을 가져올 수 있습니다.