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 를 공개헤서 거기서 소스를 참고 할 수 있도록 하겠습니다.
댓글 없음:
댓글 쓰기