Pink Spider/mapToInt

Created Wed, 23 Apr 2025 13:48:45 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
795 Words 4 min

stream().mapToInt()는 Java Stream API에서 사용되는 메서드 중 하나로, Stream의 요소를 int형 정수로 변환하여 IntStream을 생성하는 역할을 합니다.

💡 사용 목적

mapToInt()는 주로 객체 스트림에서 정수값을 추출하고자 할 때 사용됩니다. 예를 들어, 어떤 객체 리스트에서 특정 필드(예: 나이, 점수 등)를 정수로 뽑아낼 때 유용합니다.


📌 기본 구조

Stream<T> stream = ...;
IntStream intStream = stream.mapToInt(element -> 변환할 int );

✅ 예시

List<String> list = List.of("1", "2", "3");
int sum = list.stream()
              .mapToInt(Integer::parseInt)  // String → int
              .sum();                       // IntStream 연산 사용
System.out.println(sum); // 출력: 6

위 코드에서:

  • mapToInt(Integer::parseInt)Stringint로 바꾸어 IntStream으로 변환
  • 그 후 sum()을 통해 합계를 계산

🧠 왜 IntStream으로 변환하는가?

IntStreamStream<Integer>보다 효율적입니다:

  • boxing/unboxing 비용 없음 (int는 기본형, Integer는 객체형)
  • sum(), average(), max()숫자 전용 메서드 사용 가능

Java에서 자주 나오는 개념인 boxingunboxing은 **기본형(primitive type)**과 객체형(wrapper class) 사이의 변환을 의미합니다. 아래에서 쉽게 정리해드릴게요.


🧱 기본형 vs 객체형

기본형 (Primitive) 객체형 (Wrapper Class)
int Integer
double Double
boolean Boolean

📦 Boxing이란?

기본형 → 객체형 으로 감싸는 것

int a = 10;
Integer boxed = Integer.valueOf(a);  // 명시적 boxing
Integer autoBoxed = a;               // 자동 boxing (auto-boxing)

📤 Unboxing이란?

객체형 → 기본형 으로 풀어주는 것

Integer boxed = 10;
int unboxed = boxed.intValue();     // 명시적 unboxing
int autoUnboxed = boxed;            // 자동 unboxing (auto-unboxing)

🔧 왜 중요한가?

📌 성능 차이

  • int는 메모리상에서 값만 저장 → 가볍고 빠름
  • Integer는 객체이므로 힙에 저장되고 포인터 등 부가 비용 발생 → 느릴 수 있음

📌 예시: Stream<Integer> vs IntStream

List<Integer> list = List.of(1, 2, 3);

int sum1 = list.stream().mapToInt(i -> i).sum(); // IntStream, unboxing 안 해도 됨
int sum2 = list.stream().reduce(0, (a, b) -> a + b); // Integer 연산: boxing/unboxing 발생

✅ 결론

  • boxing/unboxing은 변환 과정이며, 자동으로도 일어나지만 성능에 영향을 줄 수 있음
  • Stream에서 mapToInt, mapToDouble 등을 쓰는 이유 중 하나는 이러한 변환 비용을 피하기 위해서예요