받아올림도 하는 시간 바꾸기
받아올림
full 코드는 아래에서 확인
public void setHours(byte hours) {
int value = hours - 1;
while (value < 0) {
value += 12;
}
this.hours = (byte) (value % 12 + 1);
}
public void setMinutes(byte minutes) {
int wrapCount = 0;
while (minutes < 0) {
minutes += 60;
--wrapCount;
}
wrapCount += minutes / 60;
this.minutes = (byte) (minutes % 60);
if (wrapCount != 0) {
setHours(this.hours + wrapCount);
}
}
public void setSeconds(byte seconds) {
int wrapCount = 0;
while (seconds < 0) {
seconds += 60;
--wrapCount;
}
wrapCount += seconds / 60;
this.seconds = (byte) (seconds % 60);
if (wrapCount != 0) {
setMinutes(this.minutes + wrapCount);
}
}
시간적 결합(temporal coupling)

기존에는 각 setter가 다른 멤버 변수에 의존하지 않음
- 따라서 setter 호출 순서는 중요하지 않음

수정된 setter은 호출 순서를 지켜야함

setTime()에서 시, 분, 초를 한번에 설정할 때 setHours(), setMinutes(), setSeconds() 순서대로 호출해야함
