자바프로그래밍 언어: Util패키지의 실무적 클래스들
날짜와 시각에 대해 Calendar클래스를 이용하는 방법을 익힌다.
난수를 얻어낼 수 있는 난수 발생기를 생성하고 사용법을 익힌다.
배열 작업에 있어 정렬과 검색 등의 여러 가지 유익한 기능을 가지고 있는 Arrays를 공부하고 익힌다.
속성들을 저장 관리하는 Properties클래스를 생성하고 활용법을 익힌다.
1. Calendar
Calendar클래스는 1970년 1월 1일부터 특정 값으로 진보해 오면서 날짜와 시각에 대한 조작을 수행할 수 있도록 제공되는 추상 클래스이다.
객체 생성 법은 다음과 같다.
Calendar now = Calendar.getInstance();
반환형 | 메서드명 | 설명 |
boolean | after(Object when) | 현재 Calendar 객체가 인자로 전달된 when 객체의 날짜보다 후의 시각이라면 true 그렇치 않으면 false를 반환한다 |
before(Object when) | 현재 Calendar객체가 인자로 전달된 when객체의 날짜보다 전의 시각이다면 true, 그렇지 않으면 false를 반환한다0 | |
int | get(int field) | 인자로 전달된 field(년, 월, 일, 시, 분, 초)의 값을 반환한다. |
static Calendar | getInstance( ) | default TimeZone과 Locale을 사용해 Calendar객체를 반환한다. |
void | set(int year, int month, int date) | 현 Calendar 객체의 필드 중 년도와 월, 그리고 일(DAY_OF_MONTH)을 인자로 전달된 값을 설정한다. |
setTimeInMillis(long millins) | Calendar의 현재 시각을 인자로 전달된 long형의 값으로 설정한다. |
get()메서드를 통해 현재 Calendar객체가 기억하고 있는 필드(년,월,일,시,분,초)의 값을 얻어낼 수가 있음을 알 수 있다. 하지만 얻고자 하는 필드의 상수를 정확하게 알고 있어야 하는데 이는 API문서의 Field Summary에서 확인이 가능하다. 다음은 주요 필드들이다.
상수 | 설명 |
AM_PM | HOUR가 정오보다 전인지, 후인지를 나타내주는 상수이며, 만약 정보 전일 경우 (AM)에는 0을 반환하고 정오이후일 경우(PM)는 1을 반환한다 |
DAY_OF_MONTH | 한달중의 날짜 수를 의미하는 상수(1~31) |
DAY_OF_WEEK | SUNDAY에서 SATURDAY까지의 요일을 나타내는 상수(1~7) |
DAY_OF_YEAR | 한해 중 몇 일째인가를 나타내는 상수 |
DAY_OF_WEEK_IN_MONTH | 한달 중 해당 요일이 몇 번째인지 나타내는 상수 |
HOUR | 오전 또는 오후의 의미가 없이 몇 시인지를 나타내는 상수(0~11) |
HOUR_OF_DAY | 하루 중 시각을 나타내는 상수(0~23) |
MONTH | 달을 나타내는 상수이며 1월이 0이다(0~11) |
WEEK_OF_MONTH | 현 달에서 몇 주째인지를 나타내는 상수 |
WEEK_OF_YEAR | 현재 해에서 몇 주째인지를 나타내는 상수 |
예제>CalendarEx1.java
01 import java.util.Calendar;
02 import static java.lang.System.out;
03 public class CalendarEx1{
04
05 public static void main(String[] args) {
06 StringBuffer sb = new StringBuffer("년중 ");
07 Calendar now = Calendar.getInstance();
08
09 int week_yy = now.get(now.WEEK_OF_YEAR);
10 int yy = now.get(now.YEAR);
11 int mm = now.get(now.MONTH)+1; //1월이 0을 기억한다.
12 int dd = now.get(now.DAY_OF_MONTH);
13
14 sb.append(week_yy);
15 sb.append("주째인 ");
16 sb.append(yy);
17 sb.append("년 ");
18 sb.append(mm);
19 sb.append("월 ");
20 sb.append(dd);
21 sb.append("일");
22
23 out.println(sb.toString());
24 }
25 }
실행결과
연중 19주째인 2005년 5월 5일
Calendar객체에서의 월은 1월을 0으로 기억하고 있으며 우리가 인식하고 있는 월의 값을 구하기 위해 1을 더해야 함을 잊지 말자!
반복문이 아니므로 바로 출력해도 상관없겠지만 복습하는 차원에서 메모리 공간 낭비에 대한 고려로 StringBuffer객체에 변수 week_yy값과 yy, mm, dd값들과 몇 개의 문자열들을 중간에 넣어 추가하였다.
2. Random
Random 객체는 일련의 난수를 생성한다. 이렇게 생성된 Random 객체는 int형 float형 등의 난수가 발생 가능하며 정수형 난수 발생은 특정 범위가 없다. 하지만 부동소수점을 가지는 실수형들의 난수는 0.0에서 1.0 사이의 값을 받도록 되어 있다.
Random객체를 생성할 수 있는 생성자!
Random
반환형 | 메서드명 | 설명 |
double | nextDouble( ) | double형 자료에 따른 자료를 반환하게 되며0.0~1.0사이의 값이 반환된다 |
float | nextFloat( ) | float형 자료에 따른 자료를 반환하게 되며 0.0~1.0사이의 값이 반환된다 |
double | nextGaussian | 평균 0.0표준 편차 1.0의 Gauss분호의 double형의 난수를 반환한다 |
int | nextInt( ) | int형의 범위 전체에서 난수를 발생하여 반환한다 |
nextInt(int n) | 0부터 인자로 전달된 값의 전까지를 범위로 하여 난수를 발생하여 반환한다. | |
long | nextLong( ) | long형의 범위 전체에서 난수를 발생하여 반환한다 |
void | setSeed(long seed) | 인자로 전달된 long형인 seed를 난수 발생기의 시작 seed로 재설정한다 |
01 import java.util.Random;
02 import static java.lang.System.out;
03 public class RandomEx1 {
04
05 public static void main(String[] args) {
06 String[] lesson = {"Java Beg","JSP","XML&Java","EJB",};
07 Random r1 = new Random();
08
09 int index = r1.nextInt(4);
10 out.println("선택과목 :"+lesson[index]);
11 }
12 }
반환형 | 메서드명 | 설명 |
static <T> List <T> |
asList(T.. a) | 지정된 배열을 기본으로 하는 고정 길이의 배열을 반환한다. |
static int | binarySearch(Object[ ] a, Object key) | 이진 검색 방법을 사용하여 전달받은 인자 중 배열에서 두 번째 인자인 key객체를 검색한다. 그리고 검색된 객체의 index를 반환한다. |
static boolean | equals(Object [ ] a, Object [ ] a2) | 인자로 전달된 2개의 객체형 배열이 서로 같을 경우에 true를 반환한다 |
static void | fill(Object [ ] a, Object val) | 전달된 인자 중 객체형 배열의 각 요소를 전달된 인자 중 val이라는 객체로 모두 대입한다 |
fill(Object [ ] a, int fromIndex, int toIndex, Object val) | 전달된 인자 중 객체형 배열의 fromIndex에서 toIndex까지 지정된 범위에 있는 각 요소를 4번째 인자 val이라는 객체로 모두 대입한다. | |
static int | hashCode(Object [ ] a) | 전달된 배열 인자의 내용에 근거하는 해시코드를 반환한다. |
static void | sort(Object [ ] a) | 요소의 자연적(기본적)순서에 따라, 전달된 인자의 배열을 오름차순으로 정렬한다 |
sort(T [ ] a, Comparator <? super T> c) | 전달된 Comparator가 가리키는 순서에 따라 전달된 T a객체 배열을 정렬한다 | |
static String | toString(Object [ ] a) | 전달된 배열 내용들의 캐릭터 행 표현을 반환한다 |
01 import java.util.Arrays;
02 import static java.lang.System.out;
03 public class ArraysEx1 {
04
05 public static void main(String[] args) {
06 String[] ar = {"fill()","in","the","Arrays"};
07
08 Arrays.fill(ar, "SunAe"); //배열의 요소들을 "SunAe"로 채운다.
09 for(String n : ar)
10 out.print(n+",");
11
12 out.println("\n------------------------");
13 Arrays.fill(ar, 1, 3, "♥");
14 for(String n : ar)
15 out.print(n+",");
16 }
17 }
실행결과
SunAe, SunAe, SunAe, SunAe,
------------------------------------
SunAe, ♥,♥,SunAe,
13번 행은 배열의 부분 채우기이다.
배열 ar의 1번지째 요소에서 3번지째 요소를 만나기 전까지를 문자열 "♥"로 채우는 것인데 결국! 1번지와 2번지째 요소의 값이 변경된다.
5. 배열간의 비교
배열과 배열간의 내용을 비교한다는 것은 두 배열이 가지는 요소들이 서로 일치하는가? 하는 기능을 두고 얘기하는 것이다.
Arrays클래스의 equals()메서드는 두 배열의 길이와 각각의 요소들이 일치하는지를 검증하여 모두 일치할 경우에만 true를 반환해 주는 메서드이다.
<예제>ArraysEx2.java
01 import java.util.Arrays;
02 import static java.lang.System.out;
03 public class ArraysEx2 {
04
05 public static void main(String[] args) {
06 String[] ar1 = {"fill()","in","the","Arrays"};
07 String[] ar2 = {"fill()","in","","Arrays"};
08
09 if(!Arrays.equals(ar1, ar2))
10 out.println("두 배열이 다릅니다.");
11 out.println("--------------------------------");
12
13 Arrays.fill(ar2, 2, 3, "the");
14 if(!Arrays.equals(ar1, ar2))
15 out.println("두 배열이 다릅니다.");
16 else
17 out.println("두 배열이 같습니다.");
18 }
19 }
실행결과
두 배열이 다릅니다
---------------------------------------
두 배열이 같습니다
Arrays클래스의 equals()메서드는 두 배열의 내용이 일치하는지를 알아내는 메서드이다. 이는 두 배열의 요소들의 수가 같은지를 먼저 파악하고 두 배열이 같은 순서로 같은 요소들을 포함하고 있는 경우에 true를 반환하는 메서드이다. 또는 두 배열이 서로 null값을 참조하고 있다면 equals()메서드는 true를 반환한다.
'처음배우는 IT' 카테고리의 다른 글
자바프로그래밍 언어: AWT <1> (0) | 2021.01.11 |
---|---|
자바프로그래밍 언어: Util패키지의 실무적 클래스들 <2> (0) | 2021.01.10 |
자바프로그래밍 언어: 제네릭과 컬렉션 (0) | 2021.01.07 |
자바프로그래밍 언어: 패키지 및 예외<2> (0) | 2021.01.06 |
자바프로그래밍 언어: 패키지 및 예외<1> (0) | 2021.01.05 |