<aside> 📌 이미 알고 있는 것도 있고 아닌 것도 있는데 처음부터 정리하는것에 대한 부담감이 확 들었다. 그래서 내가 모르는 게 있었다면 그것에 대하여 기술하려고 한다!

</aside>


<aside> 📌 예전에 본 것이다. streamfor의 성능차이에 대한 영상인데 boxing작업 때문에 발생하는 오버헤드가 있고 어떤 상황에서 streamfor을 나누어 작업하는 것이 좋은지에 대하여 설명해주었다.

</aside>

[10분 테코톡] 크리스, 로마의 stream vs for

사진은 내가 정리한 글이다.

사진은 내가 정리한 글이다.


좋은 습관 좋지 못한 습관

// 좋지 못한 습관
for(int i = 0; i < list.size(); i++){ ... // size()메서드가 매번 반복하면서 호출됨

// 조금 더 좋은 습관
int size = list.size();
for(int i = 0; i < size; i++){ ... // size() 메서드가 한번만 호출됨

//향상된 for문
List<String> list = new ArrayList<>();
for(String str : list){... // 객체를 바로 사용할 수 있고 인덱스가 넘어가는 등에 예외코드를 없앨 수 있음

<aside> 📌 그럼 과연 저 3가지의 성능은? 1번은 2ms 2번은 1ms 3번은 16ms 나왔다.

</aside>

public static void main(String[] args) {
        List<Integer> list = IntStream.rangeClosed(0, 100_000).boxed().collect(Collectors.toList());
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        int result = 0;
        for (int i = 0; i < list.size(); i++) {
            result += i;
        }
        System.out.println(result);
        stopWatch.stop();
        System.out.println("startTime : " + stopWatch.getStartTime());
        System.out.println("elapsedTime(ms) : " + stopWatch.getTime());
        System.out.println("elapsedTime(ns) : " + stopWatch.getNanoTime());
				-- 
				705082704
				startTime : 1658039330327
				elapsedTime(ms) : 2
				elapsedTime(ns) : 2868600

        stopWatch = new StopWatch();
        stopWatch.start();
        result = 0;
        int size = list.size();
        for (int i = 0; i < size; i++) {
            result += i;
        }
        System.out.println(result);
        stopWatch.stop();
        System.out.println("startTime : " + stopWatch.getStartTime());
        System.out.println("elapsedTime(ms) : " + stopWatch.getTime());
        System.out.println("elapsedTime(ns) : " + stopWatch.getNanoTime());
				-- 
				705082704
				startTime : 1658039330349
				elapsedTime(ms) : 1
				elapsedTime(ns) : 1294400

        stopWatch = new StopWatch();
        stopWatch.start();
        result = 0;
        for (int i : list) {
            result += i;
        }
        System.out.println(result);
        stopWatch.stop();
        System.out.println("startTime : " + stopWatch.getStartTime());
        System.out.println("elapsedTime(ms) : " + stopWatch.getTime());
        System.out.println("elapsedTime(ns) : " + stopWatch.getNanoTime());
				-- 
				705082704
				startTime : 1658039330351
				elapsedTime(ms) : 16
				elapsedTime(ns) : 16952000
    }

[자바성능] for 루프 성능

출처


<aside> 📌 선택의 함정 if-elseswitch가 얼핏 똑같은데 무슨 차이가 있을까? 라는 의문이 들었다(속도가 아닐까?). 하여튼 그래서 찾아본 결과 if-else의 경우 여러 선택 사항을 구현하면 실행속도가 느려진다. 하지만 switch의 경우 선택지가 여러가지인 경우 실행속도가 if-else 보다 훨씬 빠르다라고 설명하고 있었다. 그래서 성능을 비교하려고 했는데 좋은 글을 찾았다. 직접 10개에서 100개로 조건식을 늘려 비교했는데 약, 2배 이상으로 switch-case문의 성능이 더 좋은 것으로 나타났다. 꼭 보자

</aside>

if-else vs switch - javatpoint

[자바 최적화 연구] if와 switch 조건문 연산 속도 비교 (int) | YeopBox

switch-case, if-else 성능 비교