2012년 12월 23일 일요일

Joda : Java용 Date 관련 라이브러리

C# 에서는 DateTime 관련 작업을 처리하는데는 상당히 편리합니다.
1. 연산자 overriding 이 됩니다 ( 사칙연산이 되니 코드가 간단해 집니다 )
2. 열거, 필터링 관련 작업은 LINQ가 있어서 엄청 편합니다.

Java 에서는 두 가지 모두 안돼죠 ㅠ.ㅠ
어쩔 수 없이 기본 java.util.Date 와 subclass로 C#으로 된 소스를 포팅하려고 했는데,  기초적인 코드부터 다 만들어야 해서, 어떻하나 하다가 다음과 같은 라이브러리 도움으로 쉽게 해결 할 수 있었습니다.

1. Date 관련 연산은 Joda  Time 라이브러리를 이용
2. LINQ 까지는 안되도, 열거, 필터링, 변환 작업을 수행하는데에는 Google Guava 의 Iterables, Lists 등 Helper class 를 활용했습니다.



C# DateTime 연산 예
public static DateTime EndTimeOfHalfyear(this DateTime dateTime, int yearStartMonth = TimeSpec.CalendarYearStartMonth) {
            return
                dateTime
                    .StartTimeOfHalfyear(yearStartMonth)
                    .AddMonths(TimeSpec.MonthsPerHalfyear)
                    .Add(TimeSpec.MinNegativeDuration);
        }


Java 로 Porting 한 예 (Joda Time Library 사용)
public static DateTime endTimeOfHalfyear(DateTime moment, int startMonthOfYear) {
    return
        startTimeOfHalfyear(moment)
            .plusMonths(TimeSpec.MonthsPerHalfyear)
            .minus(TimeSpec.MinPositiveDuration);
 }


JDK만으로는 할 수 없는 Date관련 API를 Joda 가 상당히 많이 제공하네요^^
포팅이 다 되고 나면,  리팩토링을 하면서 좀 더 효과적인 코드로 변환이 가능할 것 같습니다.

열거, 필터링 관련된 LINQ에는 비할바는 못되지만, Guava 에서 어느정도 지원해주고, 더 필요한 것은 되는 대로 만들어서 추가하니, 포팅 속도가 예상외로 빨라졌습니다.
올해 안에 Time, Period,  Calendar, Working Day 등을 지원하는 라이브러리를 선보일 수 있을 것 같습니다.

앞으로는 가능하면 github  를 공개헤서 거기서 소스를 참고 할 수 있도록 하겠습니다.

댓글 없음: