나는 프로젝트를 하다가 날짜를 비교하고 싶어서 " >= " 이런 걸 사용하려고 했는데 오류가 나는 것이다. 알고 보니 자바에서는 로컬데이트를 이용하여 날짜를 비교하는 방법이 존재한다. 그래서 알아 본 방법들!
[ compareTo() ]
compareTo() 메서드는 두개의 LocalDate 객체를 비교하여 순서를 확인하는 데 사용된다. 비교 대상 날짜(A)가 인자로 전달된 날짜(B) 보다 이전인지, 이후인지 혹은 같은지를 판단한다. 또한 비교 결과에 따라 다른 반환값들을 가진다.
▷ 음수 : 비교 대상(A)이 인자로 전달 된 날짜(B) 보다 이전인 경우
LocalDate A = LocalDate.of(2023, 8, 11);
LocalDate B = LocalDate.of(2023, 8, 15);
int result = A.compareTo(B);
System.out.println(" result : " + result);
~~~결과~~~~
result : -4
▷ 0 : 비교 대상(A)이 인자로 전달 된 날짜(B)와 같은 경우
LocalDate A = LocalDate.of(2023, 8, 11);
LocalDate B = LocalDate.of(2023, 8, 11);
int result = A.compareTo(B);
System.out.println(" result : " + result);
~~~결과~~~~
result : 0
▷ 양수 : 비교 대상(A)이 인자로 전달 된 날짜(B) 보다 이후인 경우
LocalDate A = LocalDate.of(2023, 8, 25);
LocalDate B = LocalDate.of(2023, 8, 15);
int result = A.compareTo(B);
System.out.println(" result : " + result);
~~~결과~~~~
result : 10
[ isBefore() ]
isBefore() 메서드는 주어진 LocalDate 객체보다 이전인을 확인하는 데 사용된다. 인자로 전달된 날짜 (B) 보다 이전인 경우는 true, 아니라면 false를 반환한다.
LocalDate A = LocalDate.of(2023, 8, 11);
LocalDate B = LocalDate.of(2023, 8, 15);
boolean isBefore = A.isBefore(B);
System.out.println("isBefore : " + isBafore);
~~~결과~~~
isBefore : true
[ isAfter() ]
isAfter() 메서드는 주어진 LocalDate 객체보다 이후 인지를 확인 하는데 사용된다. 인자로 전달된 날짜 (B) 보다 이후인 경우 에는 true, 아닌 경우에는 false를 반환한다.
LocalDate A = LocalDate.of(2023, 8, 11);
LocalDate B = LocalDate.of(2023, 8, 15);
boolean isAfter = A.isAfter(B);
System.out.println("isAfter: " + isAfter);
~~~결과~~~
isAfter : false
[ isEqual() ]
isEqual() 메서드는 두 LocalDate의 객체가 날짜적으로 동일한 지 여부를 확인한다. 같은 날짜라면 true, 아니라면 false 를 반환한다.
LocalDate A = LocalDate.of(2023, 8, 11);
LocalDate B = LocalDate.of(2023, 8, 11);
boolean isEqual = A.isEqual(B);
System.out.println("isEqual : " + isEqual);
~~~결과~~~
isEqual : true
[ Equal() ]
Equal() 메서드는 객체 자체의 동등성을 확인 하는 메서드이다. Equal 메서드는 Object 클래스에서 상속받은 메서드로 두 객체의 참조(메모리 주소)가 같은지를 비교한다. 하지만! LocalDate클래스에서의 Equal() 메서드는 상위 클래스인 ChronoLocalDate 클래스의 equals() 메서드를 오버라이딩하여 날짜적으로 동일한지 여부를 확인하도록 재정의 되었다.
ChronoLocalDate는 자바 8부터 도입된 시간 및 날짜 API인 java.time 패키지이다. 이 인터페이스는 모든 날짜와 시간 기반 클래스(예: LocalDate, LocalDateTime, ZonedDateTime 등)의 기본 인터페이스로 작동하며, 날짜와 시간의 추상화를 제공하고 공통된 작업을 수행하는 메서드를 정의한다.
ChronoLocalDate는 다양한 달력 시스템을 지원하기 위해 설계되었으며 자바 8 이전에는 Date와 Calendar 클래스 등을 사용하여 날짜 및 시간을 처리했지만, 사용하기 까다로웠다고 한다. 그래서 그 후 java.time 패키지의 도입으로 날짜와 시간 관련 작업이 훨씬 더 간편하게 되었으며, 이 중에서 ChronoLocalDate는 다양한 달력 시스템에서 작업할 수 있는 일반적인 메서드를 제공한다.
그러면 isEqual() 이랑 equal() 은 어찌 되었던 LocalDate에서 똑같이 사용 된다는것 아닌가?
맞다.
isEqual() 메서드와 equals() 메서드는 날짜 비교를 위해 사용되는 메서드로, 일반적으로 같은 결과를 반환하지만, 엄밀하게는. isEqual()은 LocalDate 클래스에 특화된 메서드이며,. equals()는 모든 자바 객체에서 사용할 수 있는 일반적인 메서드이다.
요긴하게 알아서 사용하면 될 것 같다~~
'JAVA' 카테고리의 다른 글
로그 레벨로 로그를 효율적으로 사용하기 (0) | 2023.08.14 |
---|---|
로깅을 System.out.println() 로 하면 안되는 이유 (0) | 2023.08.14 |
[Java] LocalDate에날짜 더하기고 빼기 (plusMonth, minusWeeks) (0) | 2023.08.10 |
[Java] LocalDate, LocalTime, ChronoUnit 을 이용한 시간 표현 (0) | 2023.08.06 |
[JAVA] 자바 HTTPURLConnection의 응답을 JSON 데이터로 파싱 하기 (0) | 2023.07.30 |