-
[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