Java

[Java] Wrapper class와 Auto Boxing

📝 작성 : 2020.06.16  ⏱ 수정 : 
728x90

Wrapper class

ArrayList<int> nubmers = new ArrayList<int>(); // Invalid
ArrayList<Integer> numbers = new ArrayList<Integer>(); // Valid

 

primitive type의 데이터를 객체로 취급해야 하는 경우가 있습니다.

이럴 경우 primitive type의 데이터를 객체로 포장해주어야 하는데 이때 사용하는 클래스를 Wrapper class라고 합니다.

기본형 타입의 래퍼 클래스는 java.lang 패키지에 포함되어있습니다.

 

기본타입 래퍼클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

Integert와 Character를 제외한 나머지 래퍼 클래스는 앞자리를 대문자로 작성하면 됩니다.

 

Wrapper class 객체 생성

생성자정적 스태틱 메서드를 이용하여 객체를 생성합니다.

 

Integer i1 = new Integer(10); // JDK9 버전부터 Deprecated되었습니다. 
Integer i2 = Integer.valueOf(10);

 

Wrapper class 비교시 주의점

절대 동등성 비교(== 비교)를 하면 안됩니다.

 

Integer integer1 = Integer.valueOf(127);
Integer integer2 = Integer.valueOf(127);
System.out.println(integer1 == integer2); // true
System.out.println(integer1.equals(integer2)); // true

Integer integer3 = Integer.valueOf(128);
Integer integer4 = Integer.valueOf(128);
System.out.println(integer3 == integer4); // false
System.out.println(integer3.equals(integer4)); // true

객체의 동등성 비교는 주소의 값이 같은지 비교하기 때문에 동일성 비교를 통해 객체의 값이 같은지 비교해야 합니다.

 

Integer.valueOf() 설명

Integer.valueOf() 메서드는 -128부터 127까지의 숫자는 캐시에 저장하고 반환하기 때문에 127일 때의 값은 true가 나왔지만 그 이상인 128을 비교했을 때는 false가 나왔습니다.

언제 실수할지 모르기 때문에 값을 비교할 때는 무조건 동일성 비교해야 합니다.

 

AutoBoxing과 AutoUnBoxing

  • 박싱: 기본 자료형의 데이터를 대응하는 래퍼 클래스로 만드는 것
  • 언박싱: 래퍼 클래스 데이터를 대응하는 기본 자료형으로 만드는 것

 

JDK 1.5부터 박싱, 언박싱이 필요한 상황에서 컴파일러가 자동으로 처리해줍니다. 이를 오토 박싱(AutoBoxing)오토 언박싱(AutoUnBoxing)이라고 합니다.

 

// 수동박싱과 수동언박싱
Integer wrapperInteger = Integer.value(10); 
int intValue = wrapperInteger.intValue();

// 오토박싱과 오토언박싱
Integer autoBoxing = 10;
int autoUnboxing = autoBoxing;

 

이를 통해 기본 타입과 래퍼 클래스 간의 연산도 가능합니다.

 

Integer i1 = Integer.valueOf(10);
Integer i2 = 10;

int i3 = i1 + i2;
반응형