ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Math.max() vs 삼항연산자
    Java 2022. 2. 7. 00:01

    두 숫자를 비교하기 위해 Math.max() 메서드를 사용하거나, 삼항 연산자를 사용하거나, if-else문을 사용합니다.

    이중에 if-else는 코드가 길어지기 때문에 제외하고 삼항연산자와 Math.max() 메서드 중 어떤 것이 더 빠를까(효율적일까) 궁금점이 생겨서 알아보게 되었습니다.

     

    우선 내부적으로 Math.max() 메서드가 어떻게 이루어지는지 살펴보겠습니다

      public static int max(int a, int b) {
            return (a >= b) ? a : b;
        }

    내부적으로 삼항연산자를 사용하여 return 합니다.

     

    따라서 실행을 테스트해보기 전에도 삼항 연산자가 조금 더 빠를 것 같다고 예상해 볼 수 있습니다.

     

    실제로 Math.max() 메서드와 삼항연잔자를 20억 번 테스트해보겠습니다.

    public class MathMaxVsIfElseTest {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int size = 200_000_000;
    		int num1 = 30;
    		int num2 = 50;
    		int result;
    		
    		double before = System.currentTimeMillis();
    		
    		for(int i = 0; i < size; i++) {
    			result = Math.max(num1, num2);
    		}
    		
    		double after = System.currentTimeMillis();
    		
    		System.out.println(after - before);
    		
    		before = System.currentTimeMillis();
    		for(int i = 0; i < size; i++) {
    			result = num1 > num2 ? num1 : num2;
    		}		
    		after = System.currentTimeMillis();
    		System.out.println(after - before);
    		
    	}
    
    }

    Math.max() 메서드는 3 밀리세컨드, 삼항 연산자는 1 밀리세컨드의 시간이 소요됩니다.

    따라서 삼항 연산자를 사용하는 것이 더 효율적입니다.

    하지만 가독성의 경우는 Math.max()가 훨씬 직관적이어서 상황에 따라 알맞은 것을 사용하면 좋을 것 같습니다.

     

    다음은 System.nanoTime()을 사용했을 때의 결과입니다.

    Math.max :  2747000.0
    삼항연산자 : 1188800.0

    'Java' 카테고리의 다른 글

    [Java] 스트림의 최종연산  (0) 2022.02.10
    [Java] 스트림의 중간연산  (0) 2022.02.09
    [Java] Comparator와 Comparable란?  (0) 2022.02.03
    [Java] 스트림의 생성  (0) 2022.01.31
    [Java] 스트림(Stream)이란? + 특징, 등장배경  (0) 2022.01.29

    댓글

Designed by Tistory.