프로그래밍에서 WRAPPER라는 용어는 어디서 어떻게 사용됩니까?
다른 클래스 나 API 또는 일부 코드의 래퍼를 만드는 용어를 사용하는 소프트웨어 개발자를 만났습니다. 이것은 숙련 된 소프트웨어 프로그래머가 사용하는 용어입니다.
그래서 그것들이 무엇을 의미하는지 어떤 생각이든;
예 : 간단한 질문; 두 가지 유형의 배열 정렬 기술이 있습니다. 이에 대한 래퍼를 만들어 보겠습니다.
위의 것은 아주 간단한 예입니다
'래퍼'라는 용어는 많이 사용됩니다. 일반적으로 다른 클래스의 인스턴스를 포함하지만 해당 인스턴스를 직접 노출하지 않는 클래스를 설명하는 데 사용됩니다. 래퍼의 주요 목적은 래핑 된 개체를 사용하는 '다른'방법을 제공하는 것입니다 (아마도 래퍼는 더 간단한 인터페이스를 제공하거나 일부 기능을 추가 할 수 있습니다).
'래퍼'라는 단어는 고전적인 디자인 패턴을 설명 할 때도 사용할 수 있습니다.
단순화 된 인터페이스를 제공하기 위해 객체를 래핑하는 것은 종종 'Facade'패턴으로 설명됩니다. 래퍼는 외관입니다.
때로는 특정 인터페이스에 적합한 클래스가있을 수 있지만 해당 인터페이스를 준수하도록 코드를 변경할 수 없습니다. 인터페이스를 구현하지만 대부분의 호출을 래핑 된 개체로 보내는 해당 클래스에 대한 래퍼를 만들 수 있습니다. 이것이 바로 '어댑터'패턴입니다. 래퍼는 어댑터입니다.
서로 다른 알고리즘을 사용하여 배열 정렬을 수행 할 수있는 두 개의 클래스가있는 경우 설명하는 인스턴스는 '전략'패턴처럼 들립니다. 여기서 일부 객체에 대해 작업을 수행하는 방법을 제공하지만 해당 작업에 사용되는 알고리즘은 상황에 따라 다를 수 있습니다. 그 개체의 구조에.
예를 들어 정렬 알고리즘 중 하나는 길이가 100 미만인 배열에 적합 할 수 있지만 성능이 문제가 될 수 있습니다. 다른 알고리즘은 더 큰 배열에 적합 할 수 있습니다. 정렬 작업을 지원하지만 배열 길이에 따라 사용할 알고리즘을 결정하는 두 알고리즘에 대한 '래퍼'를 만들 수 있습니다.
대부분의 래퍼는 일종의 복잡성을 숨기기 위해 존재합니다.
유추에 의한 설명-포장이란 무엇입니까?
예 1 : Ipad가 Iphone을 "포장"합니다.
iPhone이하지 않는 ipad는 무엇을합니까?
화면이 더 큰 것을 제외하면 기본적으로 똑같지 않습니까?
Ipad는 iPhone을 "포장"합니다. 즉, ipad 자체에 iPhone의 모든 이점이 있고 더 큰 화면 등의 이점이 있습니다. 그러나 근본적으로 ipad 내부에는 Iphone이 있습니다.
그렇다면 무엇이 다른가요? 유일한 차이점은 외관입니다. 화면이 더 크며 Ipad에서 전화를 걸 수 없습니다.
문자 그대로 "객체"와 동일합니다.
............. 안쪽은 똑같지 만 외관이 다른 좋은 물건을 모두 가지고 있습니다. 다른 래퍼.
"래퍼는 기본 개체와 다른 기능을 노출 할 수 있습니다." ...... 좋습니다. 그러나 이것이 무엇을 의미합니까?
때때로 래퍼는 내부에서 접근 할 수있는 것을 제한 할 수 있습니다. 예를 들어, 그 안에 묻혀있는 아이폰이 그 기능을 가지고 있더라도, 아이 패드는 전화를 걸 수있는 능력을 제한 할 수 있습니다.
예 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
필요할 때 기본 값을 나타내는 데 사용됩니다 .
두 번째 함수를 호출하는 것이 주 목적인 래퍼 함수
코드에 더 많은 기능을 추가하고 싶지만 코드를 변경할 수 없다고 가정 해 보겠습니다. 그것이 래퍼가 도움이되는 곳입니다. 래퍼를 사용하여 원래 코드를 변경하지 않고 출력을 가져올 수 있습니다.
'development' 카테고리의 다른 글
UITableView 셀의 동적 높이 문제 (Swift) (0) | 2020.11.16 |
---|---|
Python의 기존 파일 앞에 줄 추가 (0) | 2020.11.16 |
스피너 항목 custom_style.xml에 여러 중력 값을 지정할 수 있습니까? (0) | 2020.11.16 |
Facebook iPhone 앱에서 지원하는 모든 사용자 지정 URL 체계는 무엇입니까? (0) | 2020.11.16 |
앱을 iOS 4.0 이상으로 제한 할 때 armv6 지원을 추가해야합니까? (0) | 2020.11.16 |