Java에서 숫자와 관련된 데이터 타입은 많습니다.
이번 시간에는 그 중에서 Integer과 int에 대해서 알아보겠습니다.
| int | Integer |
|---|---|
| 기본 데이터 유형 (Primitive data type) | 객체 래퍼 클래스 (wrapper class) |
| 정수 값을 저장, 32비트의 고정 크기 | int값을 감싸고 객체로 다룰 수 있게 해줌 |
| 기본값은 0이며, null 허용 X | null을 허용하며, 다양한 유틸리티 메소드를 포함하여 int 값 처리에 유용 |
int와 Integer에 저장된 값은 일반적인 사용에서는 호환이 가능합니다.(autoboxing)
int a = 1;
Integer b = a + 2; //3
하지만 배열에서는 호환이 안됩니다.
데이터 유형의 차이:
int[]는 primitive type의 배열을 나타내고, Integer[]는 Integer 객체의 배열을 나타냅니다. int는 Stack 메모리에 저장되고, Integer는 Heap 메모리에 저장됩니다.
언박싱(boxing) 및 박싱(unboxing) 필요 :
int[]에서 Integer[]로 또는 그 반대로 변환하려면 원시 int 값을 Integer 객체로 박싱하거나 그 반대로 언박싱해야 합니다. 이 작업은 자동으로 수행되지 않으므로 명시적으로 처리해야 합니다.
흐름은 다음과 같습니다
int배열 -> int스트림 -> Integer스트림 -> Integer배열
//int 타입의 배열을 생성해서 값을 {1, 2, 3}으로 초기화
int[] intArray = {1, 2, 3};
//int[] -> int스트림
IntStream intStream = Arrays.stream(intArray);
//int스트림 -> Integer스트림
Stream<Integer> integerStream = intStream.boxed();
//Integer스트림 -> Integer[]
Integer[] array = integerStream.toArray(Integer[]::new);
흐름은 역순입니다.
Integer배열 -> Integer스트림 -> int스트림 -> int배열
//Integer[] 생성 및 초기화
Integer[] integerArray = {1, 2, 3};
//Integer[] -> Integer스트림
Stream<Integer> integerStream = Arrays.stream(integerArray);
//Integer스트림 -> int스트림
IntStream intStream = integerStream.mapToInt(Integer::intValue);
//int스트림 -> int[]
int[] intArray = intStream.toArray();