Java LocalDate 로 현재 날짜 및 다음 날짜 가져오는 방법

JavaBeginner
지금 연습하기

소개

이 튜토리얼은 Java 의 LocalDate 클래스를 사용하여 현재 날짜를 가져오고 다음 날짜를 계산하는 방법을 안내합니다. Java 8 에 도입된 Java Time API 는 포괄적인 날짜 및 시간 처리 기능을 제공합니다. 이 튜토리얼을 마치면 LocalDate 를 사용하여 기본적인 날짜 연산을 효율적으로 수행하는 방법을 이해하게 될 것입니다.

Java Time API 및 LocalDate 이해

코딩을 시작하기 전에, Java 애플리케이션에서 날짜를 처리하는 데 LocalDate 클래스가 왜 유용한지 알아보겠습니다.

Java Time API 란 무엇인가요?

Java 8 은 이전 날짜 및 시간 클래스의 제한 사항을 해결하기 위해 java.time 패키지에 Java Time API 를 도입했습니다. 이 API 는 날짜 및 시간 처리에 대한 더 명확하고 직관적인 접근 방식을 제공합니다.

LocalDate 소개

LocalDate 클래스는 시간 구성 요소 (년, 월, 일) 가 없는 날짜를 나타냅니다. 이는 불변 (immutable) 하며, 스레드 안전 (thread-safe) 하고, ISO-8601 달력 시스템을 따릅니다.

LocalDate 를 사용하는 몇 가지 주요 장점은 다음과 같습니다.

  • 날짜, 시간 및 날짜 - 시간 개념 간의 명확한 분리를 제공합니다.
  • 날짜 조작을 위한 직관적인 메서드를 제공합니다.
  • 다양한 날짜 형식에 대한 내장 지원을 제공합니다.
  • 날짜 계산을 올바르게 처리합니다.

LocalDate 기능을 탐색하기 위해 새로운 Java 파일을 만들어 보겠습니다.

  1. WebIDE 에서 탐색기 패널 (왼쪽 사이드바의 페이지 모양 아이콘) 을 클릭합니다.
  2. 파일 탐색기 패널에서 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택합니다.
  3. 파일 이름을 DateExample.java로 지정하고 "OK"를 클릭합니다.
  4. 다음 기본 코드 템플릿을 파일에 복사합니다.
public class DateExample {
    public static void main(String[] args) {
        // We will add our date code here
        System.out.println("Learning about LocalDate in Java");
    }
}
  1. Ctrl+S 를 누르거나 메뉴에서 File > Save 를 선택하여 파일을 저장합니다.

이제 Java 파일을 만들었으므로 다음 단계에서 현재 날짜로 작업하는 코드를 추가하겠습니다.

LocalDate 로 현재 날짜 가져오기

이 단계에서는 LocalDate 클래스를 사용하여 현재 날짜를 가져와 표시하도록 Java 프로그램을 수정합니다.

LocalDate 클래스 가져오기

먼저, java.time 패키지에서 LocalDate 클래스를 가져와야 합니다. DateExample.java 파일을 열고 맨 위에 import 문을 추가합니다.

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // We will add our date code here
        System.out.println("Learning about LocalDate in Java");
    }
}

LocalDate.now() 메서드 사용

LocalDate 클래스는 현재 날짜를 반환하는 now()라는 정적 메서드를 제공합니다. 현재 날짜를 가져와 표시하도록 코드를 수정해 보겠습니다.

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Display the current date
        System.out.println("Current date: " + currentDate);
    }
}

프로그램 컴파일 및 실행

이제 프로그램을 컴파일하고 실행해 보겠습니다.

  1. WebIDE 에서 터미널을 엽니다 (메뉴에서 Terminal > New Terminal).
  2. 필요한 경우 프로젝트 디렉토리로 이동합니다.
    cd /home/labex/project
  3. Java 프로그램을 컴파일합니다.
    javac DateExample.java
  4. 컴파일된 프로그램을 실행합니다.
    java DateExample

다음과 유사한 출력을 볼 수 있습니다.

Current date: 2023-04-12

실제 날짜는 프로그램을 실행할 때의 현재 날짜를 반영합니다.

출력 형식 이해

LocalDate 객체의 기본 문자열 표현은 ISO-8601 형식을 따릅니다: YYYY-MM-DD. 이는 날짜를 나타내는 국제 표준입니다.

예를 들어, 2023-04-12는 2023 년 4 월 12 일을 나타냅니다.

LocalDate 클래스를 사용하여 현재 날짜를 성공적으로 가져와 표시했습니다. 다음 단계에서는 다음 날짜를 계산하는 방법을 배우겠습니다.

다음 날짜 계산하기

이제 현재 날짜를 가져올 수 있으므로 LocalDate 객체에 날짜를 더하여 다음 날짜를 계산하는 방법을 배우겠습니다.

LocalDate 를 사용한 날짜 조작 이해

LocalDate 클래스는 다음과 같은 날짜 조작을 위한 여러 메서드를 제공합니다.

  • plusDays(long days): 지정된 일수를 더합니다.
  • plusWeeks(long weeks): 지정된 주 수를 더합니다.
  • plusMonths(long months): 지정된 월 수를 더합니다.
  • plusYears(long years): 지정된 연 수를 더합니다.

뺄셈을 위한 해당 minus 메서드도 있습니다.

다음 날짜를 계산하고 표시하도록 코드를 개선해 보겠습니다.

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Calculate the next date by adding one day
        LocalDate nextDate = currentDate.plusDays(1);

        // Display both dates
        System.out.println("Current date: " + currentDate);
        System.out.println("Next date: " + nextDate);
    }
}

업데이트된 프로그램 컴파일 및 실행

업데이트된 프로그램을 컴파일하고 실행해 보겠습니다.

  1. DateExample.java에 변경 사항을 저장했는지 확인합니다.
  2. 터미널에서 Java 프로그램을 컴파일합니다.
    javac DateExample.java
  3. 컴파일된 프로그램을 실행합니다.
    java DateExample

다음과 유사한 출력을 볼 수 있습니다.

Current date: 2023-04-12
Next date: 2023-04-13

다시 말하지만, 실제 날짜는 프로그램을 실행할 때의 현재 날짜를 반영합니다.

다른 날짜 조작 탐색

다른 날짜 조작 메서드를 시연하기 위해 프로그램을 더 개선해 보겠습니다.

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Calculate various future dates
        LocalDate nextDate = currentDate.plusDays(1);
        LocalDate nextWeek = currentDate.plusWeeks(1);
        LocalDate nextMonth = currentDate.plusMonths(1);
        LocalDate nextYear = currentDate.plusYears(1);

        // Display all dates
        System.out.println("Current date: " + currentDate);
        System.out.println("Next date: " + nextDate);
        System.out.println("Date after one week: " + nextWeek);
        System.out.println("Date after one month: " + nextMonth);
        System.out.println("Date after one year: " + nextYear);
    }
}

프로그램을 다시 컴파일하고 실행합니다.

javac DateExample.java
java DateExample

출력은 현재 날짜, 다음 날짜, 그리고 1 주, 1 개월, 1 년 후의 날짜를 표시합니다.

Current date: 2023-04-12
Next date: 2023-04-13
Date after one week: 2023-04-19
Date after one month: 2023-05-12
Date after one year: 2024-04-12

중요한 개념: 불변성 (Immutability)

plusDays()의 결과를 새 변수에 할당했음을 알 수 있습니다. 이는 LocalDate 객체가 불변 (immutable) 하기 때문입니다. 즉, 생성 후에는 값을 변경할 수 없습니다. plusDays()와 같은 메서드는 원래 객체를 수정하지 않고, 대신 업데이트된 값을 가진 새 객체를 반환합니다.

이 불변성은 LocalDate 객체를 스레드 안전하게 만들고 복잡한 애플리케이션에서 더 예측 가능하게 만드는 중요한 기능입니다.

날짜 구성 요소 추출하기

이 단계에서는 LocalDate 객체에서 일, 월, 연도, 요일과 같은 개별 구성 요소를 추출하는 방법을 배우겠습니다.

날짜 구성 요소 추출 메서드

LocalDate 클래스는 날짜의 특정 구성 요소를 추출하기 위한 여러 메서드를 제공합니다.

  • getDayOfMonth(): 월의 일 (1-31) 을 반환합니다.
  • getMonthValue(): 월을 숫자로 반환합니다 (1-12).
  • getMonth(): 월을 열거형 상수 (enum constant) 로 반환합니다.
  • getYear(): 연도를 반환합니다.
  • getDayOfWeek(): 요일을 열거형 상수 (enum constant) 로 반환합니다.

이러한 메서드를 탐색하기 위해 새 파일을 만들어 보겠습니다.

  1. WebIDE 에서 DateComponents.java라는 새 파일을 만듭니다.
  2. 파일에 다음 코드를 추가합니다.
import java.time.LocalDate;
import java.time.Month;
import java.time.DayOfWeek;

public class DateComponents {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Extract date components
        int day = currentDate.getDayOfMonth();
        int monthValue = currentDate.getMonthValue();
        Month month = currentDate.getMonth();
        int year = currentDate.getYear();
        DayOfWeek dayOfWeek = currentDate.getDayOfWeek();

        // Display the components
        System.out.println("Current date: " + currentDate);
        System.out.println("Day of month: " + day);
        System.out.println("Month (number): " + monthValue);
        System.out.println("Month (name): " + month);
        System.out.println("Year: " + year);
        System.out.println("Day of week: " + dayOfWeek);
    }
}
  1. Ctrl+S 를 눌러 파일을 저장합니다.

프로그램 컴파일 및 실행

이제 새 프로그램을 컴파일하고 실행해 보겠습니다.

  1. 터미널에서 Java 프로그램을 컴파일합니다.
    javac DateComponents.java
  2. 컴파일된 프로그램을 실행합니다.
    java DateComponents

다음과 유사한 출력을 볼 수 있습니다.

Current date: 2023-04-12
Day of month: 12
Month (number): 4
Month (name): APRIL
Year: 2023
Day of week: WEDNESDAY

특정 날짜 만들기

현재 날짜를 가져오는 것 외에도 of() 메서드를 사용하여 특정 날짜를 나타내는 LocalDate 객체를 만들 수 있습니다. 특정 날짜를 만들도록 프로그램을 개선해 보겠습니다.

import java.time.LocalDate;
import java.time.Month;
import java.time.DayOfWeek;

public class DateComponents {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Create a specific date
        LocalDate specificDate = LocalDate.of(2025, 12, 25);

        // Extract date components from the current date
        int day = currentDate.getDayOfMonth();
        int monthValue = currentDate.getMonthValue();
        Month month = currentDate.getMonth();
        int year = currentDate.getYear();
        DayOfWeek dayOfWeek = currentDate.getDayOfWeek();

        // Display the current date components
        System.out.println("Current date: " + currentDate);
        System.out.println("Day of month: " + day);
        System.out.println("Month (number): " + monthValue);
        System.out.println("Month (name): " + month);
        System.out.println("Year: " + year);
        System.out.println("Day of week: " + dayOfWeek);

        // Display the specific date
        System.out.println("\nSpecific date: " + specificDate);
        System.out.println("Day of week for specific date: " + specificDate.getDayOfWeek());
    }
}

업데이트된 프로그램을 컴파일하고 실행합니다.

javac DateComponents.java
java DateComponents

이제 출력에는 특정 날짜에 대한 정보가 포함됩니다.

Current date: 2023-04-12
Day of month: 12
Month (number): 4
Month (name): APRIL
Year: 2023
Day of week: WEDNESDAY

Specific date: 2025-12-25
Day of week for specific date: THURSDAY

이제 LocalDate 객체에서 구성 요소를 추출하고 특정 날짜를 만드는 방법을 배웠습니다. 이러한 기능은 날짜 기반 작업을 수행하거나 다양한 형식으로 날짜 정보를 표시해야 하는 애플리케이션을 구축할 때 특히 유용합니다.

요약

이 튜토리얼에서는 Java Time API 의 LocalDate 클래스를 사용하여 Java 에서 날짜를 사용하는 방법을 배웠습니다. 다음은 수행한 작업에 대한 요약입니다.

  1. LocalDate.now()를 사용하여 현재 날짜를 검색하는 Java 프로그램을 만들었습니다.
  2. 날짜에 일, 주, 월, 연도를 더하여 미래 날짜를 계산했습니다.
  3. 날짜에서 일, 월, 연도, 요일과 같은 구성 요소를 추출했습니다.
  4. LocalDate.of() 메서드를 사용하여 특정 날짜를 만들었습니다.

이러한 기본 날짜 연산은 Java 애플리케이션에서 더 복잡한 날짜 기반 기능의 기초를 형성합니다. Java Time API 는 날짜 및 시간 작업을 위한 포괄적인 클래스 및 메서드 집합을 제공하여 애플리케이션에서 날짜 관련 요구 사항을 더 쉽게 처리할 수 있도록 합니다.

얻은 지식의 몇 가지 일반적인 응용 분야는 다음과 같습니다.

  • 작업 또는 지불 기한 계산
  • 이벤트 및 약속 예약
  • 특정 날짜의 요일 결정
  • 이벤트 간의 기간 추적
  • 사용자 인터페이스에 표시할 날짜 형식 지정

Java 여정을 계속 진행하면서 시간대 작업, 다양한 지역에 대한 날짜 형식 지정, 복잡한 날짜 계산 수행과 같은 Java Time API 의 더 고급 기능을 탐색할 수 있습니다.