이 글에서는 자바(Java)를 사용해 오늘이 생일인지 확인하고, 해당하는 경우 생일 축하 메시지를 출력하는 방법을 알아봅니다. 핵심 원리는 간단합니다. 현재 날짜와 미리 지정한 생일 날짜를 비교하여 두 값이 일치하면 축하 메시지를 화면에 출력하는 것입니다.
입력 및 출력 예시
프로그램의 동작 방식은 다음과 같습니다.
입력
생일 날짜 : 7월 15일
출력
오늘 날짜는 2021-12-20입니다. 오늘은 제 생일이 아닙니다.
구현 알고리즘
- 시작
- 출생 월(month_of_birth)과 출생 일(date_of_birth)을 저장할 변수를 선언합니다.
- 사용자로부터 필요한 값을 입력받거나, 코드 내에 직접 값을 정의합니다.
- LocalDate.now() 함수를 호출해 현재 날짜를 가져온 뒤 변수에 저장합니다.
- if 조건문으로 현재 월·일 값을 입력받은 월·일 값과 각각 비교합니다. 두 값이 모두 일치하면 조건식은 true가 됩니다.
- 비교 결과를 화면에 출력합니다.
- 종료
예제 1 : LocalDate 클래스 활용
java.time 패키지의 LocalDate 클래스를 사용하면 현재 시스템 날짜를 손쉽게 얻을 수 있습니다. getDayOfMonth() 메서드로 '일'을, getMonth() 메서드로 '월'을 추출한 후 생일 정보와 비교합니다.
import java.time.LocalDate;
import java.time.Month;
public class HappyBirthday {
public static void main(String args[]) {
int date_of_birth = 15;
Month month_of_birth = Month.JULY;
System.out.println("필요한 패키지를 모두 가져왔습니다");
LocalDate current_date = LocalDate.now();
System.out.println("오늘 날짜는 " + current_date);
System.out.println("정의된 생일은 : " + date_of_birth + " " + month_of_birth);
int date = current_date.getDayOfMonth();
Month month = current_date.getMonth();
if(date == date_of_birth && month == month_of_birth) {
System.out.println("HAPPY BIRTHDAY TO YOU !!");
} else {
System.out.println("오늘은 생일이 아닙니다");
}
}
}
실행 결과
필요한 패키지를 모두 가져왔습니다 오늘 날짜는 2022-02-09 정의된 생일은 : 15 JULY 오늘은 생일이 아닙니다
예제 2 : SimpleDateFormat 클래스 활용
두 번째 방법은 java.text 패키지의 SimpleDateFormat을 이용해 날짜 문자열을 Date 객체로 파싱한 뒤, compareTo() 메서드로 두 날짜가 동일한지 비교합니다. 이 예제에서는 생일이 10월 15일로 미리 정의되어 있습니다.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Birthday {
public static void main(String[] args) throws ParseException {
SimpleDateFormat s = new SimpleDateFormat("MM-dd");
Date today = s.parse("10-15");
Date my_birthday_date = s.parse("10-15");
System.out.println("생일은 10월 15일로 정의되었습니다");
if (today.compareTo(my_birthday_date) == 0) {
System.out.println("Happy Birthday!!");
} else {
System.out.println("오늘은 생일이 아닙니다");
}
}
}
실행 결과
생일은 10월 15일로 정의되었습니다 Happy Birthday!!
마무리 정리
두 가지 접근 방식의 차이는 다음과 같습니다.
- LocalDate 방식 : 최신 java.time API를 사용하며, 연도와 무관하게 '월'과 '일'만 비교하므로 매년 반복되는 생일 확인에 적합합니다.
- SimpleDateFormat 방식 : 문자열을 Date 객체로 변환해 비교하므로, "MM-dd"처럼 형식 패턴을 유연하게 지정할 수 있습니다.
실제 프로젝트에서는 스레드 안전성과 가독성 면에서 최신 날짜·시간 API인 java.time(LocalDate, Month 등)을 사용하는 것이 권장됩니다. 두 예제 모두 핵심 로직은 동일하다는 점을 기억하세요. 바로 '현재 날짜와 생일의 비교'입니다.