*기본 자료형을 객체 타입으로 변환해야하는 경우 ▪️ 객체로 저장해야할 경우 ▪️ 매개변수로 객체가 요구될 경우 (ex. *제네릭, Collecion 타입) ▪️ 객체간 비교가 필요할 경우
*제네릭 : 모든 종류의 타입을 다룰 수 있도록 일반화된 타입 매개변수로 클래스나 메서드를 선언하는 기법 * 오토 박싱, 오토 언박싱: JDK 1.5부터는 자바 컴파일러가 알아서 자동 처리해줌 편의성을 위해 오토 박싱과 언박싱이 제공되고 있지만, 내부적으로 추가 연산 작업이 거치게 된다. 따라서, 오토 박싱&언박싱이 일어나지 않도록 동일한 타입 연산이 이루어지도록 구현하자. 100만건 기준으로 약 5배의 성능 차이가 난다. 따라서 서비스를 개발하면서 불필요한 오토 캐스팅이 일어나는 지 확인하는 습관을 가지자.
public class AutoBoxingExample {
public static void main(String[] args) {
// 기본 타입 int를 Integer 객체로 자동 변환 (AutoBoxing)
Integer integerObj = 10; // int -> Integer
System.out.println("AutoBoxing: " + integerObj);
}
}
public class AutoUnBoxingExample {
public static void main(String[] args) {
// Integer 객체를 int 기본 타입으로 자동 변환 (AutoUnBoxing)
Integer integerObj = new Integer(20);
int num = integerObj; // Integer -> int
System.out.println("AutoUnBoxing: " + num);
}
}
2. [Wrapper Class 특징]
산술 연산을 위한 클래스가 아니므로 Immutable하다.(불변 객체이다.)
불변 객체이므로 새로운 값 할당이나 참조만 가능하고 변경은 불가하다.
* 문자열 <-> 숫자 변환
// 문자열 -> 기본형
int number1 = Integer.parseInt("100");
// 문자열 -> wrapper class
Integer number2 = Integer.valueOf("100");
오토 박싱/언박싱이 지원되므로 둘다 valurOf()를 사용해도 되지만 성능측면에서 조금 더 느리다고 한다.