버글버글

Java 수업 기록 (5) Java API - 난수, timestamp 등 본문

java/java 수업 기록

Java 수업 기록 (5) Java API - 난수, timestamp 등

Bugle 2022. 7. 23. 16:00
반응형

- 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 Platform SE 8

 

docs.oracle.com

 

▶  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 하는 것은 불가능 하다.

 

 

 

 

 

 

 

 

 

 

 

반응형