답변:
일반적으로 래퍼 클래스는 다른 클래스 나 구성 요소의 기능을 "랩핑"또는 "캡슐화"하는 클래스입니다. 이것들은 기본 클래스 또는 구성 요소의 구현에서 추상화 수준을 제공함으로써 유용합니다. 예를 들어 COM 구성 요소를 래핑하는 래퍼 클래스는 호출 코드를 방해하지 않고 COM 구성 요소를 호출하는 프로세스를 관리 할 수 있습니다. 또한 관련된 인터페이스 포인트 수를 줄여 기본 개체의 사용을 단순화 할 수 있습니다. 이로 인해 기본 구성 요소를보다 안전하게 사용할 수 있습니다.
랩퍼 클래스는 기본 유형을 오브젝트로 사용하는 방법을 제공합니다. 각 프리미티브마다 다음과 같은 래퍼 클래스가 있습니다.
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 값은 명시 적으로 정수 값으로 변환되지만 다운 캐스팅이라고도합니다.
랩퍼 클래스는 이름과 같이 다른 것을 둘러싼 클래스입니다.
보다 공식적인 정의는 Adapter Pattern 을 구현하는 클래스입니다 . 이를 통해 하나의 API 세트를보다 유용하고 읽기 쉬운 형식으로 수정할 수 있습니다. 예를 들어 C #에서 네이티브 Windows API를 사용하려면 .NET 디자인 지침을 준수하는 클래스로 래핑하는 것이 좋습니다.
랩퍼 클래스라고하는 몇 가지 디자인 패턴이 있습니다.
" 프록시, 데코레이터, 어댑터 및 브리지 패턴은 어떻게 다릅니 까? "에 대한 내 답변을 참조하십시오.
또한 일부 환경에서는 래퍼 클래스가 수행 할 수있는 많은 작업이 측면으로 대체되고 있다는 점에 유의해야합니다.
편집하다:
일반적으로 랩퍼는 랩핑 구현에 대해 걱정하지 않고 랩핑이 수행하는 기능을 확장합니다. 일반적인 예는 해당 인터페이스의 모든 구현에 추가하는 것이 아니라 다른 서비스 인터페이스 주위에 타이밍 정보 또는 로깅 기능을 추가하는 것입니다.
그런 다음 이것은 Aspect 프로그래밍의 전형적인 예입니다. 기능별 인터페이스 기능을 사용하고 상용구 로깅을 추가하는 대신, 측면 프로그래밍에서는 메소드에 대한 정규식의 일종 인 포인트 컷을 정의한 다음 일치하는 모든 메소드 전후에 실행하려는 메소드를 선언합니다. 포인트 컷. 어 스펙트 프로그래밍은 데코레이터 패턴을 사용하는 일종의 래퍼 클래스도 사용할 수 있지만 두 기술 모두 다른 용도로 사용된다고 말할 수 있습니다.
랩퍼 클래스는 일반적으로 전용 속성으로 객체를 갖는 클래스입니다. 랩퍼는 해당 개인용 객체의 API를 구현하므로 개인용 객체의 인수로 전달 될 수 있습니다.
컬렉션이 있고 개체가 추가 될 때 일종의 변환을 사용하려고한다고 가정합니다. 컬렉션의 모든 메서드가 포함 된 래퍼 클래스를 작성합니다. add ()가 호출되면 랩퍼는 인수를 개인 콜렉션으로 전달하는 대신 인수를 변환합니다.
랩퍼는 콜렉션이 사용될 수있는 어느 곳에서나 사용될 수 있으며, 개인용 오브젝트는 여전히이를 참조하고 읽는 다른 오브젝트를 가질 수 있습니다.
래퍼 클래스는 프로그래머의 기본적인 요구를 충족시키기 위해 존재했습니다. 즉, Objects 만 허용되는 경우 기본 값을 사용합니다. 이름에서 알 수 있듯이 래퍼 클래스는 프리미티브 값을 감싸고 Object에 값을 보유합니다. 따라서 generics, hashmap-keys, Arraylists 등과 같은 프리미티브가 허용되지 않는 모든 위치에서 프로그래머는 이제 이러한 프리미티브 값을 해당 래퍼 유형으로 제공 할 수 있습니다.
또한 이러한 랩퍼 유형에는 기본 유형에서 해당 랩퍼 유형으로 또는 그 반대로 변환하고 문자열에서 랩퍼 유형으로 변환하는 많은 유틸리티 메소드가 있습니다.
- 나는 깊이 래퍼 유형의 개념을 설명하는 내 블로그에 래퍼 클래스에 대한 자세한 기사를 작성했습니다 http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (공개 - 이 블로그는 내 소유입니다.)
나는 현재 내 프로젝트와 내가 얻는 주요 이점 (주제 설명을 넓히기위한 단 하나의 이점)에 래퍼 클래스를 사용했습니다.
예외 처리 : 다른 클래스가 래핑하는 주 클래스에는 예외가 발생하면 예외를 던지는 메소드가 있으므로 예외를 처리하고 즉시 기록하는 래퍼 클래스를 만들었습니다. 따라서 내 주요 범위에는 예외 처리가 없습니다. 방금 메서드를 호출하고 무언가를합니다.
쉬운 사용법 : 객체를 쉽게 시작할 수 있습니다. 일반적으로 시작 단계는 많은 단계로 구성됩니다.
코드 가독성 : 다른 프로그래머가 내 코드를 열면 코드가 매우 명확하고 조작하기 쉽습니다.
세부 사항 숨기기 : 다른 프로그래머가 사용할 클래스를 생성하는 경우, 프로그래머가 처리 할 필요가 없도록 "오류 처리, 예외 처리, 메시지 로깅 등"과 같은 세부 사항을 랩핑 할 수 있습니다. 혼돈은 단순히 방법을 사용합니다.
랩퍼 클래스는 무언가를 잡고 기능을 추가하는 유일한 목적을 제공하는 클래스입니다. Java에서는 기본 요소 (int, float, chars와 같은)가 객체가 아니기 때문에 객체를 처리하려면 래퍼 클래스를 사용해야합니다. int의 Vector를 만들고 싶다고 가정 해 봅시다. 문제는 Vector가 프리미티브가 아닌 오브젝트 만 보유한다는 것입니다. 그래서 당신이 할 일은 모든 정수를 정수 래퍼에 넣고 그것을 사용하는 것입니다. 예:
int number = 5;
Integer numberWrapped = new Integer(number);
//now you have the int in an object.
//and this is how to access the int value that is being wrapped.
int again = numberWrapped.intValue();
래퍼는 서로 다른 플랫폼 사이에서 서로 다른 두 응용 프로그램간에 통신하는 데 사용되는 클래스입니다.