버글버글
Java 수업 기록 (5) Java API - 난수, timestamp 등 본문
- Java API -
▶ Math클래스
1. 수학 처리용 클래스
2. 모든 메소드는 static 타입이므로 클래스이름 Math를 이용해서 호출해야 함
*주요 메소드
메소드 | 역할 |
double abe(double) | 실수 a의 절대값을 doublce 타입으로 반환 |
doublce ceil(double) | 실수 a의 정수로 올린 값을 double 타입으로 반환 |
doublc floor(double a) | 실수 a의 정수로 내린 값을 double 타입으로 반환 |
long round(double a) | 실수 a의 정수 반올림 값을 long 타입으로 반환 |
double pow(double a, double b) | 실수 a의 b 제곱 값을 double 타입으로 변환 |
doublce random() | 0.0이상 1.0 미만의 임의의 난수를 반환 |
▶ 난수(Random number) 발생
1. Random 클래스, Math 클래스를 주로 활용한다.
2. 0.0 ← Math.random() < 1.0 (0.0 ~ 1.0 사이의 데이터가 발생한다.)
0% ← Math.random() < 100% (위의 값을 이렇게도 볼 수 있다. 확률 처리할 때 사용 가능)
1) 확률 처리하기
- 10% 확률로 "대박", 90% 확률로 "쪽박"
if(Math.random() < 0.1) { System.out.println("대박 "); } else { System.out.println("쪽박 "); } |
||
Console | 대박 or 쪽박 |
2) 난수 값 생성
① Math.random() | 0,0 ← n < 1.0 |
② Math.random() * 5 | 0.0 ← n < 5.0 |
③ (int)(Math.random() * 5) | 0 ← n < 5 (강제 형 변환) |
④ (int)(Math.random() * 5) + 1 | 1 ← n < 6 (1부터 5개의 난수가 발생한다.) |
예시) 주사위 2개 던지기
for(int n = 0; n < 2; n++) { int dice = (int)(Math.random() * 6) + 1; System.out.println("주사위 : " + dice); |
||
Console | 주사위 : 랜덤숫자 주사위 : 랜덤숫자 |
▶ System - 타임스탬프(timestamp)
1. 1970-01-01 00:00 부터 1/1000초마다 증가하는 long 타입의 정수값 (1초에 숫자 1000씩 증가함)
2. 중복회피 수단으로도 사용된다. (어지간하면 같은 숫자가 나올 수 없음)
long timestamp = System.currentTimeMillis();{ System.out.println(timestamp); |
||
Console | 0000000000000 |
▶ System - 나노타임(nanoTime)
1. s(세컨드) → ㎳(밀리세컨)(천분의 1초) → ㎲(마이크로세컨)(백만분의 1초) → ㎱(나노세컨)(십억분의 1초)
2. 나노초(㎱) 값을 가지는 long 타입의 정수값
3. 어떤 기준일자는 없어서 두 개의 나노초 사이의 경과시간 계산용
long beginTime = System.nanoTime(); int total = 1 + 2 + 3 + 4 + 5; long endTime = System.nanoTime(); System.out.println(total + "계산에 걸린 시간 : " + (endTime - beginTime) + "㎱"); |
||
Console | 15계산에 걸린 시간 : 100㎱ |
▶ 클래스 명명 규칙
1. 패키지 다음에 마침표(.)를 적고 클래스명을 적는다.
2. 원래는 아래의 표처럼 표기해야한다.
java.lang.System.out.println("Hello"); | ||
Console | Hello |
3. java.lang 패키지에 소속된 클래스들은 패키지를 생략할 수 있다.
java.util 패키지의 Date 클래스
1. java.util.Date
2. impot java.util.Date; // 내가 쓸 필요 없음
Date
- Date 입력후 ctrl + space bar 누르고
Date 뒤(패키지)에 util있는걸 엔터하면 클래스가 생김
▶ 클래스와 객체
1. 클래스 : 객체를 만들기 위한 설계도
2. 객체 : 클래스를 이용해서 만든 실제 객체
3. 일반적인 생성 방법
클래스 객체 : new 클래스();
▶ 메소드 사용
1. 클래스를 이용해서 호출
system.out.println()
system.currentTimeMillis()
system.nanoTime()
Math.random()
2. 객체를 만들어서 호출
String str = new String("Hello");
str.equals("Hello")
(클래스 String, 객체 str)
Date now = new Date();
now.getMonth()
(클래스 Date, 객체 now)
StringBuilder sb = new StringBuilder();
sb.append()
(클래스 StringBuilder, 객체 sb)
Date 클래스와 now 객체 (객체 이름은 변수 이름 같은 거임) (클래스만 정해져 있음)
Date now = new Date(); System.out.println(now); |
||
Console | Sat Jul 23 16:00:00 KST 2022 |
▶ java.sql.Date 클래스
1. 데이터베이스의 날짜 표시 방식에 맞춰 놓은 클래스
2. Oracle 데이터베이스의 날짜 타입 ("/", "-")과 매칭해서 사용
* long 타입의 Date는 timestemp 뿐이다.
▶ java.utill.Calendar 클래스
1. 현재 날짜 또는 특정 날짜를 나타낼 때 사용
2. 날짜의 특정 요소(년, 월, 일, 시, 분, 초, ...)를 쉽게 사용
★ 처음보는 클래스를 만났을때, 마우스로 클릭해서 명령어를 완성하여야 한다. (이유는 import가 추가되기 때문)
- 키보드로 명령어를 치면 import가 추가가 안됨.
3. OOP (객체지향 프로그램) (Object Oriented Programming = 객체를 기반으로 프로그래밍을 한다.)
예시) 년, 월, 일, 요일
년 = YEAR ( 오리지날 = int year = cal.get(1); )
월 = MONTH (월은 -1 해서 나온다) 왜지..? ( 0월 ~ 11월 ) (그래서 실제 사용시 +1을 붙인다. )
일 = DAY_OF_MONTH (일 이라고 하는건 한달(month) 기준이여서 Day of month를 사용한다.
요일(숫자) = DAY_OF_WEEK (요일의 시작은 일요일이다.) (요일 번호)
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 weekNo = cal.get(Calendar.DAY_OF_WEEK); System.out.println(year); System.out.println(month); System.out.println(day); switch(weekNo) { case 1: System.out.println("일요일"); break; case 2: System.out.println("월요일"); break; case 3: System.out.println("화요일"); break; case 4: System.out.println("수요일"); break; case 5: System.out.println("목요일"); break; case 6: System.out.println("금요일"); break; default : System.out.println("토요일"); } System.out.println(weekNo); |
||
Console | 2022 7 25 월요일 |
- Calendar = class
- cal = object (객체) (변수는 아니지만, 변수같은 애들)
* 메소드 = 함수 (클래스를 사용하는 언어에서는 메소드라고 부르고, 클래스를 사용하지 않는 언어에서는 함수라고 한다.)
- 자바에서는 메소드라고 부른다. 객체기반이기 때문에.
* Ctrl + Class를 마우스 클릭하면 Class가 열린다. (해당 클래스의 소스코드를 볼 수 있다.)
* 상수 = 항상 그 값이다.
int year = cal.get(Calendar.YEAR);
Calendar. 치고, YEAR을 클릭하면, 상수값이 불려진다.
예시) 오전/오후, 시, 분, 초
오전/오후 = AM_PM (오전 0, 오후 1)
시 = HOUR ( 시 (1~12)
시 = HOUR_OF_DAY (시 (0~23) !!주의)
분 = MINUTE
초 = SECOND
int ampm = cal.get(Calendar.AM_PM); int hour12 = cal.get(Calendar.HOUR); int hour24 = cal.get(Calendar.HOUR_OF_DAY); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); switch(ampm) { case 0: System.out.println("오전"); break; case 1: System.out.println("오후"); break; } System.out.println(hour12); System.out.println(hour24); System.out.println(minute); System.out.println(second); long timestemp = cal.getTimeInMillis(); System.out.println(timestemp); |
||
Console | 오전 9 9 46 52 0000000000000 |
▶ java.time.LocalDateTime 클래스
1. JDK 1.8부터 사용이 가능한 클래스
2. 특정 날짜 요소 사용이 가능
3. 날짜의 패턴 지정이 가능
예시) 현재 날짜와 시간
LocallDateTime now = LocalDateTime.now(); System.out.println(now); |
||
Console | 2022-07-25T10:15:51.352880400 |
예시) 특정 날짜 요소 사용
int year = now.getYear(); int month = now.getMonthValue(); int day = now.getDayOfMonth(); int hour = now.getHour(); int minute = now.getMinute(); int second = now.getSecond(); System.out.println(year); System.out.println(month); System.out.println(day); System.out.println(hour); System.out.println(minute); System.out.println(second); |
||
Console | 2022 7 25 10 43 21 |
예시) 패턴
- 패턴의 적용 결과는 언제나 String
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("a h:mm yyyy-MM-dd"); String date = dtf.format(now); System.out.println(date); |
||
Console | 오전 10:51 2022-07-25 |
★ 외부파일 (메모장)을 저장할때는 인코딩(UTF-8)을 주의하자
▶ 날짜 / 시간 패턴 (대소문자 주의)
년 | |
yy | 22 |
yyyy | 2022 |
월 | |
M | 7 |
MM | 07 |
MMM | 7월(Jul) |
MMMM | July |
일 | |
d | 1 |
dd | 01 |
요일 | |
E | 월 ~ 일 |
시간 |
|
a | 오전 / 오후 |
h | 9시 ( 1 ~ 12 ) |
hh | 09시 ( 01 ~ 12 ) |
H | 9시 ( 0 ~ 23 ) |
HH | 09시 ( 00 ~ 23 ) |
m | 5분 ( 0 ~ 59 ) |
mm | 05분 ( 00 ~ 59 ) |
s | 7초 ( 0 ~ 59 ) |
ss | 07초 ( 00 ~ 59 ) |
자바 독 주소
https://docs.oracle.com/javase/8/
▶ java.time.LocalDateTime 클래스
1. 패턴이 적용된 String 타입의 날짜 반환
Date date1 = new Date(); java.sql.Date date2 = new java.sql.Date(System.currentTimeMillis()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String result1 = sdf.format(date1); String result2 = sdf.format(date2); System.out.println(result1); System.out.println(result2); |
||
Console | 2022-07-25 11:15:22 2022-07-25 11:15:22 |
▶ 기타사항
1. 한 단어 단어를 더블클릭하면 블락이 잡힌다.
2. 같은 클래스를 두개 import 하는 것은 불가능 하다.
'java > java 수업 기록' 카테고리의 다른 글
Java 수업 기록 (7) Java API - Scanner (0) | 2022.07.27 |
---|---|
Java 수업 기록 (6) Java API - String(문자열) (0) | 2022.07.25 |
Java 수업 기록 (4) 반복문(for, while), break, continue (0) | 2022.07.22 |
Java 수업 기록 (3) 분기문(if, if-else, else if, switch) (0) | 2022.07.21 |
Java 수업 기록 (2) 연산 및 연산자 (0) | 2022.07.20 |