관리 메뉴

오버플로

[Java] Calendar Class / VO Class 본문

Java

[Java] Calendar Class / VO Class

NACO 2021. 8. 2. 20:47

1. Calendar Class 

- 하나의 날짜 정보를 얻을 때 (Ex. 년도, 시간, 분 등 ..)

  (형식있는 날짜를 Calendar로 구하면 문장이 길어짐! 형식있는 날짜는 Date/SimpleDateFormat으로 구하자)

- java.util package에서 제공

- abstract class이므로 객체화가 되지 않음 (자식 클래스가 객체화되면 객체로 생성됨)

   => 자식클래스 : GregorianCalendar

 

- 생성: 1) 자식 클래스를 통해 생성 (is a 관계의 객체화)

             Calendar cal = new GregorianCalendar();

          2) method를 이용한 생성 (권장)

             : Calendar의 instance를 얻는 method를 사용하여 객체를 얻을 수 있음

               Calendar cal1 = Calendar.getInstance();

 

- 일: 1) 정보를 얻을 때에는 Calendar.get method의 Calendar.Constant를 넣어서 얻음

     - 년 구하기 : int year = cal.get(Calendar.YEAR);

     - 월 구하기 :              = cal.get(Calendar.MONTH)+1; // 월은 0~11월. 12달이 나옴.

     - 일 구하기 :              = cal.get(Calendar.DAY_OF_MONTH); // DAY_OF_YEAR은 년기준 day

     - 요일 구하기 :          = cal.get(Calendar.DAY_OF_WEEK) // 일~토 (1~7)

     - 시간 구하기 : HOUR (12시간) / HOUR_OF_DAY (24시간)

     - 분 구하기 : MINUTE

     - 초 구하기 : SECOND

 

**String의 split method 사용하면 용이함!**

- 기준 문자열로 구분하여 배열로 만들어 반환하는 일

- 문법) String[] 배열명 = "문자열".split(“구분문자열”)

    Ex.) String[] week = "일요일,월요일,화요일,수요일,목요일,금요일,토요일".split(","); //,를 구분문자열로 배열 생성

 

**Calendar에서 다른 날짜 정보 얻기!**

- Calendar가 생성되면 생성된 시점의 현재 날짜가 할당

- set method를 활용하자 !  : cal.set(int field, int value)

                                     > field : 변경하고 싶은 날짜 정보 상수

                                     > value : 값

  주의) 현재 월에 존재하지 않는 일이 설정되면 자동으로 다음달 1일 + 초과일수로 변경 됨

 

2. VO (Value Object) Class

- 값을 저장하고 전달할 목적으로 만드는 Class

- 인스턴스 변수/기본 생성자/인자 있는 생성자/getter와 setter method가 존재하는 클래스

  (프레임웍 사용하면 getter/setter method만 넣게 됨)

- method의 매개변수가 여러개일 때 클래스로 묶어서 처리하는 방법


# 오늘의 코딩 #

-VO Class와 Calendar Class를 활용해보자

 

#먼저 VO Class 작성 (년,월,일을 저장하는 Class)

package test;

/**
 * VO (Value Object) : 값을 저장하고 전달할 목적으로 만드는 클래스
 * @author user
 */
public class CalendarVO {

	private int year, month, day;

	public CalendarVO {
	
	}//CalendarVO

	public CalendarVO(int year, int month, int day) { // 매개변수를 입력받는 생성자
		this.year = year;
		this.month = month;
		this.day = day;
	}//CalendarVO

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		this.month = month;
	}

	public int getDay() {
		return day;
	}

	public void setDay(int day) {
		this.day = day;
	}

}// class

 

# Calendar Class에서 VO Class를 매개변수로 받아보았다

package test;

import java.util.Calendar;

/**
 * Calnedar Class와 VO Class 활용<br>
 * @author user
 */
public class UseCalendar {

	/**
	 * "년월일"을 정수로 가진 클래스를 매개변수로 받아 요일을 반환하는 method<br>
	 * @param calendarVO 년,월,일을 묶어서 관리하는 클래스
	 * @return 요일
	 */
	public String weekTitle(CalendarVO calendarVO) {
		String resultWeek = "";

		Calendar cal = Calendar.getInstance(); // 현재 날짜
		// 입력한 값으로 변환된 날짜
		cal.set(Calendar.YEAR, calendarVO.getYear());
		cal.set(Calendar.MONTH, calendarVO.getMonth() - 1); // 사람이 사용하는 월보다 1 적게 설정
		cal.set(Calendar.DAY_OF_MONTH, calendarVO.getDay());

		resultWeek = "일,월,화,수,목,금,토".split(",")[cal.get(Calendar.DAY_OF_WEEK) - 1];
		return resultWeek;
	}// weekTitle

	public static void main(String[] args) {

		UseCalendar week = new UseCalendar();
		System.out.println(week.weekTitle(new CalendarVO(2021, 8, 31)));
		
	}// main
}// class

- String 배열을 생성하여 하나씩 값을 넣는것보다 String.split을 이용한다면 수고로움을 덜 수 있다!

 

# 출력 결과 #

 

 

 

 

 

'Java' 카테고리의 다른 글

[Java] import / static import  (0) 2021.08.05
[Java] Calendar Class(2)  (0) 2021.08.03
[Java] Date Class / SimpleDateFormat Class / Locale Class  (0) 2021.08.01
[Java] StringTokenizer  (0) 2021.07.30
[Java] Math Class  (0) 2021.07.29
Comments