이제 기본적인 연산을 위한 Math 클래스를 정리해보자!
참고로 import java.math.*; 이걸 할 필요 없다.
Math 연산
Math 클래스는 java.lang 패키지에 포함되어 있어 import 없이 바로 사용할 수 있습니다. 또한, 모든 메서드가 **정적(static)**으로 선언되어 있어, new Math()처럼 객체를 생성할 필요 없이 Math.메서드() 형태로 바로 호출하면 됩니다.
기본 연산
| Math.abs(num) | 숫자의 절댓값을 반환합니다. int, long, double 등 모든 숫자 타입에 사용 가능합니다. | 파라미터와 동일 | int a = Math.abs(-10); // 10 double d = Math.abs(-3.14); // 3.14 |
| Math.max(a, b) | 두 숫자 중 더 큰 값을 반환합니다. | 파라미터와 동일 | int m = Math.max(10, 20); // 20 |
| Math.min(a, b) | 두 숫자 중 더 작은 값을 반환합니다. | 파라미터와 동일 | int m = Math.min(10, 20); // 10 |
제곱, 제곱근
| Math.pow(a, b) | a의 b**승 (거듭제곱)**을 계산합니다. | double | double p = Math.pow(2, 10); // 1024.0 (주의!) 파라미터와 반환값이 모두 double 타입이므로, 정수 계산 시 (int)로 형변환이 필요할 수 있습니다. |
| Math.sqrt(num) | 숫자의 **제곱근(루트)**을 계산합니다. | double | double r = Math.sqrt(9); // 3.0 <br> double r2 = Math.sqrt(2); // 1.414... |
반환값이 double다 타입에 주의하자.
만약 n제곱근을 구하고 싶다면.
double number = 27.0;
// 27.0의 (1.0 / 3.0)승을 계산합니다.
// (주의!) 1/3이 아니라 1.0/3.0 처럼 double 형태로 나눠야 소수점 계산이 됩니다.
double cubicRoot = Math.pow(number, 1.0 / 3.0);
System.out.println(number + "의 세제곱근: " + cubicRoot);
// 출력: 27.0의 세제곱근: 3.0
// 81의 네제곱근 (81의 1/4승)
double num1 = 81.0;
double fourthRoot = Math.pow(num1, 1.0 / 4.0);
System.out.println(num1 + "의 네제곱근: " + fourthRoot); // 출력: 81.0의 네제곱근: 3.0
올림, 내림, 반올림
| Math.ceil(d) | (Ceiling: 천장) 주어진 실수보다 크거나 같은 정수 중 가장 작은 정수(올림)를 반환합니다. | double | Math.ceil(3.14); // 4.0 <br> Math.ceil(3.0); // 3.0 Math.ceil(-3.14); // -3.0 (더 큰 정수) |
| Math.floor(d) | (Floor: 바닥) 주어진 실수보다 작거나 같은 정수 중 가장 큰 정수(내림/버림)를 반환합니다. | double | Math.floor(3.14); // 3.0 <br> Math.floor(3.99); // 3.0 Math.floor(-3.14); // -4.0 (더 작은 정수) |
| Math.round(d) | 소수점 첫째 자리에서 반올림한 정수를 반환합니다. | long | Math.round(3.14); // 3 Math.round(3.5); // 4 Math.round(-3.14); // -3 Math.round(-3.5); // -3 (참고) round(float)는 int를 반환. |
만약에 정수가 아니라 특정 자리에서 하고 싶다면, 자릿수를 곱해서 올린 다음에 하는 것 밖에 방법이 없다고 한다.
랜덤
| 기능 | Math.random() 방식 | Random 클래스 방식 | 설명 |
| 객체 생성 | 필요 없음 (정적 메서드) | Random rand = new Random(); | Random 객체를 한 번 생성해두고 재사용하는 것이 일반적입니다. |
| 0 ~ (n-1) 범위 정수 | (int) (Math.random() * n) | rand.nextInt(n); | nextInt(n)은 0부터 n-1까지의 정수를 반환하여 훨씬 직관적입니다. |
| min ~ max 범위 정수 | (int) (Math.random() * (max - min + 1)) + min | rand.nextInt(max - min + 1) + min; | 원리는 동일하지만 nextInt를 쓰는 쪽이 의도가 명확합니다. |
| 기타 기능 | double 난수만 제공 | nextBoolean(), nextDouble(), nextLong() 등 다양한 타입의 난수를 제공합니다. | |
import java.util.Random;
public class Lotto {
public static void main(String[] args) {
Random rand = new Random();
int min = 1;
int max = 45;
// 1부터 45까지의 난수 생성
// rand.nextInt(45) -> 0~44, 여기에 +1을 하여 1~45 범위를 만듦
int lottoNumber = rand.nextInt(max - min + 1) + min;
System.out.println("이번 주 로또 번호는: " + lottoNumber);
}
}
기타
| Math.PI | 원주율 π (3.14159...) 값을 담고 있는 상수입니다. (메서드 X) | double | double area = Math.PI * r * r; |
댓글