Wrapper 클래스
: 감싸는 클래스.
-
- 기본 자료형의 데이터를 감싸는 Wrappwe 클래스
- 때로는 int, double과 같은 기본 자료형 데이터들도 인스턴스로 표현을 해야만 하는 경우가 있다. 예를 들어서 다음과 같이 정의된 메소드가 존재한다고 가정해보자.
public static void showData(Object obj){ System.out.println(obj); }
이 메소드를 통해 출력해야할 데이터가 정수 3과 실수 7.15이다. 이런 상황에서는 3과 7.15가 Object클래스를 상속하는 인스턴스 형태가 되어야만 위 메소드의 인자로 전달될 수 있다. 이것이 기본 자료형 데이터가 인스턴스로 표현되어야 하는 상황인데, 이렇듯 인스턴스의 참조 값을 요구하는 자리에 기본 자료형 데이터를 놓아야 하는 경우, 기본 자료형 데이터를 인스턴스로 표현해야 한다.
직접 기본 자료형 데이터를 인스턴스로 표현하기 위해 정의한다면
class IntWrapper { private int num; public IntWrapper(int data){ num = data; } public String toString(){ return ""+num; } } class WrappingInteger { public static void showData(Object obj){ System.out.println(obj); } public static void main(String[] args){ IntWrapper intInst = new IntWrapper(3); showData(intInst); showData(new IntWrapper(7)); } }
위의 클래스는 별로도 직접 정의해보았다. 하지만 자바에서는 이미 Wrapper클래스를 활용하면 별도로 지정할 필요가 없다.
class UseWrapperClass{ public static void showData(Object obj){ System.out.println(obj); } public static void main(String[] args){ Integer intInst = new Integer(3); showData(intInst); showData(new Integer(7)); } }
자료형 Wrapper class Boolean Boolean(boolean value) Character Character(char value) Byte Byte(byte value) Short Short(short value) Integer Integer(int value) Long Long(long value) Float Float(float value), Float(double value) Double Double(double value) -
- Wrapper 클래스의 가장 기본이 되는 두 가지 기능
-
Wrapper클래스도 다양한 메소드가 정의되어 있어서 여러 가지 기능을 제공하고 있다. 그러나 기본적으로 기억할 기능은 두 가지이다.
- 기본 자료형 데이터에서 Wrapper 인스턴스로 감싸질 때 Boxing
- Wrapper 인스턴스에서 기본 자료형 데이터로 변경될 때 UnBoxing
class BoxingUnBoxing{ public static void main(String[] args){ Integer iValue = new Integer(10); Double dValue = new Double(3.14); System.out.println(iValue); System.out.println(dValue); iValue = new Integer(iValue.intValue() + 10); dValue = new Double(dValue.doubleValue() + 1.2); System.out.println(iValue); System.out.println(dValue); } }
Wrapper 클래스는 String클래스와 마찬가지로 인스턴스에 저장되어있는 값의 변경이 불가능하다. 그렇기 때문에 위처럼 증가된 값을 저장하는 새로운 인스턴스의 생성 및 참조만이 가능할 뿐이다.
-
- Auto Boxing & Auto UnBoxing
- 자바 버전 5.0부터 자동으로 Boxing, Unboxing을 지원한다.
class AutoBoxingUnboxing{ public static void main(String[] args){ Integer iValue = 10; Double dValue = 3.14; System.out.println(iValue); System.out.println(dValue); int num1 = iValue; double num2 = dValue; System.out.println(num1); System.out.println(num2); } }
뿐만 아니라 연산도 가능하다. (ex. Integer num = 10; num++; )