다양한 기능 제공하는 유틸리티 클래스 모음
난수 생성, 날짜 및 시각 관리, 자료구조 ···
난수 발생 기능 전용 클래스
static 메서드가 아닌 일반 메서드 형태로 제공되므로 인스턴스 생성 필수
정수뿐만 아니라 다양한 타입의 난수 제공
-> nextXXX()
메서드 호출하여 기본 데이터타입 난수 발생
import java.util.Random; // import 필수!
public static void main(String[] args) {
Random r = new Random(); // 인스턴스 생성 필수!
for(int i = 0; i <= 10; i++) {
System.out.println(r.nextInt());
// int형 범위 난수 발생(-21억 ~ 21억)
System.out.println(r.nextInt(10));
// 파라미터에 정수 줄 경우 0 ~ n-1 범위의 난수 발생
System.out.println(r.nextInt(10) + 1);
// n값까지의 난수 발생 위해서는 +1 필요
System.out.println(r.nextDouble());
// double형 범위 난수 발생
System.out.println(r.nextBoolean());
// boolean형 난수 발생
// true 또는 false 값 리턴
}
}
< 난수 발생 방법 >
Math.random()
메서드 통해 double 타입 난수 발생- Random 클래스 인스턴스 생성 후
nextXXX()
메서드 통해 각 타입에 대한 난수 발생
날짜 및 시각 관련 기능 제공 클래스
대부분의 생성자 및 메서드가 deprecate 처리되어 있음
-> 다양한 API들이 여전히 Date 타입 사용하는 경우 많음
toString()
메서드 오버라이딩 되어있음
-> 날짜 및 시각 정보 쉽게 출력 가능
getTime()
호출하면 해당 객체의 날짜 정보가 long 타입으로 리턴됨
-> 두 개의 Date 객체의 getTime()
결과를 연산하면 두 날짜 간의 차이 계산 가능
import java.util.Date;
public static void main(String[] args) {
Date d1 = new Date();
System.out.println(d1);
// toString() 메서드 생략되어 있음(출력문에는 생략 가능)
// 파라미터에 아무 값도 전달 안하면 현재 날짜, 시각 출력됨
Date d2 = new Date(0);
System.out.println(d2);
// 1970년 1월 1일 9시 기준 설정
d2 = new Date(2000000000000L);
// 파라미터에 long 타입 값 전달하면
// 기준 시각으로부터 지정된 밀리초만큼 지난 시각으로 설정됨!
}
⭐ D-Day 계산기
long differentDate = d2.getTime() - d1.getTime();
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("오늘입니다!");
}
주로 날짜 및 시각 조작하는 용도의 클래스
-> 날짜 및 시각 표현도 가능함
추상클래스이므로 인스턴스 생성없이 제공되는 인스턴스를 static
메서드인 getInstance()
메서드로 리턴받아 사용
get()
메서드로 날짜 및 시각 정보 조회
-> 파라미터로 Calendar.XXX
상수 통해 가져올 정보의 종류 지정
set()
메서드로 날짜 맟 시각 정보 설정
-> 파라미터로 날짜 및 시각 설정 위한 상수 사용
import java.util.Calender;
pulbic static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// Calender는 인스턴스 생성 불가능
System.out.println(cal);
// toString() 메서드가 오버라이딩 되어 있기는 한데
// 출력해서보면 식별이 어려움
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) +1;
// 0 ~ 11의 숫자를 사용하기 때문에 +1을 해줘야 원하는 달 출력 가능
int day = cal.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "/" + month + "/" + day);
int hour = cal.get(Calendar.HOUR_OF_DAY); // 24시간제(Hour : 12시간제)
int min = cal.get(Calendar.MINUTE);
int sec = cal.get(Calendar.SECOND);
System.out.println(hour + ":" + min + ":" + sec);
}
- Date <-> Calendar 상호 변환
getTime()
메서드 호출하여 Date 타입 리턴Date date = cal.getTime();
System.out.println(date);
// 현재 날짜와 시각 정보 리턴됨
- Date -> Calendar로 변환 시
setTime()
메서드 호출하여 Date 타입 객체 파라미터로 전달Calendar cal2 = Calendar.getInstance();
cal2.setTime(date);
cal2.set(2003, 05, 23);
// set() 메서드 사용해서 날짜 및 시각 정보 설정
// 연, 월, 일 직접 전달
// 월은 0~11 값을 리턴하므로 설정 시에는 -1 필요!
// 따라서 2003년 6월 23일이 출력됨
cal2.set(Calendar.YEAR, 2002);
cal2.set(Calendar.MONTH, 8 - 1);
// 각 항목을 별도로 변경할때는 set(int filed, int value) 메서드 사용
// get() 메서드와 마찬가지로 Calendar.XXX 상수 사용
Date date2 = cal2.getTime();
System.out.println(date2);