Java/[inflearn] 자바 중급(1)
[김영한_자바중급][6. 날짜와 시간] 예제를 통한 이해 (p.45)
줌인.
2024. 4. 1. 16:09
[p.45 / 예제2) 선생님 코드_좋은 코드]
public class TestLoopPlus {
public static void main(String[] args) {
LocalDate startDate = LocalDate.of(2024,1,1);
for (int i = 0 ; i < 5 ; i++) {
LocalDate nextDate = startDate.plus(i*2, ChronoUnit.WEEKS);
System.out.println("날짜 " + (i+1) + " : " + nextDate);
}
}
}
2번 코드는 반복문 안에서 직접 날짜를 계산하므로 코드가 더 간단하고 직관적이다.
추가적인 요구사항이나 변경 사항이 발생해도 코드를 쉽게 수정할 수 있다.
[p.45 / 예제2) 내가 작성한 코드]
public class TestLoopPlus {
public static void main(String[] args) {
LocalDate now = LocalDate.of(2024, 1,1);
//2주 간격 --> 14일
for (int i = 1 ; i <= 5 ; i++) {
if(i!=1) {
now = now.plusDays(14);
System.out.println("날짜 " + i + " : " + now);
continue;
}
System.out.println("날짜 " + i + " : " + now);
}
}
}
- 단순하게 생각
내가 작성한 코드 | 선생님 작성 코드 | |
장점 | - 일반적인 plusDays 메서드 사용으로 직관적이고 이해하기 쉬움 - 원본 날짜(now)를 변경하지 않고 계산된 날짜를 별도의 변수에 저장해가 가독성이 좋음 |
- plus 메서드를 사용하여 간격을 직접 지정한 간결한 코드 - ChronoUnit을 활용하여 시간 단위를 명시적 표현으로 가독성이 좋음 |
단점 | - 반복문 내에 조건문을 사용하는 코드가 혼재되어 있어 가시성이 약간 떨어짐 |
- 반복문 내 now 변수 재할당으로 원본 날짜가 변경됨 (원본 날짜 유지 어려움) |
결론 | ∴ 가시화 / 유연성이 더 높음 |
[p.45 / 예제2) 내가 처음 작성한 코드_좋지 않은 코드]
import java.time.LocalDate;
public class TestLoopPlus {
public static void main(String[] args) {
LocalDate ld = LocalDate.of(2024, 1, 1);
LocalDate [] lds = new LocalDate[5];
for (int i = 0; i < lds.length ; i++) {
if(i != 0) {
lds[i] = lds[i-1].plusDays(14);
System.out.println("날짜 " + i + ": " + lds[i]);
} else {
lds[i] = ld;
System.out.println("날짜 " + i + ": " + lds[i]);
}
}
}
}
- 상기코드가 동작은 되지만, 배열을 사용하여 날짜를 저장하고 처리하기 때문에 코드가 조금 더 복잡해졌다.
또한 배열의 크기를 변경하거나 다른 조건을 추가하려면 코드를 수정해야 한다.
∴ 유연성이 부족한 코드다.
해당 코드 접근 계기 |
1) 2주 간격으로 증가한다. ⇒ .plusDays(14)를 코드별로 반복하면 되겠다. |
2) 반복한다면, 하기와 같이 작성될 것이다. |
LocalDate ld2 = ld.plusDays(14);
LocalDate ld3 = ld2.plusDays(14);
LocalDate ld4 = ld3.plusDays(14);
LocalDate ld5 = ld4.plusDays(14);
System.out.println("날짜 2 : " + ld2);
System.out.println("날짜 3 : " + ld3);
System.out.println("날짜 4 : " + ld4);
System.out.println("날짜 5 : " + ld5);
3) 그렇다면 배열에 담아서, 이러한 반복을 최소화 해보자 |
4) 배열에 어떻게 담으면 좋을까? ⇒ ld[i] = ld[i-1].plusDays(14) 구조로 들어간다면, 배열로 담을 수 있겠구나 |
5) 근데 상기 배열 처럼 담을경우 0은 출력못하니 0은 if문으로 별도 작성하자 ⇒ ld[0] = ld |
728x90