[Java ] 개념노트 41 Math 클래스 이해하기

[Java 개념노트 41] Math 클래스 이해하기

안녕하세요. Java 개념노트 시리즈 마흔한 번째 글입니다.

지난 글에서는 기본 자료형을 객체처럼 다룰 수 있게 해주는 Wrapper 클래스에 대해 정리했습니다. 이번 글에서는 자바에서 수학 계산을 할 때 자주 사용하는 Math 클래스에 대해 알아보겠습니다.

프로그래밍을 하다 보면 최댓값, 최솟값, 절댓값, 반올림, 올림, 내림, 제곱, 제곱근, 랜덤 숫자 같은 계산이 필요할 때가 많습니다. 자바에서는 이런 기능을 직접 만들지 않아도 Math 클래스를 통해 사용할 수 있습니다.


1. Math 클래스란?

Math 클래스는 자바에서 수학 계산과 관련된 기능을 제공하는 클래스입니다.

최댓값, 최솟값, 절댓값, 반올림, 제곱, 제곱근, 랜덤 숫자 생성 등 자주 쓰는 수학 기능들이 메서드로 준비되어 있습니다.

쉽게 말하면
Math 클래스는 자바가 미리 준비해둔 수학 계산 도구 모음입니다.

2. Math 클래스는 객체를 만들지 않고 사용한다

Math 클래스의 메서드는 대부분 static 메서드입니다. 그래서 객체를 만들지 않고 클래스 이름으로 바로 사용할 수 있습니다.

int result = Math.max(10, 20);

System.out.println(result);

실행 결과는 다음과 같습니다.

20

new Math()처럼 객체를 만들지 않고 Math.max()처럼 클래스 이름으로 바로 호출합니다.

핵심 포인트
Math 클래스는 객체 생성 없이 Math.메서드명() 형태로 사용합니다.

3. Math 클래스는 import가 필요할까?

Math 클래스는 java.lang 패키지에 있습니다. java.lang 패키지는 자바에서 자동으로 import되기 때문에 따로 import하지 않아도 사용할 수 있습니다.

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.max(10, 20));
    }
}

위 코드처럼 import java.lang.Math;를 따로 작성하지 않아도 됩니다.

4. Math.max() 최댓값 구하기

Math.max()는 두 값 중 더 큰 값을 반환합니다.

public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        int result = Math.max(a, b);

        System.out.println(result);
    }
}

실행 결과는 다음과 같습니다.

20

1020 중 더 큰 값은 20이므로 20이 출력됩니다.

5. Math.min() 최솟값 구하기

Math.min()은 두 값 중 더 작은 값을 반환합니다.

public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        int result = Math.min(a, b);

        System.out.println(result);
    }
}

실행 결과는 다음과 같습니다.

10

1020 중 더 작은 값은 10입니다.

6. Math.abs() 절댓값 구하기

Math.abs()는 절댓값을 반환합니다. 절댓값은 음수에서 부호를 제거한 값이라고 생각하면 됩니다.

public class Main {
    public static void main(String[] args) {
        int number = -10;

        int result = Math.abs(number);

        System.out.println(result);
    }
}

실행 결과는 다음과 같습니다.

10

-10의 절댓값은 10입니다.

7. Math.round() 반올림하기

Math.round()는 소수점 값을 반올림합니다.

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.round(3.4));
        System.out.println(Math.round(3.5));
        System.out.println(Math.round(3.6));
    }
}

실행 결과는 다음과 같습니다.

3
4
4

3.43으로, 3.53.64로 반올림됩니다.

주의
Math.round(double)의 결과는 long 타입입니다. 필요하면 타입을 맞춰서 사용해야 합니다.

8. Math.ceil() 올림하기

Math.ceil()은 소수점이 있으면 값을 올림합니다. 결과는 double 타입입니다.

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.ceil(3.1));
        System.out.println(Math.ceil(3.0));
        System.out.println(Math.ceil(3.9));
    }
}

실행 결과는 다음과 같습니다.

4.0
3.0
4.0

3.1은 올림되어 4.0이 됩니다. 3.0은 이미 정수 형태이므로 그대로 3.0입니다.

9. Math.floor() 내림하기

Math.floor()는 소수점 아래를 버리고 내림합니다. 결과는 double 타입입니다.

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.floor(3.1));
        System.out.println(Math.floor(3.9));
        System.out.println(Math.floor(3.0));
    }
}

실행 결과는 다음과 같습니다.

3.0
3.0
3.0

3.9도 내림하면 3.0이 됩니다.

10. round, ceil, floor 비교

반올림, 올림, 내림은 자주 헷갈리므로 표로 정리해보겠습니다.

메서드 의미 예시 결과
Math.round() 반올림 Math.round(3.5) 4
Math.ceil() 올림 Math.ceil(3.1) 4.0
Math.floor() 내림 Math.floor(3.9) 3.0

11. Math.pow() 제곱 구하기

Math.pow()는 제곱 값을 구할 때 사용합니다.

public class Main {
    public static void main(String[] args) {
        double result1 = Math.pow(2, 3);
        double result2 = Math.pow(5, 2);

        System.out.println(result1);
        System.out.println(result2);
    }
}

실행 결과는 다음과 같습니다.

8.0
25.0

Math.pow(2, 3)23제곱이므로 8.0입니다.

12. Math.sqrt() 제곱근 구하기

Math.sqrt()는 제곱근을 구할 때 사용합니다.

public class Main {
    public static void main(String[] args) {
        double result1 = Math.sqrt(9);
        double result2 = Math.sqrt(16);

        System.out.println(result1);
        System.out.println(result2);
    }
}

실행 결과는 다음과 같습니다.

3.0
4.0

9의 제곱근은 3이고, 16의 제곱근은 4입니다.

13. Math.random() 랜덤 숫자 만들기

Math.random()은 0.0 이상 1.0 미만의 실수 값을 무작위로 반환합니다.

public class Main {
    public static void main(String[] args) {
        double random = Math.random();

        System.out.println(random);
    }
}

실행할 때마다 결과는 달라집니다.

0.728391...

Math.random()의 결과는 항상 0.0 <= 값 < 1.0 범위입니다.

주의
Math.random()1.0을 포함하지 않습니다. 즉, 0.0 이상 1.0 미만의 값을 반환합니다.

14. 1부터 10까지 랜덤 정수 만들기

Math.random()은 실수를 반환하기 때문에 정수 범위로 바꾸려면 계산이 필요합니다.

public class Main {
    public static void main(String[] args) {
        int number = (int)(Math.random() * 10) + 1;

        System.out.println(number);
    }
}

이 코드는 1부터 10까지의 정수 중 하나를 반환합니다.

Math.random()          → 0.0 이상 1.0 미만
Math.random() * 10     → 0.0 이상 10.0 미만
(int)(...)             → 0 이상 9 이하 정수
+ 1                    → 1 이상 10 이하 정수

15. 원하는 범위의 랜덤 정수 공식

원하는 범위의 랜덤 정수를 만들 때는 다음 공식을 사용할 수 있습니다.

int number = (int)(Math.random() * 개수) + 시작값;

예를 들어 5부터 10까지의 정수는 총 6개입니다.

int number = (int)(Math.random() * 6) + 5;

범위는 다음과 같습니다.

가능한 값: 5, 6, 7, 8, 9, 10

16. Math.PI와 Math.E

Math 클래스에는 자주 사용하는 수학 상수도 준비되어 있습니다.

상수 의미
Math.PI 원주율
Math.E 자연상수
public class Main {
    public static void main(String[] args) {
        System.out.println(Math.PI);
        System.out.println(Math.E);
    }
}

실행 결과는 다음과 비슷합니다.

3.141592653589793
2.718281828459045

17. Math 클래스 주요 메서드 정리

자주 사용하는 Math 클래스 메서드를 정리하면 다음과 같습니다.

메서드 역할 예시
max() 큰 값 반환 Math.max(10, 20)
min() 작은 값 반환 Math.min(10, 20)
abs() 절댓값 반환 Math.abs(-10)
round() 반올림 Math.round(3.5)
ceil() 올림 Math.ceil(3.1)
floor() 내림 Math.floor(3.9)
pow() 제곱 Math.pow(2, 3)
sqrt() 제곱근 Math.sqrt(9)
random() 랜덤 실수 반환 Math.random()

18. Math 클래스 전체 예제

이번에는 여러 Math 메서드를 함께 사용하는 예제를 보겠습니다.

public class Main {
    public static void main(String[] args) {
        int a = -10;
        int b = 20;

        System.out.println("최댓값: " + Math.max(a, b));
        System.out.println("최솟값: " + Math.min(a, b));
        System.out.println("절댓값: " + Math.abs(a));

        double number = 3.7;

        System.out.println("반올림: " + Math.round(number));
        System.out.println("올림: " + Math.ceil(number));
        System.out.println("내림: " + Math.floor(number));

        System.out.println("2의 3제곱: " + Math.pow(2, 3));
        System.out.println("16의 제곱근: " + Math.sqrt(16));

        int randomNumber = (int)(Math.random() * 10) + 1;
        System.out.println("랜덤 숫자: " + randomNumber);
    }
}

실행 결과는 다음과 비슷합니다.

최댓값: 20
최솟값: -10
절댓값: 10
반올림: 4
올림: 4.0
내림: 3.0
2의 3제곱: 8.0
16의 제곱근: 4.0
랜덤 숫자: 7

랜덤 숫자는 실행할 때마다 달라질 수 있습니다.

19. Math 클래스 사용 시 자주 하는 실수

Math 클래스를 처음 사용할 때는 아래와 같은 실수를 자주 합니다.

실수 문제점 해결 방법
new Math()로 객체 생성 시도 Math는 객체 생성해서 쓰는 방식이 아님 Math.max()처럼 클래스 이름으로 호출
ceil(), floor() 결과를 int로 착각 결과는 double 타입 필요하면 형변환 사용
Math.random()이 1.0을 포함한다고 생각 1.0은 포함하지 않음 0.0 이상 1.0 미만으로 기억
랜덤 정수 범위 계산 실수 원하는 범위보다 작거나 크게 나올 수 있음 (int)(Math.random() * 개수) + 시작값 사용
실수 계산 결과가 딱 떨어질 것이라 기대 소수점 오차가 보일 수 있음 정확한 금액 계산은 나중에 BigDecimal 사용

20. 직접 연습해보기

아래 코드를 직접 작성하고 실행해보세요.

public class Main {
    public static void main(String[] args) {
        int score1 = 85;
        int score2 = 92;

        int maxScore = Math.max(score1, score2);
        int minScore = Math.min(score1, score2);

        System.out.println("높은 점수: " + maxScore);
        System.out.println("낮은 점수: " + minScore);

        int difference = Math.abs(score1 - score2);
        System.out.println("점수 차이: " + difference);

        double average = 88.6;

        System.out.println("평균 반올림: " + Math.round(average));
        System.out.println("평균 올림: " + Math.ceil(average));
        System.out.println("평균 내림: " + Math.floor(average));

        int dice = (int)(Math.random() * 6) + 1;
        System.out.println("주사위 결과: " + dice);
    }
}

실행 결과는 다음과 비슷합니다.

높은 점수: 92
낮은 점수: 85
점수 차이: 7
평균 반올림: 89
평균 올림: 89.0
평균 내림: 88.0
주사위 결과: 4

주사위 결과는 실행할 때마다 달라질 수 있습니다.

21. 이번 글 정리

이번 글에서는 자바에서 수학 계산 기능을 제공하는 Math 클래스에 대해 정리했습니다. 핵심 내용은 다음과 같습니다.

  • Math 클래스는 자바의 수학 계산 기능을 제공한다.
  • Math 클래스는 객체 생성 없이 클래스 이름으로 사용한다.
  • Math.max()는 두 값 중 큰 값을 반환한다.
  • Math.min()은 두 값 중 작은 값을 반환한다.
  • Math.abs()는 절댓값을 반환한다.
  • Math.round()는 반올림한다.
  • Math.ceil()은 올림한다.
  • Math.floor()은 내림한다.
  • Math.pow()는 제곱 값을 구한다.
  • Math.sqrt()는 제곱근을 구한다.
  • Math.random()은 0.0 이상 1.0 미만의 랜덤 실수를 반환한다.
  • 원하는 범위의 랜덤 정수는 (int)(Math.random() * 개수) + 시작값 형태로 만들 수 있다.

한 줄 요약
Math 클래스는 최댓값, 최솟값, 절댓값, 반올림, 제곱, 제곱근, 랜덤 숫자처럼 자주 쓰는 수학 기능을 제공하는 자바 기본 클래스입니다.

다음 글 예고
다음 글에서는 [Java 개념노트 42] Random 클래스 이해하기라는 주제로 랜덤 숫자를 더 다양한 방식으로 생성하는 방법을 정리해보겠습니다.

GWDEVELBlog Java 개념노트 시리즈