본 포스팅은 [이것이 자바다]의 내용을 참고하여 작성하였습니다.
1. Math 클래스
수학 계산에 사용할 수 있는 메소드를 제공
제공하는 메소드는 모두 static하므로 Math 클래스로 바로 사용 가능하다.
abs - 절대값
Math.abs(int a)
Math.abs(double a)
max - 최댓값
Math.max(int a, int b)
Math.max(double a, double b)
min - 최솟값
Math.min(int a, int b)
Math.min(double a, double b)
ceil - 올림값
Math.ceil(double a)
floor - 버림값
Math.floor(double a)
round - 반올림값
Math.round(double a)
long 타입 정수 반환
rint - 가까운 정수의 실수값
Math.rint(double a)
반올림한 후 double 타입 실수 반환
random - 랜덤값
Math.random();
0.0 ≤ x <1.0인 double 타입 랜덤 실수 반환
+ 소수 셋째 자릿수에서 반올림하는 법?
원하는 자릿수만큼을 곱한 후 round 메소드를 사용하고 다시 나누기
double value = 12.3456;
double tmp1 = value * 100;
long temp2 = Math.round(temp1);
double v16 = temp2 / 100.0;
System.out.println("v16=" + v16);
+ 원하는 범위의 난수를 생성하는 법?
0.0 ≤ Math.random() < 1.0 이므로 Math.random에 원하는 만큼을 더하거나 곱하면 됨
ex) 3~12 사이의 정수 난수 생성하기
(int) (0.0*10) + 3 ≤ (int) (Math.random()*10 + 3) < (int) (10.0*10)+3
2. Random 클래스
Math.random 메소드가 0.0~1.0 사이의 double 난수를 얻는 데만 사용한다면,
Random 클래스는 boolean, int, long, float, double 난수를 얻을 수 있다.
Random random = new Random(); // Random 객체 생성
boolean a = random.nextBoolean(); // boolean 타입 난수 리턴
double b = random.nextDouble(); // double 타입 난수 리턴
int c = random.nextInt(); // int 타입 난수 리턴
3. Date 클래스
날짜를 표현하는 클래스이다.
컴퓨터의 현재 날짜를 읽어 Date 객체로 만든다.
Date now = new Date(); // Date 객체 생성
String strNow1 = now.toString // 영문으로 된 날짜 리턴
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 hh시 mm분 ss초");
String strNow2 = sdf.format(now); // 위처럼 원하는 형식으로도 출력 가능
System.out.println(strNow1);
// Wed Aug 10 21:16:30 KST 2022
System.out.println(strNow2);
// 2022년 08월 10일 10시 16분 30초
4. Calendar 클래스
달력을 표현한 클래스로, 추상 클래스이므로 new 연산자를 이용해 인스턴스를 생성할 수 없다.
따라서 getInstance() 메소드를 이용해 하위 객체를 얻을 수 있다.
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR); // 년도를 리턴
int month = now.get(Calendar.MONTH); // 월을 리턴
int day = now.get(Calendar.DAY_OF_MONTH); // 일을 리턴
int week = now.get(Calendar.DAY_OF_WEEK); // 요일을 리턴(일=1 ~ 토=7)
int amPm = now.get(Calendar.AM_PM); // 오전=0,오후=1를 리턴
int hour = now.get(Calendar.HOUR); // 시를 리턴
int minute = now.get(Calendar.MINUTE); // 분을 리턴
int second = now.get(Calendar.SECOND); // 초를 리턴
5. Format 클래스
다양한 자료들을 원하는 형식으로 표현하기 위한 클래스.
위에서 사용한 SimpleDateFormat 클래스 또한 Format 클래스 중 하나이다.
숫자 형식 클래스(DecimalFormat)
위 표에서 적용할 패턴을 선택하고, 이를 매개값으로 지정해서 객체를 생성한다.
DecimalFormat df = new DecimalFormat("#,###.0");
String result = df.format(1234567.89);
// 1,234,567.9
날짜 형식 클래스(SimpleDateFormat)
위 표에서 적용할 패턴을 선택하고, 이를 매개값으로 지정해서 객체를 생성한다.
SimpleDateFormat sdf = new SimplaDateFormat("yyyy년 MM월 dd일");
String strDate = sdf.format(new Date());
// 2022년 08월 10일
문자열 형식 클래스(Message Format)
데이터 전송, 저장, 데이터베이스 SQL문 작성 등 일정한 형식의 문자열이 필요할 때 사용한다.
예를 들어 다음과 같은 회원 정보를 출력한다고 가정해보자.
회원 ID: blue
회원 이름: 신용권
회원 전화: 010-123-1234
다음 코드와 같이 작성함으로써 자료를 정해진 형식으로 편하게 출력할 수 있다.
String message = "회원 ID: {0} \n회원 이름: {1} \n회원 전화:{2}";
String result = MessageFormat.format(message, id, name, tel);
6. java.time 패키지
자바 7 이전까지는 Date와 Calendar 클래스를 이용해서 날짜와 시간 정보를 얻었다.
다만 부족한 기능이 많았기 때문에, 자바 8부터 날짜와 시간을 나타내는 여러 API를 새롭게 추가했다.
날짜와 시간 객체 생성
LocalDate - 날짜 정보
LocalDate currDate = LocalDate.now(); // 2022-08-10
LocalDate targetDate = LocalDate.of(int year, int month, int dayOfMonth);
LocalTime - 시간 정보
LocalTime currTime = LocalTime.now(); // 22:16:30.112
LocalTime targetTime = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);
LocalDateTime - 날짜+시간 정보
LocalDateTime currDateTime = LocalDateTime.now(); // 2022-08-10T22:16:30.112
LocalDateTime targetDateTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);
ZonedDateTime - 날짜+시간 뒤에 협정세계시 차이(+09:00[Asia/Seoul])가 붙음.
ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
ZonedDateTime londonDateTime = ZonedDateTime.now(ZoneId.of("Europe/London"));
ZonedDateTime seoulDateTime = ZonedDateTime.now(ZoneId.of("Asia/seoul"));
Instant - 특정 시점의 타임스탬프. 두 시점 간의 우선순위를 따질 때 많이 사용.
Instant instant1 = Instant.now(); // 2022-08-09T22:16:30.112Z
날짜와 시간에 대한 정보 얻기
LocalDateTime과 ZonedDateTime 또한 위 표에 있는 대부분의 메소드를 가지고 있으나, isLeapYear() 메소드는 LocalDate에만 있기 때문에 toLocalDate()로 변환 후 사용해야 한다.
날짜와 시간을 조작하기
날짜와 시간 클래스들은 날짜와 시간을 조작하는 메소드와 상대 날짜를 리턴하는 메소드들을 가지고 있다.
빼기와 더하기
변경하기
매개값은 TemporalAdjuster 타입으로, 다음 표의 메소드를 참고한다.
날짜와 시간을 비교하기
날짜와 시간 클래스들은 비교하거나 차이를 구하는 메소드들을 가지고 있다.
파싱(Parsing) 메소드
날짜와 시간 정보가 포함된 문자열을 파싱해서 날짜와 시간을 생성할 수 있다.
위 표를 참고해서 다음과 같이 두 가지 방식으로 코드를 작성하여 사용한다.
LocalDate localDate = LocalDate.parse("2022-08-10");
DateeTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
LocalDate localDate = LocalDate.parse("2022.08.10", formatter);
다음 표를 참고해서 ofPattern() 메소드를 사용하지 않고 바로 이용할 수도 있다.
LocalDate localDate = LocalDate.parse("2022-08-10", DateTimeFormatter.ISO_LOCAL_DATE);
포맷팅(Formatting) 메소드
날짜와 시간을 포맷팅된 문자열로 변환시키는 메소드이다.
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter =
DateTimeFormatter.ofPattern("yyyy년 M월 d일 a h시 m분");
String nowString = now.format(dateTimeFormatter);
// 2022년 8월 10일 오후 10시 16분
'Study in SSAFY > 이것이 자바다' 카테고리의 다른 글
[이것이 자바다] 12.6 멀티스레드 - 스레드 상태 제어 (0) | 2022.09.12 |
---|---|
[이것이 자바다] 12.5 멀티스레드 - 스레드 상태 (0) | 2022.09.12 |
[이것이 자바다] 12.4 멀티스레드 - 동기화 메소드와 동기화 블록 (0) | 2022.09.12 |
[이것이 자바다] 10. 예외 처리 (0) | 2022.07.31 |
[이것이 자바다] 02. 변수와 타입 (0) | 2022.07.27 |