java.lang.Math 클래스
- java.lang에서 기본 제공 되는 클래스 중에 수학 관련 상수 및 메서드를 제공하는 클래스
- String 클래스와 마찬가지로 상속 불가능한 클래스(final 클래스)
- 인스턴스 생성이 불가능한 클래스
- Math 클래스의 모든 멤버는 static으로 선언되어 인스턴스 생성 없이도 클래스명만으로도 접근 가능.
// Math 클래스의 다양한 멤버
System.out.println("PI 값 = " + Math.PI);
System.out.println("-5 의 절대값 = " + Math.abs(-5));
System.out.println("4 의 제곱근 = " + Math.sqrt(4));
System.out.println("10 vs 5 의 최대값 = " + Math.max(10, 5));
System.out.println("10 vs 5 의 최소값 = " + Math.min(10, 5));
System.out.println("PI 의 소수점 첫째자리 반올림값 = " + Math.round(Math.PI));
// 소수점 x번째 자리 반올림값 계산 방법
// 숫자 * 10^(x-1) 을 반올림 한 후 다시 결과값을 10^(x-1) 만큼 나눠야함
// (즉, 숫자 * 10^자릿수 / 자릿수.0)
// => 주의! 나누는 숫자는 반드시 실수형(xxx.0) 으로 지정해야함!
// ex) 소수점 셋째자리 반올림 : 숫자 * 10^(3-1) / 10^(3-1).0
double roundNum = Math.round(Math.PI * 100) / 100.0;
System.out.println("PI 의 소수점 셋째자리 반올림값 = " + roundNum);
// random() : double 범위(0.0 < x < 1.0)의 난수 x 발생
// 난수 발생 기본 공식 : (int)(난수 * 상한값) => 0 ~ 상한값-1 범위 난수
// 난수 발생 기본 공식 : (int)(난수 * 상한값) + 1 => 1 ~ 상한값 범위 난수
// 난수 발생 복합 공식 : (int)(난수 * (상한값 - 하한값 + 1) + 하한값)
// => 1 ~ 상한값 범위 난수
int upperNum = 45/*상한값*/, lowerNum = 1/*하한값*/;
for(int i = 1; i <= 10; i++) {
// 난수 10개 발생
// System.out.println(Math.random()); // 0.0 <= x < 1.0
// System.out.println((int)(Math.random() * 10)); // 0 ~ 9 사이 난수 발생
// => 소수점 첫째자리 숫자에 10을 곱해 정수 부분으로 올린 뒤
// 나머지 소수점 자리의 모든 숫자 버림(정수화)
// System.out.println((int)(Math.random() * 10) + 1); // 1 <= x <= 10
// => 1 ~ 10 사이의 난수 발생
// 1 ~ 45 사이의 난수 발생
// System.out.println((int)(Math.random() * 45) + 1); // 1 <= x <= 45
// 복합 공식을 활용한 1 ~ 45 사이의 난수 발생
// System.out.println((int)(Math.random() * (upperNum - lowerNum + 1) + lowerNum));
읽어보자
Random 클래스
- java.util 패키지 => import 필수
- 난수 발생 기능 전용 클래스
- static 멤버가 아닌 일반 멤버로 제공되므로 인스턴스 생성 필수
- nextXXX() 메서드를 호출하여 각 기본 데이터타입의 난수 발생 처리
=> XXX은 기본 데이터타입 이름을 사용
- Math.random() 메서드에 비해 단순 과정을 통해 난수 발생 가능
=> 특히 정수형 난수의 경우 별도의 정수화 과정 없이 처리 가능.
// Random 클래스의 인스턴스 생성
Random r = new Random();
for(int i = 1; i <= 10; i++) {
// System.out.println("int형 범위 난수 : " + r.nextInt());
// r.nextInt(상한값) : 0 ~ 상한값-1 사이의 난수 발생
// System.out.println("정수 0 ~ 9 사이 난수 : " + r.nextInt(10));
// r.nextInt(상한값) + 1 : 1 ~ 상한값 사이의 난수 발생
System.out.println("정수 1 ~ 10 사이 난수 : " + (r.nextInt(10) + 1));
// System.out.println("boolean 타입 난수 : " + r.nextBoolean());
// Math.random() 메서드와 동일한 실수 범위 난수도 발생 가능
// System.out.println("double 타입 난수 : " + r.nextDouble());
}
// 비슷하게 인증번호도 만들수 있음
// - 4자리(0000 ~ 9999) ~ 6자리(000000 ~ 999999) 정도의 정수형 난수 사용
for(int i = 1; i <= 10; i++) {
// 4자리 난수 생성
int rNum = (int)(Math.random() * 10000); // 0 ~ 9999 난수
// System.out.println("인증번호 : " + rNum);
System.out.printf("인증번호 : %04d\n", rNum);
}
읽어보자잇
java.util.Date 클래스
- 날짜 관련 기능을 제공하는 클래스
- 대부분의 메서드가 deprecatedd 처리 되어 있음.
=> 다양한 API 들에서 여전히 Date 타입을 리턴하거나 하는 용도로 사용
- toString() 메서드가 오버라이딩 되어 있음
=> 날짜 및 시각 정보 확인 편리
=> 영어권 날짜 및 시각 형태로 표기되므로 형식 변경을 위해서는
SimpleDateFormat 클래스로 형식 변경 필요
// 기본 생성자를 호출하여 객체를 생성하면 현재 날짜 및 시각 정보 객체 생성
Date d1 = new Date();
System.out.println(d1); // toString() 생략 가능
// => Tue Mar 23 12:34:18 KST 2021 형태로 출력됨
// 생성자에 long 타입 값 전달 시 해당 값에 맞는 날짜 및 시각 정보 객체 생성
// Date d2 = new Date(0L); // 1970년 1월 1일 09시 00분 00초 기준
Date d2 = new Date(2000000000000L); // 밀리초 단위의 long 타입 값을
// 기준 시각으로부터 계산하여 객체 생성
System.out.println(d2);
// 생성자에 연,월,일 등의 파라미터 전달 시
// 직관적인 날짜 지정 방식이 아니므로 주의! (사용 권장 X)
Date d3 = new Date(2000, 1, 1);
System.out.println(d3);
// getTime() : 현재 날짜 및 시각 정보를 long 타입 값으로 리턴
long date1 = d1.getTime();
long date2 = d2.getTime();
System.out.println("date1 : " + date1);
System.out.println("date2 : " + date2);
// System.out.println(date2 - date1);
long differentDate = date1 - date2;
if(differentDate > 0) {
System.out.println((differentDate / 1000 / 60 / 60 / 24) + " 일 남았습니다!");
} else if(differentDate < 0) {
System.out.println((differentDate / 1000 / 60 / 60 / 24) + " 일 지났습니다!");
} else {
System.out.println("바로 지금(오늘) 입니다.");
}
'develop > Java' 카테고리의 다른 글
제네릭(Generic, 일반화) (1) | 2021.04.05 |
---|---|
Collection Framework(컬렉션 프레임워크) (0) | 2021.04.04 |
StringBuilder, StringBuffer 클래스 (0) | 2021.03.23 |
String 클래스 (0) | 2021.03.21 |
Object 클래스 (0) | 2021.03.21 |