자바의 Math 클래스는 java.lang 패키지에 포함되어 있으며,
수학적 계산에 자주 쓰이는 정적(static) 메서드와 상수들을 제공한다.
📘 Java Math 클래스 정리
Math 클래스는 java.lang 패키지에 포함되어 있으며,
모든 메서드가 static으로 선언되어 있어 객체 생성 없이 사용 가능 (Math.method()).
🔢 상수 (Constants)
| 상수 | 설명 | 예시 |
|---|
Math.PI | 원주율 π (3.1415926535...) | Math.PI * r * r |
Math.E | 자연상수 e (2.7182818...) | Math.pow(Math.E, 2) |
🧮 기본 연산 (기초 산술)
| 메서드 | 설명 | 예시 | 결과 |
|---|
Math.abs(x) | 절댓값 | Math.abs(-5) | 5 |
Math.max(a, b) | 두 수 중 큰 값 | Math.max(3, 9) | 9 |
Math.min(a, b) | 두 수 중 작은 값 | Math.min(3, 9) | 3 |
Math.addExact(a, b) | 오버플로 감지 덧셈 | Math.addExact(1_000_000_000, 1_000_000_000) | 예외 발생 시 ArithmeticException |
Math.subtractExact(a, b) | 오버플로 감지 뺄셈 | Math.subtractExact(-2_000_000_000, 1_000_000_000) | 예외 발생 |
📈 제곱, 제곱근, 지수, 로그
| 메서드 | 설명 | 예시 | 결과 |
|---|
Math.pow(a, b) | a의 b제곱 | Math.pow(2, 3) | 8.0 |
Math.sqrt(x) | 제곱근 | Math.sqrt(9) | 3.0 |
Math.cbrt(x) | 세제곱근 | Math.cbrt(27) | 3.0 |
Math.exp(x) | e^x 계산 | Math.exp(1) | 2.718... |
Math.log(x) | 자연로그 (ln x) | Math.log(Math.E) | 1.0 |
Math.log10(x) | 상용로그 (log₁₀ x) | Math.log10(100) | 2.0 |
📐 삼각함수 (Trigonometric)
| 메서드 | 설명 | 예시 | 결과 |
|---|
Math.sin(rad) | 사인 (radian 단위) | Math.sin(Math.PI / 2) | 1.0 |
Math.cos(rad) | 코사인 | Math.cos(0) | 1.0 |
Math.tan(rad) | 탄젠트 | Math.tan(Math.PI / 4) | 1.0 |
Math.asin(x) | 아크사인 (역사인) | Math.asin(1) | 1.5707... (π/2) |
Math.acos(x) | 아크코사인 | Math.acos(0) | 1.5707... |
Math.atan(x) | 아크탄젠트 | Math.atan(1) | 0.7853... (π/4) |
Math.toRadians(deg) | 도 → 라디안 변환 | Math.toRadians(180) | 3.14159... |
Math.toDegrees(rad) | 라디안 → 도 변환 | Math.toDegrees(Math.PI) | 180.0 |
🎲 반올림 관련
| 메서드 | 설명 | 예시 | 결과 |
|---|
Math.round(x) | 반올림 (소수점 첫째 자리에서) | Math.round(3.6) | 4 |
Math.floor(x) | 내림 (가장 가까운 작은 정수) | Math.floor(3.9) | 3.0 |
Math.ceil(x) | 올림 (가장 가까운 큰 정수) | Math.ceil(3.1) | 4.0 |
Math.rint(x) | 가장 가까운 정수 (짝수 우선 반올림) | Math.rint(2.5) → 2.0, Math.rint(3.5) → 4.0 | |
🎯 난수 (Random)
| 메서드 | 설명 | 예시 | 결과 |
|---|
Math.random() | 0.0 이상 1.0 미만 난수 생성 | Math.random() | 0.12345... |
Math.random() * n | 0 이상 n 미만 실수 | Math.random() * 10 | 0.0 ~ 9.999... |
(int)(Math.random() * n) | 0 이상 n-1 이하 정수 | (int)(Math.random() * 6) | 0~5 |
(int)(Math.random() * (max - min + 1)) + min | 특정 범위 정수 | 1~10 범위 ⇒ (int)(Math.random() * 10) + 1 | |
🧠 기타 유용 메서드
| 메서드 | 설명 | 예시 | 결과 |
|---|
Math.signum(x) | 부호 반환 (-1, 0, 1) | Math.signum(-10) | -1.0 |
Math.hypot(x, y) | 피타고라스 계산 √(x² + y²) | Math.hypot(3, 4) | 5.0 |
Math.copySign(a, b) | a의 크기에 b의 부호를 붙임 | Math.copySign(3, -2) | -3.0 |
Math.nextUp(x) / Math.nextDown(x) | 주어진 수보다 약간 큰/작은 부동소수값 | Math.nextUp(1.0) | 1.0000000000000002 |
🚀 사용 팁
✅ Math 클래스는 객체 생성 불가 (private 생성자)
✅ import 불필요 — java.lang 자동 포함
✅ 고정밀 계산이 필요하면 BigDecimal 사용
✅ 난수는 java.util.Random 혹은 ThreadLocalRandom 권장 (Math.random()보다 안정적)