Preface
이번 장을 끝으로 이자바 1권 개념 공부를 모두 마쳤다.
마지막 부분 역시 다양한 메소드와 관련된 내용이라 한 번 훑어보는 식으로 넘어갔다.
java.time 패키지의 시간 조작 및 계산 관련 메소드들은 굳이 익힐 필요가 없을 것 같아 따로 정리 하지는 않았다.
워낙 내용이 많았던 파트라 확인 문제를 풀어본 후 업로드했던 글들을 다시 한 번 읽어봐야 할 것 같다.
12. Math, Random 클래스
- java.lang.Math 클래스: 수학 계산에 사용할 수 있는 메소드 제공
→ 모두 정적 메소드이므로 Math 클래스로 바로 사용할 수 있다.
- Math 클래스의 메소드
메소드 | 설명 | 예제 코드 | 리턴값 |
int abs(int a) | 절댓값 | int v1 = Math.abs(-5); | v1 = 5 |
double ceil(double a) | 올림값 | double v2 = Math.ceil(5.4); | v2 = 6.0 |
double floor(double a) | 버림값 | double v3 = Math.floor(5.4); | v3 = 5.0 |
int max(int a, int b) | 최댓값 | int v4 = Math.max(5, 9); | v4 = 9 |
int min(int a, int b) | 최솟값 | int v5 = Math.min(5, 9); | v5 = 5 |
double random( ) | 랜덤값: 0.0은 포함, 1.0은 미포함 | double v6 = Math.random( ); | 0.0 <= v6 < 1.0 |
double rint(double a) | 가까운 정수의 실수값 | double v7 = Math.rint(5.3); | v7 = 5.0 |
long round(double a) | 반올림값: 항상 소수점 첫째 자리에서 반올림해서 정수값을 리턴한다. | long v8 = Math.round(5.3); | v8 = 5 |
- java.util.Random 클래스: 난수를 얻어내기 위한 다양한 메소드 제공
1) boolean, int, long, float, double 난수를 얻을 수 있다.
2) 종자값(seed)을 설정할 수 있다.
3) 종자값: 난수를 만드는 알고리즘에 사용되는 값으로, 종자값이 같으면 같은 난수를 얻는다.
- Random 객체 생성 방법
1) Random( ) 생성자: 호출 시마다 다른 종자값이 자동 설정된다.
2) Random(long seed) 생성자: 매개값으로 주어진 종자값이 설정된다.
- Random 클래스의 메소드
리턴값 | 메소드 | 설명 |
boolean | nextBoolean( ) | boolean 타입의 난수를 리턴 |
double | nextDouble( ) | double 타입의 난수를 리턴(0.0 <= ~ < 1.0) |
int | nextInt( ) | int 타입의 난수를 리턴 |
int | nextInt(int n) | int 타입의 난수를 리턴(0 <= ~ < n) |
package ch11;
import java.util.Arrays;
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
// 두 Random 객체에 동일한 종자값을 주면 동일한 난수를 얻는다.
int[] selectNumber = new int[6];
Random random = new Random();
System.out.println("선택 번호: ");
for (int i = 0; i < 6; i++) {
selectNumber[i] = random.nextInt(45) + 1;
System.out.print(selectNumber[i] + " ");
}
System.out.println();
int[] winningNumber = new int[6];
random = new Random();
System.out.println("당첨 번호: ");
for (int i = 0; i < 6; i++) {
winningNumber[i] = random.nextInt(45) + 1;
System.out.print(winningNumber[i] + " ");
}
System.out.println();
Arrays.sort(selectNumber);
Arrays.sort(winningNumber);
boolean result = Arrays.equals(selectNumber, winningNumber);
System.out.println("당첨 여부: ");
if (result) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
13. Date, Calendar 클래스
- Date 클래스: 날짜를 표현하는 클래스
1) 객체 간에 날짜 정보를 주고 받을 때 주로 사용된다.
2) Date( ) 생성자: 컴퓨터의 현재 날짜를 읽어 Date 객체로 만든다.
Date now = new Date();
- toString( ) 메소드: 현재 날짜를 영문으로 된 문자열로 리턴한다.
→ java.text.SimpleDateFormat 클래스를 이용하면 특정 문자열 포맷으로 날짜를 얻을 수 있다.
package ch11;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateExample {
public static void main(String[] args) {
Date now = new Date();
String strNow1 = now.toString();
System.out.println(strNow1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss");
String strNow2 = sdf.format(now);
System.out.println(strNow2);
}
}
- Calendar 클래스: 달력을 표현한 클래스
1) 추상 클래스이므로 new 연산자를 통해 인스턴스를 생성할 수 없다.
2) 특별한 역법을 사용하는 경우가 아니면 getInstace( ) 메소드를 이용해 현재 운영체제의 시간대를 기준으로 한 Calendar 하위 객체를 얻을 수 있다.
Calendar now = new Calendar.getInstance();
- Calendar 클래스의 get( ) 메소드
메소드: 매개값은 Calendar 클래스에 선언되어 있는 상수 | 설명 |
int year = now.get(Calendar.YEAR); | 년도를 리턴 |
int month = now.get(Calendar.MONTH) + 1; | 월을 리턴 |
int day = now.get(Calendar.DAY_OF_MONTH); | 일을 리턴 |
int week = now.get(Calendar.DAY_OF_WEEK); | 요일을 리턴 |
int amPm = now.get(Calendar.AM_PM); | 오전/오후를 리턴 |
int hour = now.get(Calendar.HOUR); | 시를 리턴 |
int minute = now.get(Calendar.MINUTE); | 분을 리턴 |
int second = now.get(Calendar.SECOND); | 초를 리턴 |
- 다른 시간대에 해당하는 날짜와 시간 출력: Calendar 클래스의 오버로딩된 다른 getInstance( ) 메소드를 이용
1) 알고 싶은 시간대의 java.util.TimeZone 객체를 얻어 Calendar.getInstance( ) 메소드의 매개값으로 넘겨준다.
2) TimeZone.getTimeZone( ) 메소드의 매개값은 TimeZone 클래스의 정적 메소드인 getAvailableIDs( ) 를 호출하여 얻은 시간대 문자열 중 하나를 사용하면 된다.
TimeZone timeZone = TimeZone.getTimeZone("America/Los_Angeles");
Calnedar now = Calendar.getInstance(timezone);
14. Format 클래스
- DecimalFormat: 숫자 데이터를 원하는 형식으로 표현하기 위한 패턴을 사용
기호 | 의미 | 패턴 예 | 1234567.89 → 변환 결과 |
0 | 10진수(빈자리는 0으로 채움) | 0 0.0 0000000000.00000 |
1234568 1234567.9 0001234567.89000 |
# | 10진수(빈자리는 채우지 않음) | # #.# #######.#### |
1234568 1234567.9 1234567.89 |
. | 소수점 | #.0 | 1234567.9 |
- | 음수 기호 | +#.0 -#.0 |
+1234567.9 -1234567.9 |
, | 단위 구분 | #,###.0 | 1,234,567.9 |
E | 지수 문자 | 0.0E0 | 1.2E6 |
; | 양수와 음수의 패턴을 모두 기술할 경우, 패턴 구분자 | +#,###; -#,### | +1,234,568(양수) -1,234,568(음수) |
% | 100을 곱한 후에 % 문자 붙임 | #.#% | 123456789 % |
\u00A4 | 통화 기호 | \u00A4 #,### | ₩ 1,234,568 |
DecimalFormat df = new DecimalFormat("#,###.0");
String result = df.format(1234567.89);
- SimpleDateFormat: 날짜를 특정 문자열 포맷으로 얻기 위해 사용
패턴 문자 | 의미 | 패턴 문자 | 의미 |
y | 년 | H | 시(0~23) |
M | 월 | h | 시(1~12) |
d | 일 | K | 시(0~11) |
D | 월 구분이 없는 일(1~365) | k | 시(1~24) |
E | 요일 | m | 분 |
a | 오전/오후 | s | 초 |
w | 년의 몇 번째 주 | S | 밀리세컨드(1/1000초) |
W | 월의 몇 번째 주 |
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
String strDate = sdf.format(new Date());
- MessageFormat: 문자열에 데이터가 들어갈 자리를 표시해 두고, 런타임 중 동적으로 데이터를 삽입해 문자열을 완성시킬 때 사용
String message = "회원 ID: {0} \n회원 이름: {1} \n회원 전화: {2}";
String result = MessageFormat.format(message, id, name, tel);
// format() 메소드의 첫 번째 매개값은 매개 변수화된 문자열, 두 번째 이후의 매개값은 인덱스 순서에 맞게 값을 나열
String text = "회원 ID: {0} \n회원 이름: {1} \n회원 전화: {2}";
Object[] arguments = { id, name, tel };
String result = MessageFormat.format(text, arguments);
15. java.time 패키지
- 날짜와 시간을 조작하거나 비교하는 기능을 담은 API: java.util 패키지에 없고 별도로 java.time 패키지와 하위 패키지로 제공
1) java.time
2) java.time.chrono
3) java.time.dormat
4) java.time.temporal
5) java.time.zone
- java.time 패키지에 포함된 클래스
1) LocalDate: 로컬 날짜 클래스
LocalDate currDate = LocalDate.now();
LocalDate targetDate = LocalDate.of(int year, int month, int dayOfMonth);
2) LocalTime: 로컬 시간 클래스
LocalTime currTime = LocalTime.now();
LocalTime targetTime = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);
3) LocalDateTime: 로컬 날짜 및 시간 클래스
LocalDateTime currDateTime = LocalDateTime.now();
LocalDateTime targetTime = LocalDateTime.of(int year, int month, int dayOfMonth,
int hour, int minute, int second, int nanoOfSecond);
4) ZonedDateTIme: 특정 타임존의 날짜와 시간 클래스
5) Instant: 특정 시점의 Time-Stamp 클래스
- 날짜와 시간 관련 메소드
클래스 | 리턴 타입 | 메소드 | 설명 |
LocalDate | int | getYear( ) | 년 |
Month | getMonth( ) | Month 열거값 | |
int | getMonthValue( ) | 월 | |
int | getDayOfYear | 일년의 몇 번째 일 | |
int | getDayOfMonth( ) | 월의 몇 번째 일 | |
DayOfWeek | getDayOfWeek( ) | 요일 | |
boolean | isLeepYear( ) | 윤년 여부 | |
LocalTime | int | getHour( ) | 시간 |
int | getMinute( ) | 분 | |
int | getSecont( ) | 초 | |
int | getNano( ) | 나노초 리턴 |
- 파싱(parsing): 특정 자료에서 원하는 정보만 추출하는 것
- 포맷팅(formatting): 특정 위치에 특정 값을 삽입하는 것
'Java > 이것이 자바다' 카테고리의 다른 글
멀티 스레드 (0) | 2023.04.21 |
---|---|
이자바 11장(기본 API 클래스) 확인문제 (0) | 2023.04.15 |
기본 API 클래스 (2) (0) | 2023.04.14 |
기본 API 클래스 (1) (0) | 2023.04.13 |
예외 처리 (0) | 2023.03.21 |
댓글