dayArray[dayOfWeek-1] 이건 어떻게 해석하나요?
조회수 119회
package sec02.verify.exam02;
import java.util.Calendar;
public class DatePrintExample2 {
public static void main(String[] args) {
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH)+1;
String strMonth = (month<10) ? ("0"+month) : (""+month);
int dayOfMonth = now.get(Calendar.DAY_OF_MONTH);
String strDayOfMonth = (dayOfMonth<10)? ("0"+dayOfMonth) : (""+dayOfMonth);
String[] dayArray = {"일", "월", "화", "수", "목", "금", "토"};
int dayOfWeek = now.get(Calendar.DAY_OF_WEEK);
String strDayOfWeek = dayArray[dayOfWeek-1] + "요일";
int hour = now.get(Calendar.HOUR_OF_DAY);
String strHour = (hour<10) ? ("0"+hour) : (""+hour);
int second = now.get(Calendar.SECOND);
String strSecond = (second<10) ? ("0"+second) : (""+second);
System.out.print(year + "년 ");
System.out.print(strMonth + "월 ");
System.out.print(strDayOfMonth + "일 ");
System.out.print(strDayOfWeek + " ");
System.out.print(strHour + "시 ");
System.out.print(strSecond + "분 ");
}
}
여기서 String[] dayArray = {"일", "월", "화", "수", "목", "금", "토"}; 이렇게 배열 선언하고 이 변수 dayArray 안에 다시 리스트 [dayOfWeek-1] 를 대입?하는건 어떻게해석해야하는건지모르겠어요
1 답변
-
now
는Calendar
입니다.Calendar.get(Calendar.DAY_OF_WEEK)
을 하면DayOfWeek.MONDAY
부터DayOfWeek.SUNDAY
사이의 값 중 하나를 반환합니다. 여기서DayOfWeek
은 Enum입니다.Enum
잠시 Enum에 대해서 설명해보겠습니다. Enum이 무엇인지 알고 계신다면 스킵하셔도 좋습니다.
Enumenumerable은 '열거체'라는 뜻으로, 쉽게 말하면 상수를 모아 둔 클래스인데요, Enum을 사용하면 코드 작성에 있어서 오류를 줄여 줄 수 있습니다. 예를 들어, Enum 없이 간단한 사칙연산 함수를 만들어 준다고 해 봅시다. 이렇게 만들 수 있겠습니다.
int eval(int a, int b, char op) throws ArithmeticException { if (op == '+') return a + b; if (op == '-') return a - b; if (op == '*') return a * b; if (op == '/') return a / b; throw new ArithmeticException(); }
여기서 우리는
op
에+-*/
이외의 문자도 넣을 수 있는 걸 확인할 수 있습니다.eval(1, 2, '=')
같은 줄은ArithmeticException
이 발생해서 크래시가 나겠지만, 실행하기 전까지는 그 누구도 에러가 난다고 알려주지 않습니다.함수를 이렇게 바꿔 보겠습니다.
op
인자가 Enum이 되었습니다.enum Operator { ADD, SUB, MUL, DIV } int eval(int a, int b, Operator op) throws ArithmeticException { if (op == Operator.ADD) return a + b; if (op == Operator.SUB) return a - b; if (op == Operator.MUL) return a * b; if (op == Operator.DIV) return a / b; throw new ArithmeticException(); }
이렇게 바꾸면 코드의 다른 부분에서
eval(1, 2, Operator.ADD)
와 같은 식으로 호출할 수 있습니다.op
자리에 들어갈 수 있는 값들은Operator.ADD
,Operator.SUB
,Operator.MUL
,Operator.DIV
뿐이므로eval
함수를 구현할 때 이 네 가지 경우 이외의 것을 생각할 필요가 없게 됩니다.이외의 이점도 많으나, 이런 이점이 있기에 Enum을 사용한다고 보시면 됩니다.
DayOfWeek
그래서
now.get(Calendar.DAY_OF_WEEK)
의 자료형은int
가 아니고, 약간 특별한 자료형인DayOfWeek
입니다. 아마int dayOfWeek = now.get(Calendar.DAY_OF_WEEK);
은 오류가 날 것 같은데요, 대신int
로 받고 싶다면getValue()
메서드를 사용하면 됩니다. 아래 예제와 같이 할 수 있습니다.int dayOfWeek = now.get(Calendar.DAY_OF_WEEK).getValue();
그런데 공식 문서를 보니
getValue()
는 월요일이 1부터 일요일이 7까지 되도록 반환해 준다고 합니다. 이에 맞게 원본 함수를 조금 수정해 줘야겠습니다.String[] dayArray = {"월", "화", "수", "목", "금", "토", "일"}; // dayOfWeek는 월요일이 1, 일요일이 7 int dayOfWeek = now.get(Calendar.DAY_OF_WEEK).getValue(); // dayOfWeek - 1은 월요일이 0, 일요일이 6 String strDayOfWeek = dayArray[dayOfWeek - 1] + "요일";
댓글 입력