Java에서 Integer 선언을 잘 안하는 이유?

kimseungki·2022년 7월 8일
0

개요

Integer이 우리가 볼 때 null 정보도 제공하고 이점에서 보면 DB에 쿼리로 데이터를 전달할 때도 상당히 유용하다는 장점이 있는데 왜 많이 안쓸까? 라는 점이 궁금했다.

테스트

실행은 이렇게 해봤다. 객체에 데이터를 10만개를 넣고 sum을 해보았다.

		// 일반 stream 호출(언박싱을 하는 상태)
		Instant start = Instant.now();
        city.stream().map(City::getCost).reduce(0,Integer::sum);
        Instant finish = Instant.now();
        long elapsedTime = Duration.between(start, finish).toMillis();
        System.out.println("elapsedTime(ms) : " + elapsedTime);
        // intStream 호출(언박싱을 안하는 상태)
        start = Instant.now();
        city.stream().mapToInt(City::getCost).sum();
        finish = Instant.now();
        elapsedTime = Duration.between(start, finish).toMillis();
        System.out.println("elapsedTime(ms) : " + elapsedTime);

다음은 실행시간이다.

놀랍게도 약 2배이상 더 빠르다는 것을 알 수 있다.
이유는 일반 stream은 map을 통해 Stream(Integer)을 받고 이 정보는 Integer을 연산처리를 위해 int로 변경하는 언박싱 시간이 intStream보다 더 걸리기 때문이다.

후기

Integer은 arrayList 등에 많이 쓰지만 결정적으로 연산을 할 수 없다는 단점이 있다. 따라서 언박싱을 할 수 있다는 환경에서는 Integer을 남발해서 쓰는 것은 효율적이지 못하다는 생각이 들었다.

profile
seung 기술블로그

0개의 댓글