본문 바로가기
Back/JAVA

Util 패키지 - Random, Math, Calendar, Arrays

by 시월해 2021. 3. 15.

Util 패키지의 주요 클래스


  1. Random 클래스

   - 지정된 범위 내에서 임의의 난수를 발생시키는 클래스.
   - 활용 분야 : 게임, 확률 등에서 사용.
   - 형식) nextInt(가장 큰 수) + 시작 수


  2. Math 클래스
     - 수학과 관련된 메서드를 제공해 주는 클래스.
     - 유일하게 java.lang 패키지에 있는 클래스임.


  3. Calendar 클래스
     - 날짜 / 시간 관련 정보를 제공해 주는 클래스.- 날짜 / 시간과 관련된 정보를 제공해 주는 클래스.
     - Calendar 클래스는 추상클래스임.
     - 추상클래스로 작성된 이유 : 날짜와 시간을 계산하는 방법이 지역, 문화, 나라마다 다르기 때문임.
     - Calendar 클래스에는 날짜와 시간을 계산하는데 꼭 필요한 메서드나 상수로 구성이 되어 있음.
     - 추상클래스이지만 getInstance() 메서드를 이용하여 시스템의 날짜와 시간 정보를 표현할 수 있음.
     - getInstance() : 싱글턴 방식. 하나의 인스턴스만을 가지고 공유해서 사용할 때 쓰는 방식.

 

  4. Arrays 클래스
     - 배열 객체를 처리해주는 클래스.

     1) fill() : 배열의 요소를 특정한 값(데이터)으로 채우는 메서드.

     2) equals(객체, 객체) : 두 객체의 내용(데이터)이 같은지 틀린지 비교하는 메서드.  
        ==> return 값이 boolean형(true, false)
        ==> 객체의 방 마다 모든 데이터가 같아야만 true.

     3) sort() : 배열의 원소(데이터)를 정렬(오름차순)하는 메서드.


예제1) Random 클래스

public class Ex01 {

	public static void main(String[] args) {
		
		// 로또 번호를 만들어 보자.
		Random random = new Random();
		
		int num = 0;
		
		// 중복이 발생되는 코드
		for(int i=1; i<7; i++) {
			num = random.nextInt(45) + 1;
			System.out.print(num + "\t");
		}
		
		System.out.println();
		System.out.println();
		
		// 중복이 발생되지 않게 로또 만들자.
		int[] lotto = new int[6];  // 로또 배열
		
		for(int i=0; i<lotto.length; i++) {
			lotto[i] = random.nextInt(45) + 1;
			
			if(i > 0) {
				for(int j=0; j<i; j++) {
					if(lotto[i] == lotto[j]) {  // 중복인 경우
						lotto[i] = random.nextInt(45) + 1;
						j = -1;
					}
				}
			}  // if문 end
			
			System.out.print(lotto[i] + "\t");
			
		}
		
		System.out.println();
		

	}

}

숫자가 모두 랜덤하게(중복없이) 출력된 것을 볼 수 있다.


예제2) Math 클래스

public class Ex02 {

	public static void main(String[] args) {
		
		// 1. max() : 최대값을 구해 주는 메서드. - 두 수를 비교
		//    min() : 최소값을 구해 주는 메서드. - 두 수를 비교
		int num1 = 57, num2 = 34;
		
		System.out.println("최대값 >>> " + Math.max(num1, num2));
		System.out.println("최소값 >>> " + Math.min(num1, num2));
		System.out.println();
		
		
		// 2. round() : 반올림이 적용 되는 메서드.
		System.out.println(125.5124);
		System.out.println(Math.round(125.5124));
		System.out.println();
		
		
		// 3. abs() : 절대값을 구해 주는 메서드.
		System.out.println("abs >>> " + Math.abs(-125.34));
		System.out.println();
		
		
		// 4. ceil() : 무조건 올림을 해 주는 메서드.
		System.out.println("ceil() >>> " + Math.ceil(12.123));
		
		
		

	}

}

ceil() 메소드는 게시판 페이징 사용 시 유용하다.

 


예제3) Calendar 클래스

package util;

import java.util.Calendar;

public class Ex03 {

	public static void main(String[] args) {
		
		Calendar cal = Calendar.getInstance();
		
		
		// 날짜와 관련된 정보를 확인하는 방법
		int year = cal.get(Calendar.YEAR);         // 현재 년도
		int month = cal.get(Calendar.MONTH) + 1;   // 현재 월
		int day = cal.get(Calendar.DAY_OF_MONTH);  // 현재 일
		int week = cal.get(Calendar.WEEK_OF_YEAR); // 1년 52 주중 몇번째 주 확인
		
		
		System.out.println("현재 년도 >>> " + year + "년");
		System.out.println("현재 월 >>> " + month + "월");
		System.out.println("현재 일 >>> " + day + "일");
		System.out.println("현재 주 >>> " + week + "주");
		System.out.println();
		
		
		// 시간과 관련된 정보를 확인하는 방법.
		// 1. 12시간제를 이용하는 방법 - 오전(0), 오후(1)
		//    형식) Calendar.AM_PM
		int am_pm = cal.get(Calendar.AM_PM);
		int hour = cal.get(Calendar.HOUR);      // 몇 시
		int minute = cal.get(Calendar.MINUTE);  // 몇 분
		int second = cal.get(Calendar.SECOND);  // 몇 초
		
		System.out.println(am_pm);
		
		if(am_pm == 0) {  // 오전인 경우
			System.out.println("현재 시간은 AM(오전) "+hour+"시 "+
					minute+"분 "+second+"초 입니다.");
		}else {
			System.out.println("현재 시간은 PM(오후) "+hour+"시 "+
					minute+"분 "+second+"초 입니다.");
		}
		System.out.println();
		
		
		// 2. 24시간제를 이용하는 방법
		//    형식) Calendar.HOUR_OF_DAY
		int hours = cal.get(Calendar.HOUR_OF_DAY);
		System.out.println("현재 시간은 "+hours+"시 "+minute+"분 "+
					second+"초 입니다.");
		

	}

}

결과


예제4) Arrays 클래스

import java.util.Arrays;

public class Ex04 {

	public static void main(String[] args) {
		
		String[] str = {"홍길동", "이순신", "유관순"};
		
		for(String k : str) {
			System.out.println("str 배열 요소 >>> " + k);
		}
		System.out.println();
		
		// 1.fill() : 배열의 요소를 특정한 값(데이터)으로 채우는 메서드.
		Arrays.fill(str, "김유신"); // str이란 배열에 "김유신"데이터로 다 채워라.
		
		for(String k : str) {
			System.out.println("str 배열 요소 >>> " + k);
		}
		System.out.println();
		
		String[] str2 = {"김유신", "김유신", "강감찬"};
		
		// 2.equals(객체, 객체) : 두 객체의 내용(데이터)이 같은지 틀린지 비교하는 메서드.  
		//                     ==> return 값이 boolean형(true, false)
		//                     ==> 객체의 방 마다 모든 데이터가 같아야만 true.
		if(Arrays.equals(str, str2)) {
			System.out.println("두 객체의 내용(데이터)은 같습니다.");
		} else {
			System.out.println("두 객체의 내용(데이터)은 다릅니다.");
		}
		System.out.println();
		
		// 3.sort() : 배열의 원소(데이터)를 정렬(오름차순)하는 메서드.
		int[] arr = {54, 67, 13, 97, 41};
		
		for(int k : arr) {
			System.out.print(k + "\t");
		}
		System.out.println();
		
		Arrays.sort(arr); //오름차순 정렬
		
		for(int k : arr) {
			System.out.print(k + "\t");
		}
		System.out.println();
		
		
	}

}

1. fill()함수로 str2의 데이터가 모두 김유신으로 채워짐. 2. 두 객체의 내용중 마지막 방의 "강감찬"이 다르기 때문에 false 반환 3. 정렬 알고르짐을 따로 사용하지 않아도 sort()를 통해 오름차순 정렬됨