아날로그 벽시계의 기타 메서드들
아날로그 시계 시침/분침/초침의 각도와 관련된 기능 추가

추가되는 기능은 다음과 같음
- 시/분/초 각도 getter
- tick
- mount
아래는 시간적 결합을 해결한 시간 바꾸기 에서 시/분/초 각도 계산이 추가된 코드
시침의 각도는 분에 영향을 받는다.
public class Clock {
private int seconds;
// 초 단위에서 시각으로 변환하는 메서드들
public byte getHours() {
int hours = this.seconds / 60 / 60;
return hours == 0 ? 12 : (byte) hours; // 12시간제로 표현
}
public byte getMinutes() {
return (byte) (this.seconds / 60 % 60);
}
public byte getSeconds() {
return (byte) (this.seconds % 60);
}
// 초 추가하는 메서드
public void addSeconds(short seconds) {
final int HALF_DAY_IN_SECONDS = 60 * 60 * 12;
int value = this.seconds + seconds;
while (value < 0) {
value += HALF_DAY_IN_SECONDS;
}
this.seconds = value % HALF_DAY_IN_SECONDS;
}
// 초침 각도 계산
public short getSecondHandAngle() {
return (short) (getSeconds() * 6); // 360도 / 60초 = 6도
}
// 분침 각도 계산
public short getMinuteHandAngle() {
return (short) (getMinutes() * 6); // 360도 / 60분 = 6도
}
// 시침 각도 계산 (제안한 수정 사항 반영)
public short getHourHandAngle() {
final int ANGLE_PER_HOUR = 360 / 12;
int hours = getHours(); // 이미 1~12 범위 내에 있음
return (short) (hours * ANGLE_PER_HOUR + getMinutes() * ANGLE_PER_HOUR / 60);
}
}

코드 실행 결과는 다음과 같음