래퍼(wrapper) 클래스에 대해...

6194 단어 자바자바

자바에서의 자료형이란?

자료형이란 데이터 타입(type)을 의미하며, 프로그래밍 언어에서는 여러 종류의 데이터를 식별하는 분류를 의미한다.
자바에서 제공하는 자료형은 크게 2가지로 분류할 수 있다.
1. 기본 자료형
2. 참조형 자료형
참조형 자료형은 말 그대로 참조할 수 있는 모든 자료형을 말한다.
대표적으로 배열,class 등등이다.
기본자료형은 8가지로 byte,short,int,long,float,double,char,boolean이 있다.

wrapper 클래스란?

기본 자료형을 참조형 자료형처럼 사용하기 위한 클래스이다.
이름에서도 알 수 있듯, wrapper 클래스는 감싸는 클래스이다.
그럼 무엇을 감싸는가? 에 대한 답은 기본 자료형이다.
즉, 기본 자료형의 값을 감싸 객체형태로 만든 것이 바로 wrapper 클래스이다.
wrapper 클래스의 경우 string 과 같이 불변성을 갖고 있다. 따라서 wrapper 클래스 안에 객체의 값은 변경 불가능하다.

wrapper 클래스 종류

wrapper 클래스는 기본 자료형을 감싼 것이기 때문에 종류 또한 기본 자료형과 동일하다.
byte->Byte
short->Short
int->Integer
long->Long
double->Double
char->Character
float->Float
boolean->Boolean

wrapper 클래스 사용하는 이유

wrapper 클래스를 사용하는 이유는 참조형 자료형을 사용하는 이유와 같다.
기본 자료형의 값을 단순히 값으로만 사용하지 않고 그 값에 대한 메서드를 사용 혹은 null값을 이용하기 위해 사용된다.
하지만 우리가 wrapper 클래스를 흔히 사용하는 이유는 밑의 두가지 이유일 것이다.
첫째 제네릭
둘째 기본 자료형의 값을 문자열로 변환 혹은 반대 경우

(제네릭은 다음 포스트에 다룰 예정이다)

기본 자료형의 값을 문자열로 변환

wrapper 클래스를 사용하면 기본 자료형의 값을 문자열로 쉽게 변환이 가능하다.

Integer i = 12;
String str;
str = i.toString(); // 12라는 숫자를 문자열 "12"로 반환
int primaryInt = Integer.parseInt(str); // Integer클래스 안에 있는 문자열 변환 함수를 사용해 문자열을 정수로 바꾸는 모습

boxing과 unboxing

wrapper 클래스에서 알아야할 개념 중 하나가 바로 boxing과 unboxing이다.
만약 기본 자료형에서 wrapper 클래스 자료형으로 변경하고 싶을 경우, 혹은 반대의 경우 어떻게 변경해야 할까?
이에 대한 답이 바로 boxing과 unboxing이다.
boxing은 말 그대로 박싱한다
unboxing은 말 그대로 언박싱한다
그렇다면 뭘 박싱하고 언박싱 하는 것인가?
이 바로 기본 자료형 혹은 wrapper 클래스 객체 이다.
기본 자료형의 경우 wrappeer 클래스 객체로 만들기 위해 박싱을 하는 것이고,
wrappeer 클래스 객체는 기본 자료형으로 만들기 위해 감싸진 것을 언 박싱 하는 것이다.

int primaryInt = 20;
Integer wrapperInt1 = new Integer(12); // 12라는 기본 자료형을 박싱한 모습
Integer wrapperInt2 = Integer.valueOf(20); // 동일한 결과지만 이걸 더 선호
primaryInt = wrapperInt.intValue(); // Integer클래스 안에 있는 언박싱 함수를 호출 한 모습

정리하면
기본자료형 -> wrapper 클래스 == boxing
wrapper 클래스 -> 기본자료형 == unboxing
boxing 하는 방법 : new wrapper class(값) // 이방법 보단 선호x
boxing 하는 방법 : wrapper class.valueOf(값) // 선호
unboxing 하는 방법 : wrapper class객체.기본타입Value() 호출

new Integer 보다 Integer.valueOf()를 선호하는 이유

이클립스로 예제를 작성중 new Integer는 사용하지 말자는 문구가 떴다.

그리고 대안으로 valueOf()를 사용하라고 쓰여있다.
내용은 간단하게 공간 및 시간 성능이 크게 향상될 가능성이 높기 때문 이라는 것이다.
이 내용은 다음 포스트에 다룰 예정이다.
일단은 new Integer 보다 Integer.valueOf()를 사용하자

그렇다면 기본 자료형과 wrapper 클래스 연산은 가능할까?

기본 자료형은 언박싱 되어있고, wrapper 클래스 객체는 박싱 되어있기 때문에 이 둘을 연산하기 위해서는 박싱 혹은 언박싱 중 하나로 통일하여 연산을 해야 할것 같아보인다.
하지만 java 5 이후에 나온 autoBoxing, autoUnboxing에 의해 변환 없이 자동으로 연산이 가능해 졌다.
autoBoxing은 말그래로 자동 박싱
autoUnboxing은 말그대로 자동 언박싱

즉, 아래와 같은 연산들이 자동으로 된다는 의미이다.

Integer wrapperInt = new Integer(21);
int primaryInt = wrapperInt; // wrapperInt가 자동 언박싱 되는 모습
wrapperInt+primaryInt;// 이것의 결과 값은 기본 자료형이다.

좋은 웹페이지 즐겨찾기