Math, Random
클래스 ]Math
클래스
java.lang.Math
클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있다.
Math
클래스가 제공하는 메소드는 모두 정적(static
)이므로 Math
클래스로 바로 사용이 가능하다.
Math
클래스의 메소드round()
메소드는 항상 소수점 첫째 자리에서 반올림해서 정수값을 리턴한다.random()
메소드는 0.0
과 1.0
사이의 범위에 속하는 하나의 double
타입의 값을 리턴한다.0.0
은 범위에 포함되고, 1.0
은 범위에 포함되지 않는다.Random
클래스
java.lang.Random
클래스는 난수를 얻어내기 위한 다양한 메소드를 제공한다.
Math.random()
메소드는 0.0
과 1.0
사이의 double
난수를 얻는 데만 사용한다면,Random
클래스는 boolean
, int
, long
, float
, double
난수를 얻을 수 있다.Random
클래스는 종자값(seed
)을 설정할 수 있다. Random
객체 생성 방법Random
클래스로부터 Random
객체를 생성하는 방법은 다음 두 가지가 있다.
Random
클래스의 메소드Date, Calendar
클래스 ]자바는 날짜 및 시각을 읽을 수 있도록
Date
와Calendar
클래스를 제공하고 있다. (모두java.util
패키지에 포함되어 있다.)
Date
클래스
Date
클래스는 날짜를 표현하는 클래스로, 객체 간에 날짜 정보를 주고 받을 때 주로 사용된다.
Date
클래스에는 여러 개의 생성자가 선언되어 있지만 대부분 Deprecated
(비권장)되어 현재는 Date()
생성자만 주로 사용된다. Date()
생성자는 컴퓨터의 현재 날짜를 읽어 Date
객체로 만든다.
Date now = new Date();
현재 날짜를 문자열로 얻고 싶다면 toString()
메소드를 사용하면 된다. toString()
메소드는 영문으로 된 날짜를 리턴하는데 만약 특정 문자열 포맷으로 얻고 싶다면 java.text.SimpleDateFormat
클래스를 이용하면 된다.
public class DateExample {
public static void main(String[] args) {
Date now = new Date();
String strNow1 = now.toString();
System.out.println(strNow1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
String strNow2 = sdf.format(now);
System.out.println(strNow2);
}
}
실행 결과
Sun Feb 06 15:23:41 GMT 2022
2022년 02월 06일 03시 23분 41초
Calendar
클래스
Calendar
클래스는 달력을 표현한 클래스로,
날짜와 시간을 계산하는 방법이 지역과 문화, 나라에 따라 다르기 때문에 추상 클래스로 선언되었다. 그렇기 때문에new
연산자를 사용해서 인스턴스를 생성할 수 없다.
그래서 Calendar
클래스에는 날짜와 시간을 계산하는데 꼭 필요한 메소드들만 선언되어 있고, 특정한 역법(날짜와 시간을 매기는 방법)을 따르는 계산 로직은 하위 클래스에서 구현하도록 되어 있다.
특별한 역법을 사용하는 경우가 아니라면 직접 하위 클래스를 만들 필요는 없고 Calendar
클래스의 정적 메소드인 getInstance()
메소드를 이용하면 현재 운영체제에 설정되어 있는 시간대를 기준으로 하는 Calendar
하위 객체를 얻을 수 있다.
Calendar now = Calendar.getInstance();
Calendar
객체를 얻었다면 get()
메소드를 이용해서 날짜와 시간에 대한 정보를 읽을 수 있다.
int year = now.get(Calendar.YEAR); //년도를 리턴
int month = now.get(Calendar.MONTH) + 1; //월을 리턴
int day = now.get(Calendar.DAY_OF_MONTH); //일을 리턴
int week = now.get(Calendar.DAY_OF_WEEK); //요일을 리턴
int amPm = now.get(Calendar.AM_PM); //오전/오후를 리턴
int hour = now.get(Calendar.HOUR); //시를 리턴
int minute = now.get(Calendar.MINUTE); //분을 리턴
int second = now.get(Calendar.SECOND); //초를 리턴
get()
메소드를 호출할 때 사용한 매개값은 모두 Calendar
클래스에 선언되어 있는 상수들이다.
Calendar
클래스의 문제점
Calendar
클래스는 다음과 같은 문제점을 갖는다.
Calendar
인스턴스는 불변 객체(immutable object
)가 아니라서 값이 수정될 수 있다.- 윤초(
leap second
)와 같은 특별한 상황을 고려하지 않는다.Calendar
클래스에서는 월(month
)을 나타낼 때 1월부터 12월을 0부터 11까지로 표현해야 하는 불편함이 있다.
이러한 이유로 자바 개발자들은 Calendar
클래스뿐만 아니라 더 나은 성능의 Joda-Time
이라는 라이브러리를 함께 사용해 왔으며, Java SE 8
버전에서는 Joda-Time
라이브러리를 발전시킨 새로운 날짜와 시간 API인 java.time
패키지를 제공한다. java.time
패키지는 위의 문제를 모두 해결했으며, 다양한 기능을 지원하는 다수의 하위 패키지를 포함하고 있다!
⭐ 결론 !
java.time
패키지를 사용하자!
이것이 자바다 책
http://tcpschool.com/java/java_api_math
http://tcpschool.com/java/java_api_calendar