[Java] 기본 API 클래스 ⑥

kiteB·2022년 2월 6일
0

Java

목록 보기
34/35
post-thumbnail

[ Math, Random 클래스 ]

1. Math 클래스

java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있다.

Math 클래스가 제공하는 메소드는 모두 정적(static)이므로 Math 클래스로 바로 사용이 가능하다.


📌 Math 클래스의 메소드

  • round() 메소드는 항상 소수점 첫째 자리에서 반올림해서 정수값을 리턴한다.
  • random() 메소드는 0.01.0 사이의 범위에 속하는 하나의 double 타입의 값을 리턴한다.
    • 0.0은 범위에 포함되고, 1.0은 범위에 포함되지 않는다.

2. Random 클래스

java.lang.Random 클래스는 난수를 얻어내기 위한 다양한 메소드를 제공한다.

  • Math.random() 메소드는 0.01.0 사이의 double 난수를 얻는 데만 사용한다면,
    Random 클래스는 boolean, int, long, float, double 난수를 얻을 수 있다.
  • 또한 Random 클래스는 종자값(seed)을 설정할 수 있다.
    • 종자값은 난수를 만드는 알고리즘에 사용되는 값으로, 종자값이 같으면 같은 난수를 얻는다.

📌 Random 객체 생성 방법

Random 클래스로부터 Random 객체를 생성하는 방법은 다음 두 가지가 있다.


📌 Random 클래스의 메소드


[ Date, Calendar 클래스 ]

자바는 날짜 및 시각을 읽을 수 있도록 DateCalendar 클래스를 제공하고 있다. (모두 java.util 패키지에 포함되어 있다.)


1. 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초

2. 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

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글