(Ch10) 1. 날짜와 시간 ~ 3.2 LocalDate와 LocalTime

날짜와 시간을 다루기 위해 JDK1.0부터 Date클래스, JDK1.1부터 Calendar클래스를 제공하였는데, 여러가지 불편한 점이 많았다. 후에 JDK1.8부터 java.time패키지로 기존의 단점을 개선하였는데 오랫동안 사용해온 Date,Calendar클래스도 알 필요가 있다.

Calendar 클래스

Calendar는 추상클래스이기 때문에 메소드를 통해 구현된 클래스의 인스턴스를 얻어야 한다. 이때 getInstance()메소드를 활용하게 되는데 시스템의 국가와 지역설정을 확인하여 적절한 인스턴스를 반환해준다.

// Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
	...
Date d = new Date(cal.getTimeInMillis());

//Date를 Calendar로 변환
Date d= new Date();
	...
Calendar cal = Calendar.getInsatance();
cal.setTime(d)

형식화 클래스

형식에 맞추어 출력을 하고 싶을 때 여러가지 경우의 수를 고려해야하기에 복잡해지는 경우가 있다. 자바에서는 이러한 문제를 해결해주는 형식화 클래스를 제공하고 있다. 숫자, 날짜, 텍스트 데이터를 일정한 형식에 맞게 표현할 수 있는 방법을 객체지향적으로 설계하여 표준화하였다.

DecimalFormat

DecimalFormat은 숫자를 형식화 하는데 사용되는 클래스이다. 정수, 부동소수점, 금액 등 다양한 형식으로 표현할 수 있으며 텍스트 데이터를 숫자로 변환할 수도 있다.

double num = 12345678.9;
DecimalFormat df = new DecimalFormat("원하는 형식");
String result = df.format(num);

SimpleDateFormat

Date와 Calendar 클래스만으로는 날짜 데이터를 원하는 형태로 출력하는데 어려움이 있다. SimpleDateFormat을 사용하면 이러한 문제를 간단히 해결할 수 있다.

Date today = new Date();
SimpleDateFormat sdf;
sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(today));

SimpleDateFormat의 인자로 원하는 형태를 설정하여 출력할 수 있다.

ChoiceFormat

특정 범위에 속하는 값을 문자열로 변환하고 싶을 때 if문이나 switch문은 적절하지 못한 경우가 많다. 이런 경우에 ChoiceFormat을 사용할 수 있다.

// limists와 grade의 순서와 개수 주의
double[] limits = {50,60,70,80};
String[] grade = {"D","C","B","A"};

int[] scores = {100,95,67,34,65,76};
ChoiceFormat form = new ChoiceFormat(limits, grade);

MeassageFormat

MessageFormat은 미리 정해진 양식에 맞춰 데이터를 출력할 수 있도록 도와준다. 데이터가 들어갈 자리를 마련해 놓은 양식을 미리 작성하고, 양식에 맞추어 다수의 데이터를 출력할 때 사용하면 편리하다.

String msg = "Name : {0} \nTel : {1}";

Object[] arguments = {
    "Java","02-123-1234"
}

String result = MessageFormat.format(msg, arguments);

java.time 패키지

JDK1.8부터 java.time 패키지가 추가되어 Date,Calendar의 단점을 많이 해결할 수 있게 되었다. java.time패키지 하위에 있는 패키지는 아래와 같다.

패키지설명
java.time날짜와 시간을 다루는데 필요한 핵심 클래스 제공
java.time.chrono표준(ISO)이 아닌 달력 시스템을 위한 클래스 제공
java.time.format날짜와 시간을 파싱하고 형식화하기 위한 클래스 제공
java.time.temporal날짜와 시간의 필드와 단위를 위한 클래스 제공
java.time.zone시간대와 관련된 클래스 제공

위 패키지에 속하는 클래스들의 가장 큰 특징은 불변하다는 것이다. 그래서 날짜와 시간을 변경하는 메소드들은 기존의 객체르 변경하는 대신 항상 변경된 새로운 객체를 반환한다. 불변하기 때문에 여러 쓰레드가 같은 객체에 접근하는 멀티 쓰레드 환경에서 안전하게 사용할 수 있다.

LocalDate와 LocalTime

LocalDate와 LocalTime은 java.time패키지의 기본 클래스이며, 나머지 다른 클래스들은 두 클래스를 확장하여 기능을 제공한다.

Reference

Java의 정석
남궁성의 정석코딩

profile
개발자 지망생입니다.

0개의 댓글