이 글에서는 Java를 사용하여 주어진 연도가 윤년(leap year)인지 확인하는 방법을 알아봅니다. 핵심 원리는 해당 연도가 4와 100으로 나누어 떨어지는지 검사하는 것입니다.
윤년이란 무엇일까요?
윤년은 달력의 연도와 실제 천문학적 연도(지구가 태양을 한 바퀴 도는 주기)의 차이를 보정하기 위해 하루를 추가로 더한 해입니다. 일반적으로 4로 나누어 떨어지는 연도가 윤년이지만, 여기에는 예외 규칙이 있습니다.
- 4로 나누어 떨어지면 윤년입니다.
- 단, 100으로 나누어 떨어지는 연도는 윤년이 아닙니다.
- 하지만 400으로 나누어 떨어지는 연도는 다시 윤년입니다.
예를 들어 2000년은 400으로 나누어 떨어지므로 윤년이고, 1900년은 100으로 나누어 떨어지지만 400으로 나누어 떨어지지 않으므로 윤년이 아닙니다.
입력 및 출력 예시
입력
Enter a year: 2000
출력
2000 is a Leap year
알고리즘
프로그램의 동작 흐름은 다음과 같습니다.
Step 1 - 시작 Step 2 - 정수형 변수 my_input과 불리언 변수 isLeap 선언 Step 3 - 사용자로부터 값을 입력받거나 값 직접 정의 Step 4 - if-else 조건문으로 해당 연도가 4, 100, 400으로 나누어 떨어지는지 확인 Step 5 - 결과 출력 Step 6 - 종료
예제 1: 사용자 입력값으로 확인하기
다음 예제에서는 Scanner를 사용해 사용자가 직접 연도를 입력하면, 프로그램이 해당 연도가 윤년인지 판별하여 콘솔에 출력합니다.
import java.util.Scanner;
public class LeapYear {
public static void main(String[] args) {
int my_input;
boolean isLeap = false;
System.out.println("필요한 패키지가 임포트되었습니다");
Scanner my_scanner = new Scanner(System.in);
System.out.println("Scanner 객체가 생성되었습니다");
System.out.print("연도를 입력하세요 : ");
my_input = my_scanner.nextInt();
if (my_input % 4 == 0) {
if (my_input % 100 == 0) {
if (my_input % 400 == 0)
isLeap = true;
else
isLeap = false;
}
else
isLeap = true;
}
else
isLeap = false;
if (isLeap)
System.out.println(my_input + "은(는) 윤년입니다");
else
System.out.println(my_input + "은(는) 윤년이 아닙니다");
}
}출력 결과
필요한 패키지가 임포트되었습니다 Scanner 객체가 생성되었습니다 연도를 입력하세요 : 2000 2000은(는) 윤년입니다
예제 2: 미리 정의된 값으로 확인하기
이번 예제에서는 연도 값이 코드 안에 미리 정의되어 있으며, 그 값을 읽어와 콘솔에 출력합니다. 사용자 입력 없이 로직만 빠르게 테스트할 때 유용한 방식입니다.
public class LeapYear {
public static void main(String[] args) {
int my_input = 2000;
boolean isLeap = false;
System.out.println("정의된 연도는 " + my_input + "입니다");
if (my_input % 4 == 0) {
if (my_input % 100 == 0) {
if (my_input % 400 == 0)
isLeap = true;
else
isLeap = false;
}
else
isLeap = true;
}
else
isLeap = false;
if (isLeap)
System.out.println(my_input + "은(는) 윤년입니다");
else
System.out.println(my_input + "은(는) 윤년이 아닙니다");
}
}출력 결과
정의된 연도는 2000입니다 2000은(는) 윤년입니다
마무리
윤년 판별 로직은 중첩된 if-else 조건문만으로 간단하게 구현할 수 있습니다. 나머지 연산자(%)를 활용해 4, 100, 400으로 나누어 떨어지는지 순서대로 검사하면 되며, 이 원리는 Java뿐 아니라 다른 프로그래밍 언어에서도 동일하게 적용됩니다. 초보자에게 좋은 조건문 연습 예제이니 위 코드를 직접 실행해 다양한 연도로 테스트해 보시기 바랍니다.