작성
·
98
·
수정됨
0
[질문 내용]
여기에 질문 내용을 남겨주세요.
package time.test;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.Scanner;
public class TestCalendarPrinter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] dayOfWeeks = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
System.out.print("년도를 입력하세요: ");
int year = scanner.nextInt();
System.out.print("월을 입력하세요: ");
int month = scanner.nextInt();
LocalDate ldt = LocalDate.of(year, month, 1);
int lastDay = ldt.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
System.out.println("lastDay = " + lastDay);
String firstDayOfWeek = String.valueOf(ldt.getDayOfWeek());
System.out.println("Su Mo Tu We Th Fr Sa");
int count = 0;
for(int day=1; day<=lastDay; day++){
if(day == 1) {
for (String dayOfWeek : dayOfWeeks) {
if (dayOfWeek.equals(firstDayOfWeek)) {
System.out.print(" " + 1);
break;
}
System.out.print(" ");
System.out.print(" ");
count++;
}
System.out.print(" ");
continue;
}
if(1<day&&day<10){
if(dayOfWeeks[0].equals(String.valueOf(LocalDate.of(year, month, day).getDayOfWeek()))){
System.out.println();
}
System.out.print(" "+day);
}else{
if(dayOfWeeks[0].equals(String.valueOf(LocalDate.of(year, month, day).getDayOfWeek()))){
System.out.println();
}
System.out.print(day);
}
System.out.print(" "); //요일마다 한 칸 공백
}
}
}
달력문제 코드로 직접 구현해봤고, 답은 잘 나오는데 너무 뭔가 코드가 깔끔하지 않고, 지저분한 거 같은데, 별로같나요?
갈길이 먼거 같네요. 이런 상황에서 어떻게 스스로 리팩토링 하나요..? 강의는 날짜/시간 클래스 여기까지 배워서 뭐 스스로 리팩토링 하는 방법도 모르겠는데 그냥 진도 쭉쭉 나가면서 공부하다보면 자연스레 깨닫게 될까요?
뭐 지금 날짜/시간 연습문제 포함, 기초편부터 현재 진도까지 모든 연습문제를 답지 안보고 스스로 1~3문제 빼곤 다 풀었는데, 코드가 지저분하고 시간이 좀 오래 걸린게 마음에 걸리긴 합니다.
서포터즈님들의 답변 궁금합니다..
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. 진우님.
작성하신 코드에서 깔끔함을 추구하는 것은 좋은 접근입니다. 코드의 가독성을 높이고 유지 보수가 쉬운 코드를 작성하는 것은 매우 중요합니다. 아래에서 도움이 될 만한 몇 가지 리팩토링 팁을 드리겠습니다:
상수 및 배열 사용 개선: 배열 dayOfWeeks
가 잘못된 요소(‘THURSDAY’ 중복 포함)를 갖고 있습니다. 이를 수정하시기 바랍니다.
변수명 개선: ldt
라는 변수명 대신 firstDayOfMonth
같은 더 직관적인 이름을 사용하면 읽기 쉬워집니다.
중복된 코드 제거: 빈 공백을 출력하는 부분이나, 주말을 확인하는 조건이 중복되어 있네요. 이를 함수로 묶어서 반복을 줄일 수 있습니다.
출력 형식 일관성 유지: 날짜를 한 자리 수와 두 자리 수로 구분하여 출력하는 부분의 코드를 하나의 작은 메서드로 추출하면 더 깔끔해질 수 있습니다.
함수 분리: 특별히 복잡한 동작을 끊어서 작은 단위 함수로 분리하는 것이 좋습니다. 예를 들어, 공백을 출력하는 로직, 달력 출력 로직 등을 여러 메서드로 나누면 가독성이 올라갑니다.
해당 코드는 Java DateTimeFormatter
를 사용하여 날짜 값을 형식화하는 방법을 추가적으로 학습하면 코드가 더욱 깔끔해질 것입니다.
이러한 리팩토링 경험은 실전에서 부딪히며 배우는 것이 가장 효과적입니다. 현재 수준에서 적정선을 찾고, 실력을 기르면서 자연스럽게 코드를 개선할 수 있게 될 것입니다.
관련 질문과 답변 예시를 참고하시어 더 많은 정보와 팁을 얻을 수 있습니다. 이 링크는 코드 작성에 있어 날짜 사용의 세부 사항 및 포맷팅에 대한 예시를 제공하고 있습니다.
저는 진우님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.