# 리뷰: 윤년 여부 계산 #### CODE <a class='btn btn-default' href='/codes/26637'>Link</a> ``` public class LeapYear { public static void main(String[] args) { int input = Integer.parseInt(args[0]); boolean output = isLeapYear01(input); System.out.printf("%d년은 윤년입니까? %s", input, output); } public static boolean isLeapYear01(int year) { boolean result = false; if (year%4 == 0) { result = true; if (year%100 == 0) { result = false; if (year%1000 == 0) { result = true; } } } return result; } } ``` #### INPUT ``` 1988 ``` #### OUPUT ``` 1988년은 윤년입니까? true ``` 불리언 메소드 변수 (boolean result = false;)선언 이유가 궁금하네요 그리고 true로 선언하는 거랑 어떤 부분에 차이가 있나요?
# 변수 초기값이 false인 이유 초기값을 false로 하여, 코드의 양을 줄일 수 있습니다. ## 초기값이 true 였다면? 윤년 조건을 만족하는 경우와 그렇지 않은 경우를 모두 작성해야 합니다. ``` boolean result = true; if (윤년만족?) { result = true; } else { result = false; } return result; ``` ## 초기값이 false라면, else문을 제거하여 코드를 줄일 수 있습니다. ``` boolean result = false; if (윤년만족?) { result = true; } return result; ```
boolean 타입 변수의 목적은 true , false를 판단하기 위해 사용합니다. 이문제에서 boolean을 윤년 여부를 판단하기 위해 사용하였습니다. boolean result = false; isLeapYear01 메소드 안에서 result 변수의 값을 false로 초기화한 이유는 윤년이 될수 있는 조건을 만족하는 식만 작성하면 되기때문입니다. if (year % 4 == 0) { result = true; if (year % 100 == 0) { result = false; if (year % 1000 == 0) { result = true; } } } 즉 year에 저장된 값이 4의 배수이고 100으로 나눠떨어지지 않고 1000으로 나눠 떨어지는지를 판단하는 조건문만 작성하면 되기때문에 result 변수의 초기값을 false로 하고 밑에 result값이 true가 되기위한 조건문(윤년이 되기 위한 조건을 만족하는)을 작성한 것입니다. 예를들어 year의 값이 2100년의 경우 4로 나눠덜어지지만 100으로 나눠떨어지기 때문에 두번째 if문에서 result 값이 false가 되어 평년이라는 것을 알수 있습니다. 하지만 result 변수의 초기값이 true가 되면 year에 저장된 값이 윤년이 되기위해 만족해야 하는 조건도 작성해야 하고 윤년을 만족하지 않는 경우도 작성해줘야 합니다. 즉, if문에는 윤년을 만족하는 조건식을 적어야하고 else 를 사용해서 윤년을 만족하지 않는경우 에는 result변수의 값을 false로 한다 라는 조건문이 들어가야 합니다. else 는 year의 값이 4로 나눠떨어지지만 100으로 나눠떨어질때는 평년이므로 result = false 가 된다는 의미입니다. if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { result = true; } else { result = false; } 결론은 result 변수의 초기값이 false인 경우 윤년을 만족하지를 판단하는 if문만 작성하면 되지만 result 변수의 초기값이 true인경우 윤년을 만족하는지 판단하는 if문과 윤년을 만족하지지 않는경우를 판단하는 else문도 필요하게 됩니다. 이 문제에서는 윤년을 만족하는 경우만 판단하기위해 result변수의 값을 false로 초기화하여 if문만 작성한 것입니다.