본문 바로가기

학원/복기

0419 - java.util 패키지 (Random, UUID, Date 클래스) / java.text 패키지 (SimpleDateFormat, DecimalFormat 클래스)

java.util 패키지

: 프로그램 작성에 유용한 기능을 제공하는 클래스(or 인터페이스)가 선언된 패키지

-Scanner 클래스 : 입력장치로부터 값을 입력받기 위한 기능을 메소드로 제공하기 위한 클래스 
-Arrays 클래스 : 배열의 요소를 처리하기 위한 기능을 메소드로 제공하기 위한 클래스 

-Random 클래스 : 난수값 관련 기능을 메소드로 제공하기 위한 클래스 

Random.nextInt(int bound) : 0 ~ bound-1 범위의 정수 난수값을 반환하는 메소드
import java.util.Random;

public class RandomApp {
	 public static void main(String[] args) {
		Random random = new Random(); //객체생성
		
		for(int i = 1; i<= 5; i++) {
			System.out.println(i + "번째 난수값 >> " + random.nextInt(100)); //0 ~ 99 범위의 난수값 
		}
		
		//출력예시:
		//1번째 난수값 >> 55
		//2번째 난수값 >> 72
		//3번째 난수값 >> 7
		//4번째 난수값 >> 54
		//5번째 난수값 >> 96

	}
}

 

-UUID 클래스 : 범용적으로 사용되는 식별자(고유값)를 생성하기 위한 기능을 메소드로 제공하는 클래스

UUID.randomUUID() : 식별자를 생성하여 식별자가 저장된 UUID 객체를 반환하는 메소드
  => UUID 객체에 저장된 식별자는 숫자와 영문자(소문자), 4개의 - 문자를 조합하여 36개의 문자가 구성된 문자열로 생성
  
UUID.toString() : UUID 객체에 저장된 식별자를 문자열로 변환하여 반환하는 메소드

 

새로운 비밀번호를 생성하여 제공하는 프로그램 만들기

1) Random 클래스 이용

import java.util.Random;

public class NewPasswordApp {
	public static String newPasswordOne() {
		Random random = new Random();
		
		//비밀번호로 사용될 문자들이 저장된 문자열 생성
		String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*";
		
		StringBuffer password = new StringBuffer();
		for(int i=1;i<=10;i++) {
			password.append(str.charAt(random.nextInt(str.length())));
		}
		
		return password.toString();
	}
	
	public static void main(String[] args) {
		System.out.println("새로운 비밀번호-1 = " + newPasswordOne());
	}
}

//출력 예시
//새로운 비밀번호-1 = E5T5GRMFZ#

 

2) UUID 클래스 이용

import java.util.UUID;

public class NewPasswordApp {
	public static String newPasswordTwo() {
		return UUID.randomUUID().toString().replace("-", "").substring(0, 10).toUpperCase();
	}
	
	public static void main(String[] args) {
		System.out.println("새로운 비밀번호-2 = " + newPasswordTwo());
	}
}
//출력예시
//새로운 비밀번호-2 = 8D1FCF5992

 

-Date 클래스 : 날짜와 시간을 저장하고 저장된 날짜와 시간 관련 기능을 메소드로 제공하기 위한 클래스 

Date.toString() : Date 객체에 저장된 날짜와 시간을 문자열로 변환하여 반환하는 메소드 

Date.getYear() : Date 객체에 저장된 날짜와 시간에서 [년]을 반환하는 메소드
 => 1900년부터 1씩 증가된 정수값 반환 >> + 1900 해줘야 한다

Date.getMonth() : Date 객체에 저장된 날짜와 시간에서 [월]을 반환하는 메소드
 => 0(1월) ~ 11(12월) 범위의 정수값 반환 >> + 1 해줘야 한다

Date.getDate() : Date 객체에 저장된 날짜와 시간에서 [일]을 반환하는 메소드

Date.getDay() : Date 객체에 저장된 날짜와 시간에서 [요일]을 반환하는 메소드
 => 0(일요일) ~ 6(토요일) 범위의 정수값이 반환 

Date.getTime() : Date 객체에 저장된 날짜와 시간에 대한 타임스템프를 반환하는 메소드 

*타임스템프(TimeStamp) : 1970년 1월 1일을 기준으로 1ms마다 1씩 증가된 정수값 
 => 날짜와 시간을 정수값(long)으로 표현하여 연산 처리하기 위해 사용

 

예시)

import java.util.Date;

public class DateApp {
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		//Date 클래스의 기본 생성자를 사용하여 객체를 생성하면 시스템의 현재 날짜와 시간이
		//저장된 Date 객체가 생성된다.
		Date now = new Date();
		
		System.out.println("now.toString() = " + now.toString());  
		//출력 예시:now.toString() = Wed Apr 19 15:00:24 KST 2023
		System.out.println("now = " + now);  //참조변수를 출력할 경우 toString() 메소드 자동 호출 
		
		String[] day = {"일","월","화","수","목","금","토"};
	
		String printDate = (now.getYear()+1900) + "년 " + (now.getMonth()+1) + "월 " +
		now.getDate() + "일 " + day[now.getDay()] + "요일";
		
		System.out.println("현재 날짜 = " + printDate); 
		//출력 예시 : 현재 날짜 = 2023년 4월 19일 수요일
		
		long currentTime = now.getTime();
		//long currentTime = System.currentTimeMillis(); 
		
		//[2000년 1월 1일 0시 0분 0초]가 저장된 Date 객체 생성 
		Date wantDate = new Date(100,0,1);
		System.out.println("wantDate = " + wantDate); //wantDate = Sat Jan 01 00:00:00 KST 2000
		
		long wantTime = wantDate.getTime(); 
		
		//2000년 1월 1일부터 현재까지 며칠이 지났는지 
		System.out.println("연산결과(일) = " + (currentTime-wantTime)/(1000*86400)); //연산결과(일) = 8509
	}
}

 

 

- Calendar 클래스  : 날짜와 시간을 저장하고 저장된 날짜와 시간 관련 기능을 메소드로 제공하기 위한 클래스

Calendar 클래스 메소드 예시)

Calendar.getInstance() : 시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 생성하여 반환하는 메소드 
 => new연산자를 이용해 생성자 호출해 객체를 생성하는 것이 아니라 .getInstance() 이용해 객체 생성
 
Calendar.toString() : Calendar 객체에 저장된 날짜와 시간을 문자열로 변환하여 반환하는 메소드

Calendar.get(int field) : Calendar 객체에 저장된 날짜와 시간에서 매개변수로 전달받은 Calendar 클래스의 
상수(Constant)에 대한 값을 반환하는 메소드 
 => [월]은 0(1월)~11(12월) 범위의 정수값으로 표현되며 [요일]은 1(일요일)~7(토요일) 범위의 정수값으로 표현

 

※ Date 클래스의 Date.getDay() 의 요일은 0(일요일)~6(토요일) 범위의 정수값이 반환되는 것과 구분하자!

Date.getDay() : Date 객체에 저장된 날짜와 시간에서 [요일]을 반환하는 메소드
 => 0(일요일) ~ 6(토요일) 범위의 정수값이 반환
 
Calendar.get(int field) : Calendar 객체에 저장된 날짜와 시간에서 매개변수로 전달받은 Calendar 클래스의 
상수(Constant)에 대한 값을 반환하는 메소드 
 => [요일]은 1(일요일)~7(토요일) 범위의 정수값으로 표현

 

import java.util.Calendar;

public class CalendarApp {
	public static void main(String[] args) {
		
       	       //new 연산자가 아닌 Calendar.getInstance() 이용해 객체 생성 
		Calendar calendar = Calendar.getInstance();
		
		//System.out.println("calendar.toString() = " + calendar.toString());
		System.out.println("calendar = " + calendar); //toString 생략가능
		
		String[] day = {"일","월","화","수","목","금","토"};
		
		//Calendar.get(int field) : Calendar 객체에 저장된 날짜와 시간에서 매개변수로 
		//전달받은 Calendar 클래스의 상수(Constant)에 대한 값을 반환하는 메소드 
		// => [월]은 0(1월)~11(12월) 범위의 정수값으로 표현되며 [요일]은 1(일요일)~7(토요일) 범위의 정수값으로 표현 
		String printDate = calendar.get(Calendar.YEAR)+"년 " + (calendar.get(Calendar.MONTH)+1)
				+ "월 " + calendar.get(Calendar.DATE) + "일 "
				+ day[calendar.get(Calendar.DAY_OF_WEEK)-1] + "요일";
		
		System.out.println("현재 날짜 = " + printDate); //현재 날짜 = 2023년 4월 19일 수요일
	}
}

 

현재 년월에 대한 달력을 출력하는 프로그램 작성 

참고 메소드)

Calendar.set(int field, int value) : Calendar 객체에 저장된 날짜와 시간을 매개변수로 전달받은 상수를 
이용하여 날짜와 시간 중 원하는 대상을 변경하는 메소드

Calendar.getActualMaximum(int field) : Calendar 객체에 저장된 날짜와 시간에서매개변수로 전달받은 상수에 
대한 최대값을 반환하는 메소드
import java.util.Calendar;

public class CurrentCalendarApp {
	public static void main(String[] args) {
		//시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 반환받아 저장
		Calendar calendar=Calendar.getInstance();
		
		//Calendar 객체에 저장된 날짜와 시간 중 [일]을 [1일]로 변경
		//Calendar.set(int field, int value) : Calendar 객체에 저장된 날짜와 시간을 매개변수로
		//전달받은 상수를 이용하야 날짜와 시간 중 원하는 대상을 변경하는 메소드
		calendar.set(Calendar.DATE, 1);
		
		//Calendar 객체에 저장된 날짜와 시간 중 [요일]을 반환받아 저장
		int week=calendar.get(Calendar.DAY_OF_WEEK);
		//System.out.println("week = "+week);
		
		System.out.println("         "+calendar.get(Calendar.YEAR)+"년 "
				+(calendar.get(Calendar.MONTH)+1)+"월");
		System.out.println("============================");
		System.out.println("  일  월  화  수  목  금  토");
		System.out.println("============================");
		
		//[1일]을 출력하기 전까지의 요일을 공백으로 출력
		for(int i=1;i<week;i++) {
			System.out.print("    ");
		}
		
		//1일부터 [월]의 마지막 날짜까지 출력
		//Calendar.getActualMaximum(int field) : Calendar 객체에 저장된 날짜와 시간에서
		//매개변수로 전달받은 상수에 대한 최대값을 반환하는 메소드
		for(int i=1;i<=calendar.getActualMaximum(Calendar.DATE);i++) {
			//날짜 출력 >> 자릿수 맞춤
			if(i <= 9) {
				System.out.print("   "+i);
			} else {
				System.out.print("  "+i);
			}
			
			week++;
			
			if(week % 7 == 1) {//다음 출력값(일)이 일요일인 경우
				System.out.println();
			}
			
		}
		System.out.println();
		System.out.println("============================");
	}
}

출력결과


java.text 패키지 

: 객체에 저장된 값을 변환하는 기능의 클래스(인터페이스)가 선언된 패키지 

- SimpleDateFormat 클래스 : Date 객체와 String 객체를 서로 반대로 변환하기 위한 기능을 메소드로 제공하기 위한 클래스 

 

메소드 예시)

SimpleDateFormat.foramt(Date date) : Date 객체에 저장된 날짜와 시간을 SimpleDateFormat 객체에 저장된 패턴정보를 
사용하여 문자열(String객체)로 변환해 반환하는 메소드

SimpleDateFormat.applyPattern(String pattern) : SimpleDateFormat 객체에 저장된 패턴정보를 변경하는 메소드

SimpleDateFormat.parse(String str) : SimpleDateFormat 객체에 저장된 패턴정보와 동일한 문자열을 전달받아 문자열로 
표현된 날짜와 시간이 저장된 Date 객체를 생성하여 반환하는 메소드 - ParseException 발생 가능 
 => SimpleDateFormat 객체에 저장된 패턴정보와 일치하지 않는 문자열이 전달된 경우 ParseException 발생 가능 - 예외 처리

 

SimpleDateFormat 클래스로 객체를 생성하기 위한 매개변수에 날짜와 시간에 대한 패턴정보를 문자열을 전달받아 
객체로 생성하는 생성자를 사용한다. 
=> 패턴정보 : 패턴문자(날짜와 시간을 임의의 문자로 표현)를 사용하여 표현된 문자열 
=> 패턴문자 : y(년), M(월), d(일), E(요일), AM or PM(오전 또는 오후), h(시:12), H(시:24), m(분), s(초)

예시) SimpleDateFormat foramt = new SimpleDateFormat("yyyy년 MM월 dd일 E요일");

 

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatApp {
	public static void main(String[] args) {
		Date now = new Date();
		//SimpleDateFormat 클래스로 객체를 생성하기 위한 매개변수에 날짜와 시간에 대한
		//패턴정보를 문자열을 전달받아 객체로 생성하는 생성자를 사용 
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy년 MM월 dd일 E요일"); //매개변수로 주로 String pattern을 이용 
		
        	//SimpleDateFormat.foramt(Date date) 
		String printDate = dateFormat.format(now); //Date 객체 >> String 객체 
		
		System.out.println("현재 날짜 = " + printDate);
		
        	//SimpleDateFormat.applyPattern(String pattern)
		//: SimpleDateFormat 객체에 저장된 패턴정보를 변경
		dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss");
		System.out.println("현재 = " + dateFormat.format(now)); //현재 = 2023-04-19 16:02:59
		
		String want = "2000-01-01 00:00:00";
		try {
        		//SimpleDateFormat.parse(String str)
			//SimpleDateFormat 객체에 저장된 패턴정보와 일치하지 않는 문자열이 전달된 
			//경우 ParseException 발생 가능 - 예외 처리 
			Date wantDate = dateFormat.parse(want); //String 객체 >> Date 객체  
			System.out.println("wantDate = " + wantDate);
		} catch (ParseException  e) {
			System.out.println("[에러]형식에 맞게 날짜와 시간을 입력해 주세요.");
		} 
        //wantDate = Sat Jan 01 00:00:00 KST 2000
	}
}

 

- DecimalFormat 클래스 : Number 객체(숫자값)와 String 객체를 서로 반대로 변환하기 위한 기능을 메소드로 제공하기 위한 클래스 

DecimalFormat 클래스로 객체를 생성하기 위한 매개변수에 숫자값에 대한 패턴정보를 문자열로 전달받아 객체로 생성하는 
생성자를 이용
=> 패턴문자 : #(숫자 - 공백), 0(숫자 - 0), 콤마(,), 소숫점(.), 달러($)

예시) DecimalFormat decimalForamt = new DecimalFormat("###,###,##0");

 

메소드 예시)

DecimalFormat.format(long number) : 숫자값을 전달받아 DecimalFormat 객체에 저장된 패턴정보를 사용하여 
문자열로 변환하여 반환하는 메소드 

DecimalFormat.getInstance() : 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드 
 => 3자리마다 ,를 사용하여 숫자값을 표현하는 패턴정보 

DecimalFormat.getCurrencyInstance() : 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드 
 => 앞에 시스템이 사용하는 화폐단위를 붙이고 3자리마다 ,를 사용하여 숫자값을 표현하는 패턴정보

 

 

import java.text.DecimalFormat;

public class DecimalFormatApp {
	public static void main(String[] args) {
		int money = 100_000_000;
		System.out.println("금액 = " + money + "원"); //금액 = 100000000원
		
		//DecimalFormat 클래스로 객체를 생성하기 위한 매개변수에 숫자값에 대한 패턴정보를
		//문자열로 전달받아 객체로 생성하는 생성자를 이용
		DecimalFormat decimalForamt = new DecimalFormat("###,###,##0");
		
		//DecimalFormat.format(long number) : 숫자값을 전달받아 DecimalFormat 객체에 저장된
		//패턴정보를 사용하여 문자열로 변환하여 반환하는 메소드 
		System.out.println("금액 = " + decimalForamt.format(money) + "원"); 
        	//금액 = 100,000,000원
       		=============================================================================
        
		//DecimalFormat.getInstance() : 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드 
		// => 3자리마다 ,를 사용하여 숫자값을 표현하는 패턴정보 
		System.out.println("금액 = " + DecimalFormat.getInstance().format(money)+"원"); 
       		//금액 = 100,000,000원
		
       		=============================================================================
       
		//DecimalFormat.getCurrencyInstance() : 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드 
		// => 앞에 시스템이 사용하는 화폐단위를 붙이고 3자리마다 ,를 사용하여 숫자값을 표현하는 패턴정보
		System.out.println("금액 = " + DecimalFormat.getCurrencyInstance().format(money)); 
        	//금액 = ₩100,000,000
		
	}
}