우와한 개발자

[Java] 수학 관련 클래스(Random, Math)

by 우와한개발자

[ 수학 관련 클래스 ]

  • 수학 관련 클래스들은 java.lang, java.util 패키지에 정의되어 있으며, 난수 생성 및 수학 연산에 사용

1. Random

  • 난수를 발생시키는 클래스.
  • Math.random()보다 더 직관적이고 다양한 타입의 난수 생성 가능

 

1) 생성자

생성자 설명
Random() 현재 시간 기반으로 seed 자동 설정
Random(long seed) 지정한 seed로 생성. 같은 seed → 같은 순서의 난수
⚠️ seed란?
- 난수 생성의 기준값.
- 같은 seed → 항상 같은 순서의 난수 생성
- 데이터 분석 시 결과 재현이 필요할 때 seed를 고정해서 사용
- seed를 지정하지 않으면 현재 시간 기반으로 자동 설정 → 실행할 때마다 다른 난수

⚠️ 범위 표기법 (수학 구간 표기)
- 대괄호 [] → 포함,
- 소괄호() → 불포함
표기 의미 예시
[a, b] a 이상 b 이하 (양쪽 포함) [0, 100] → 0~100
[a, b) a 이상 b 미만 (오른쪽 불포함) [0, 100) → 0~99
(a, b] a 초과 b 이하 (왼쪽 불포함) (0, 100] → 1~100
(a, b) a 초과 b 미만 (양쪽 불포함) (0, 100) → 1~99

2) 주요 메서드

메서드 반환 타입 설명
nextBoolean() boolean true 또는 false 반환
nextInt() int int 범위의 임의의 값 반환
nextInt(int bound) int 0 이상 bound 미만의 값 반환
nextLong() long long 범위의 임의의 값 반환
nextDouble() double 0.0 이상 1.0 미만의 값 반환
nextFloat() float 0.0 이상 1.0 미만의 값 반환
nextBytes(byte[] bytes) void 임의의 바이트를 배열에 저장
setSeed(long seed) void seed 값 재설정
Random random = new Random();

random.nextInt(100);      // 0~99 사이 정수
random.nextInt(6) + 1;    // 1~6 주사위

// 같은 seed → 같은 결과
Random r1 = new Random(42);
Random r2 = new Random(42);
r1.nextInt(); // r2.nextInt()와 동일한 값

 

2. Math

  • 지수, 로그, 제곱근, 삼각 함수 등 수학 연산 메서드 모음.
  • 모든 멤버가 static이라 객체 생성 없이 바로 사용 가능

1) 주요 메서드

메서드 반환 타입 설명
Math.abs(a) double / int 등 절댓값 반환
Math.ceil(a) double 올림
Math.floor(a) double 내림
Math.round(a) long / int 반올림
Math.max(a, b) double / int 등 두 수 중 큰 값 반환
Math.min(a, b) double / int 등 두 수 중 작은 값 반환
Math.pow(a, b) double a의 b승 반환
Math.sqrt(a) double 제곱근 반환
Math.random() double 0.0 이상 1.0 미만 난수 반환
Math.log(a) double 자연로그(ln) 반환
Math.log10(a) double 밑이 10인 로그 반환
Math.sin(a) double sin 반환 (a는 라디안)
Math.cos(a) double cos 반환 (a는 라디안)
Math.tan(a) double tan 반환 (a는 라디안)
Math.pow(2, 3);    // 8.0
Math.sqrt(16);     // 4.0
Math.abs(-5);      // 5

// 삼각함수 — 도(degree) → 라디안 변환 필요: degree * Math.PI / 180
Math.sin(30 * (Math.PI / 180)); // 0.5
Math.cos(60 * (Math.PI / 180)); // 0.5
Math.tan(45 * (Math.PI / 180)); // 1.0

// 반올림 / 올림 / 내림
Math.round(-3.6);  // -4     (반올림)
Math.round(-3.4);  // -3
Math.ceil(-3.6);   // -3.0   (올림)
Math.floor(-3.6);  // -4.0   (내림)
⚠️ (int) 형변환 vs Math.floor() 차이(int)-3.6 → -3 (소수점 버림, 0 방향) Math.floor(-3.6) → -4.0 (음의 무한대 방향) 음수에서 결과가 달라지므로 주의
round() ceil() floor()
-3.6 -4 -3.0 -4.0
-3.4 -3 -3.0 -4.0
3.5 4 4.0 3.0
3.6 4 4.0 3.0

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기