Java API 중 다른 클래스 더 살펴보기
1. Date
- java.util.Date
- 현재 날짜와 시간정보를 표현하는 클래스
- 가장 많이 사용되는 클래스
- java.sql.Date : 날짜 정보를 표현하는 클래스
- java.sql.Timestap : 시간 정보를 표현하는 클래스
- 자바 1.8부터 날짜와 시간정보를 제공하는 클래스가 추가됨 (얘는 나중에)
java.time.LocalDate : 날짜 정보를 표현하는 클래스
java.time.LocalTime : 시간 정보를 표현하는 클래스
java.time.LocalDateTime : 날짜와 시간정보를 표현하는 클래스
* 유닉스 타임 : 1970년 1월 1일 0시 0분 0초부터 현재 싯점까지의 시간을 1/1000초 단위로 환산한 값이 반환
1-1. java.util.Date
- java.util.Date의 주요 API
- 생성자)
- new Date() : 시스템의 현재 날짜와 시간정보를 표현하는 객체 생성
- new Date(long unixTime) : 지정된 유닉스타임에 해당하는 날짜와 시간정보를 표현하는 객체 생성 - 메소드)
- long getTime() : Date객체의 유닉스타임 반환
- boolean before(Date other) : Date객체의 날짜와 시간정보 other보다 이전이면 true 반환
- boolean after(Date other) : Date객체의 날짜와 시간정보 other보다 이후면 true 반환
- int compareTo(Date other) : Date객체의 날짜와 시간정보가 other보다 이전이면 0보다 작은 정수
: Date객체의 날짜와 시간정보가 other보다 이후이면 0보다 큰 정수
: Date객체의 날짜와 시간정보가 other과 같으면 0 반환
- String toString() : Date객체의 날짜와 시간정보를 문자열로 반환하도록 Object의 toString()을 재정의
- 생성자)
* java.util - 다른패키지에 있기 때문에 반드시 import
단, java.lang 패키지에 있는 것만 import 안해도 사용 가능 (다른 패키지는 모두 import)
* Date로는 특정날짜의 시간을 구할 수 없음 (현재날짜만 가능)
-> Calendar로 사용
얘는 추상클래스 -> 객체 생성할 필요 없음
( 이 추상클래스를 구현해서 -> 태양력, 음력, 이슬람력, 유태력 등을 만듦 -> 기능이 조금만 달라서 인터페이스를 따로 안만들고 추상클래스에서 대부분 구현 )
- Date 클래스로 날짜, 시간 조회하기 (특정날짜는 조회 못함!)
import java.util.Date;
public class DateApp {
public static void main(String[] args) {
// 시스템의 현재 날짜와 시간정보를 가지고 있는 Date객체 생성하기 (생성과 동시에 메소드)
Date now = new Date(); // Date는 util패키지(다른패키지)에 있으므로 반드시 import
System.out.println(now);
// 생성된 Date객체에서 유닉스타임 획득하기
long unixTime = now.getTime();
System.out.println(unixTime);
}
}
Fri Sep 30 11:49:36 KST 2022
1664506176415
1-2. java.util.Calendar
- 날짜와 시간정보 및 다양한 정보를 표현하는 추상 클래스 (캘린더는 잘 안씀)
- Calendar 클래스를 구현한 대표적인 클래스는 GregorianCalendar(서력기원 태양력)
- 주요 API
- 정적 메소드
Calendar.getInsatance()
: 시스템의 지역과 날짜, 시간정보와 맞는 Calendar객체 반환
(실제로 생성되는 객체는 GregorianCalendar객체) - 멤버 메소드
int get(int field)
: 지정된 필드에 해당하는 정보 반환
: field값은 상수로 정의되어 있다
ex) Calendar.YEAR 연도
Calendar.MONTH 월 (월은 0부터 시작)
Calendar.DAY_OF_MONTH 일
Calendar.HOUR 시
Calendar.MINUTE 분
Calendar.SECOND 초
Calendar.DAY_OF_WEEK 요일(숫자)
void set(int field, int value)
: 지정된 필드에 해당하는 값을 입력한 value값으로 변경
void set(int year, int month, int dayOfMonth)
: 지정된 날짜(연월일)에 해당하는 값으로 변경
void setTime(Date date)
: 전달받은 Date객체로 날짜와 시간정보가 변경
Date getTime()
: Calendar객체의 날짜와 시간정보가 동일한 정보를 가지는 Date객체 반환
long getTimeInMillis()
: Calendar객체의 날짜와 시간정보에 해당하는 유닉스타입값을 반환
- 정적 메소드
- Calendar 클래스로 특정 날짜 조회, 변경
import java.util.Calendar;
public class CalendarApp {
public static void main(String[] args) {
// 시스템의 지역, 시간대 정보를 바탕으로 현재 날짜와 시간정보를 포함하는 Calendar객체 반환
Calendar now = Calendar.getInstance(); //시스템 설정에 맞는 지역과 날짜 정보
System.out.println(now);
// 연, 월, 일 정보 변경
now.set(Calendar.YEAR, 1996);
now.set(Calendar.MONTH, 8);
now.set(Calendar.DAY_OF_MONTH, 22);
// 시스템 설정에 맞는 Calendar객체에서 연, 월, 일, 시, 분, 초 정보 조회
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) +1;
int day = now.get(Calendar.DAY_OF_MONTH);
int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
System.out.println("년: " + year);
System.out.println("월: " + month);
System.out.println("일: " + day);
System.out.println("시: " + hour);
System.out.println("분: " + minute);
System.out.println("초: " + second);
}
}
java.util.GregorianCalendar[time=1664535057321,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=8,WEEK_OF_YEAR=40,WEEK_OF_MONTH=5,DAY_OF_MONTH=30,DAY_OF_YEAR=273,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=7,HOUR_OF_DAY=19,MINUTE=50,SECOND=57,MILLISECOND=321,ZONE_OFFSET=32400000,DST_OFFSET=0]
년: 2022
월: 9
일: 30
시: 11
분: 51
초: 0
(set메소드 실행 후)
년: 1996
월: 9
일: 22
시: 8
분: 17
초: 37
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarApp2 {
public static void main(String[] args) {
Calendar now = Calendar.getInstance();
Calendar birth = new GregorianCalendar(1996, 1, 22); //날짜 바로 바꾸는 생성자가 있음
long nowUnixTime = now.getTimeInMillis();
long birthUnixTime = birth.getTimeInMillis();
long lifeUnixTime = nowUnixTime - birthUnixTime;
int days = (int)(lifeUnixTime/(60*60*24*1000));
System.out.println("내가 몇일이나 살았나? " + days);
}
}
내가 몇일이나 살았나? 9717
* Date 객체 - 현재시간만 나와
Calendar 객체 - 특정시간을 설정할 수 있지만, 잘 안써 (얘가 적용되는 경우는 거의 없고, 다 Date를 씀)
Date를 쓰는데, 현재시간만 나온다는 점을 개선해야돼
1-3. Format
1) java.text.SimpleDateFormat (날짜 ↔ 문자열)
- Date를 원하는 포맷(형식)의 문자열로 변환 ( 날짜 -> 문자열 )
- 지정된 패턴(날짜형식)으로 작성된 문자열을 Date로 변환 ( 문자열 -> 날짜 )
- 주요 API
- 생성자
- SimpleDateFormat() : SimpleDateFormat 객체 생성
- SimpleDateFormat(String pattern) : 지정된 패턴을 가진 SimpleDateFormat 객체 생성 - 멤버메소드
<날짜 -> 문자열>
- void applyPattern(String pattern) : 기본생성자 쓰는 경우, SimpleDateFormat 객체의 패턴 적용
- String format(Date date) : Date를 지정된 패턴의 문자열로 반환
<문자열 -> 날짜>
- Date parse(String text) : 지정된 패턴으로 작성된 문자열을 Date객체로 반환 - 날짜 -> 문자열로 바꿀 때,
- SimpleDateFormat("yyyy-MM-dd"); 처음부터 이런식으로 형식을 바로 정해도 되고,
(원래 얘를 씀)
- SimpleDateFormat(); 생성자를 먼저 만들고 나서,
applyPattern(String pattern); 그 다음에 형식 정해도 됨
- 생성자
- 사용예시)
영화예매, 기차예매 등 내가 날짜를 선택,입력해서 날짜를 지정할 때 (문자열 -> 날짜) - 주요 패턴문자
기호 | 설명 | 예시 |
y | year | "yyyy" = "2022" , "yy" = "22" |
M | month | "MM" = "09" , "M" = "9" |
d | day in month | "dd" = "09" , "d" = "9" |
E | day name (요일) | "EEEE" = "금요일" , "EE" = "금" |
a | am/pm | "a" = "오전" , "오후" |
h | hour in am/pm (1~12) | "h" = "1" , "hh" = "01" |
H | hour in day (0~23) | |
m | minute | |
s | second | |
S | millisecond |
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatApp {
public static void main(String[] args) throws Exception {
Date now = new Date(); // 현재 날짜 <-> 문자열 할거니까, 현재날짜를 실행하는 기본생성자
SimpleDateFormat sdf = new SimpleDateFormat(); // 생성자 먼저 만들기 (형식 고정하려면 생성자 매개변수로 넣으면 됨)
// Date 객체의 날짜와 시간정보를 지정된 패턴의 문자열로 변환
sdf.applyPattern("yyyy-MM-dd"); // SDF객체를 호출해서 형식을 설정하고
String text1 = sdf.format(now); // Date객체의 날짜(현재)를 지정된 형식의 문자열로 변환
System.out.println("[yyyy-MM-dd] " + text1);
sdf.applyPattern("yyyy-M-d");
String text2 = sdf.format(now);
System.out.println("[yyyy-M-d] " + text2);
sdf.applyPattern("yyyy년 M월 d일");
String text3 = sdf.format(now);
System.out.println("[yyyy년 M월 d일] " + text3);
sdf.applyPattern("yyyy년 M월 d일 EEEE"); // EE = 금
String text4 = sdf.format(now);
System.out.println("[yyyy년 M월 d일 EEEE] " + text4);
sdf.applyPattern("a h:m:s");
String text5 = sdf.format(now);
System.out.println("[a h:m:s] " + text5);
sdf.applyPattern("a hh:mm:ss");
String text6 = sdf.format(now);
System.out.println("[a hh:mm:ss] " + text6);
sdf.applyPattern("a h시 m분 s초");
String text7 = sdf.format(now);
System.out.println("[a h시 m분 s초] " + text7);
sdf.applyPattern("yyyy년 M월 d일 EEEE a h시 m분 s초");
String text8 = sdf.format(now);
System.out.println("[yyyy년 M월 d일 EEEE a h시 m분 s초] " + text8);
// 지정된 패턴으로 작성된 문자열을 분석해서 Date객체로 변환
sdf.applyPattern("yyyy-MM-dd"); // SDF에 이런형식을 지정해
Date birth = sdf.parse("1996-01-22"); // 이 형식의 문자열을 넣으면 그 날짜의 객체 반환
System.out.println(birth);
}
}
[yyyy-MM-dd] 2022-09-30
[yyyy-M-d] 2022-9-30
[yyyy년 M월 d일] 2022년 9월 30일
[yyyy년 M월 d일 EEEE] 2022년 9월 30일 금요일
[a h:m:s] 오후 12:51:58
[a hh:mm:ss] 오후 12:51:58
[a h시 m분 s초] 오후 12시 51분 58초
[yyyy년 M월 d일 EEEE a h시 m분 s초] 2022년 9월 30일 금요일 오후 12시 51분 58초
Mon Jan 22 00:00:00 KST 1996
* 설명
- Date now = new Date();
: date값에 넣을 날짜 객체. 현재시간을 넣을거니까 현재시간을 자동 실행하는 Date의 기본 생성자 실행 - SimpleDateFormat sdf = new SimpleDateFormat();
: java.util에 있는 SimpleDateFormat기능을 이용할거니까 객체가 필요해. 매개변수 있는 생성자에 형식을 바로 넣어도 되지만, 여기서는 여러가지 형식을 적용할 거니까 일단 기본생성자로 만들어놔 - sdf.applyPattern("yyyy-MM-dd");
: sdf에 있는 기능 중에 applyPattern을 이용해서 형식을 정할거야 - String text1 = sdf.format(now);
: 그리고 sdt에 있는 기능 중에 입력한 Date에 내가 지정한 형식을 적용할건데, 얘는 문자열로 반환이 돼
2) java.text.DecimalFormat (숫자 ↔ 문자열)
- 숫자를 지정된 포맷의 문자열로 변환 (숫자 -> 문자열)
- 지정된 패턴으로 작성된 숫자형식의 문자열을 숫자로 변환 (문자열 -> 숫자)
- 주요 API
- 생성자
- DecimalFormat()
- DecimalFormat(String pattern) : 지정된 패턴이 적용된 DecimalFormat 객체 생성 - 멤버메소드
<숫자 -> 문자열>
- void applyPattern(String pattern) : 기본생성자 쓰는 경우, DecimalFormat객체에 지정된 패턴 적용
- String format(long number) : 정수를 지정된 패턴의 문자열로 변환
- String format(double number) : 실수를 지정된 패턴의 문자열로 변환
<문자열 -> 숫자>
- Number parse(String text) : 지정된 패턴으로 작성된 문자열을 Numbr객체로 변환
(Number객체의 intValue(), longValue(), doubleValue() 를 통해 숫자 반환)
(int parse, double parse 이런식으로 하면, 매개변수가 똑같으니까 중복정의를 할 수 없음
-> 문자열을 넣고 반환타입만 다르니까 -> Number라는 객체로 반환 -> 이 객체의 intValue()를 통해 정수 반환)
* 원래 문자열 -> 숫자의 방법은
- "1234" -> Integer.ParseInt("1234") -> 1234
- "3.14" -> Double.ParseDouble("3.14") -> 3.14
근데 얘네는 ParseInt로 안됨 (숫자가 아닌 성분이 있어서)
- "1,000,000" -> DecimalFormat.parse("1,000,000") -> Number객체 획득 -> Number의 intValue() -> 1000000
- "1,000,000.23" -> DecimalFormat.parse("1,000,000.23") -> Number객체 -> Number의 doubleValue() -> 1000000.23 - 주요 패턴문자
- 생성자
기호 | 설명 |
# | 숫자 하나 |
0 | 숫자 하나 |
- | 마이너스 부호 |
, | 자릿수 |
. | 소수점 |
import java.text.DecimalFormat;
public class DecimalFormatApp {
public static void main(String[] args) throws Exception {
// 숫자를 지정된 패턴의 문자열로 변환 (숫자 -> 문자열)
DecimalFormat df = new DecimalFormat(); // 실제로는 DecimalFormat(String pattern) 얘 사용함
// 소수점이 없는 정수로 표현하고, 3자리마다 ,를 추가
df.applyPattern("#,###");
String text1 = df.format(100000);
System.out.println("[#,###] " + text1);
df.applyPattern("0,000");
String text2 = df.format(123456789);
System.out.println("[0,000] " + text2);
// 소수점 3번째자리에서 반올림해서 2번째자리까지 표시
df.applyPattern("#,###.##"); // 소수점 둘째자리까지(세번째에서 반올림)
String text3 = df.format(123.4567);
System.out.println("[#,###.##] " + text3);
// 소수점 3번째자리에서 반올림해서 2번째자리까지 표시.
// 지정된 소수점자리보다 소수점자리가 적으면, 값이 있는 부분까지만 표시
df.applyPattern("#,###.##"); // .##은 값이 없으면 표시가 안되니까, 정확히 소수점 몇째자리에서 반올림했는지 몰라
String text4 = df.format(123.4);
System.out.println("[#,###.##] " + text4);
// 소수점 3번째자리에서 반올림해서 2번째자리까지 표시.
// 지정된 소수점자리보다 소수점자리가 적어도, 0으로 표시
df.applyPattern("#,###.00"); // .00은 값이 없어도 0으로 표시되니까, 정확히 소수점 몇째자리에서 반올림했는지 알수 있음
String text5 = df.format(123.4);
System.out.println("[#,###.00] " + text5);
double average = 230/3.0; // 76.666666666...
String text6 = df.format(average);
System.out.println("평균점수: " + text6);
// 문자열을 숫자로 변환
df.applyPattern("#,###");
Number number1 = df.parse("10,000,000");
int value1 = number1.intValue();
System.out.println(value1);
}
}
[#,###] 100,000
[0,000] 123,456,789
[#,###.##] 123.46
[#,###.##] 123.4
[#,###.00] 123.40
평균점수: 76.67
10000000
-StringUtils를 만들기
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringUtils { // SimpleDateFormat을 만들지 않고, util로 다 할수있어
private static SimpleDateFormat sdf = new SimpleDateFormat(); // 생성자라서 객체 생성해야 함
private static DecimalFormat df = new DecimalFormat(); // static메소드에서는 static변수밖에 못써서
// 정적메소드로 하는 이유
// 광범위하게 여러클래스에서 자주 사용할거라서 -> 객체에 소속시킬수x
// util 클래스 안에 , 조금씩만 바꿔서 사용
// < 숫자 -> 문자열 >
/**
* 정수를 전달받아서 3자리마다 ","가 포함된 문자열로 반환
* @param number 정수
* @return "#,###" 형식의 문자열
*/
public static String numberToString(long number) { // 정수는 대부분 #,### 형태
df.applyPattern("#,###");
return df.format(number);
}
/**
* 실수를 전달받아서 3자리마다 ,가 포함되고, 소수점 2자리까지 표현되는 문자열로 반환
* @param number 실수
* @return "#,###.00" 형식의 문자열 (실수만 입력하면, 이 메소드를 통해 실수의 기본형식을 반환)
*/
public static String numberToString(double number) {
return numberToString(number, "#,###.00");
}
/**
* 실수를 전달받아서 지정된 패턴의 문자열로 반환
* @param number 실수
* @param pattern 패턴
* @return 지정된 형식의 문자열 (실수와 형식을 입력하면, 이 메소드를 통해 지정된 형식으로 반환)
*/
public static String numberToString(double number, String pattern) {
df.applyPattern(pattern);
return df.format(number);
}
/**
* java.util.Date를 전달받아서 "yyyy-MM-dd" 형식의 문자열로 반환
* @param date 날짜
* @return "yyyy-MM-dd" 형식의 문자열 (반환형식 지정 x -> 기본형식을 반환)
*/
public static String dateToString(Date date) { // 이 메소드를 호출하면서 Date를 주면
return dateToString(date, "yyyy-MM-dd"); // 밑에있는 매개변수 2개짜리 메소드를 호출
}
/**
* java.util.Date와 패턴을 전달받아서 지정된 패턴 형식의 문자열로 반환 (메소드 중복정의)
* @param date 날짜
* @param pattern 패턴
* @return 지정된 패턴 형식의 문자열 (반환형식을 지정하고 싶을 때)
*/
public static String dateToString(Date date, String pattern) { // 위에서 반환되는 패턴을 받고
if(date == null || pattern == null) {
return null;
}
sdf.applyPattern(pattern); // sdf에 그 패턴을 저장하고
return sdf.format(date); // 처음 전달했던 Date를 그 형식으로 반환
}
// < 문자열 -> 날짜 >
/**
* "yyyy-MM-dd" 형식의 문자열을 java.util.Date로 반환
* @param text "yyyy-MM-dd" 형식의 문자열
* @return 날짜
*/
public static Date textToDate(String text) { // 2022-09-30 를 text에 주면
return textToDate(text, "yyyy-MM-dd"); // 2022-09-30의 Date객체 반환하려면 아래 메소드를 실행해야돼
}
/**
* 지정된 패턴형식의 문자열과 패턴을 전달받아서 java.util.Date로 반환
* @param text 지정된 날짜 형식의 문자열
* @param pattern 패턴
* @return 날짜
*/
public static Date textToDate(String text,String pattern) { // "yyyy-MM-dd"형식이 pattern에 들어감
sdf.applyPattern(pattern); // 전달받은 패턴을 저장
try {
return sdf.parse(text); // text를 Date타입으로 바꿈 // 2022-09-30에 해당하는 날짜 반환
} catch (ParseException ex) {
throw new RuntimeException(ex);
}
}
}
- StringUtilsApp
import java.util.Date;
import utils.StringUtils;
public class StringUtilsApp {
public static void main(String[] args) {
// 연월일만 있으면 되는 경우
Date date1 = StringUtils.textToDate("2022-09-30"); // 이 날짜에 해당하는 Date 반환
System.out.println(date1);
// 특수한 경우, 내가 필요한 정보를 내가 입력(연월일 + 시간)
Date date2 = StringUtils.textToDate("2022년 1월 22일 오전 9시 10분", "yyyy년 M월 d일 a h시 m분");
System.out.println(date2); //문자열 형식과 패턴이 맞으면 Date로 반환됨
Date date3 = new Date();
System.out.println(StringUtils.dateToString(date3)); // 기본 패턴
System.out.println(StringUtils.dateToString(date3,"yy년 M월 d일 EEEE")); // 지정한 패턴
System.out.println("구매가격: " + StringUtils.numberToString(15000000) + "원");
}
}
Fri Sep 30 00:00:00 KST 2022
Sat Jan 22 09:10:00 KST 2022
2022-10-01
22년 10월 1일 토요일
구매가격: 15,000,000원
* 설명
- < 실수 -> 문자열 >
- public static String numberToString(double number) {
: 만약 numberToStrint 메소드를 실행하면서 실수만 입력을 했으면 - return numberToString(number, "#,###.00"); }
: 문자열이 반환되어야 하는데, 그럴려면 일단 중복정의된 메소드를 다시 호출하고, 얻어진 문자열이 반환됨
실수만 입력했을 때, 입력한 실수와 실수의 기본형인 "#,###.00"를 매개변수로 한 메소드를 다시 호출 - public static String numberToString(double number, String pattern) {
: 위의 메소드 실행결과, 입력한 실수와 실수의 기본형인 "#,###.00"을 매개변수로 전달 - df.applyPattern(pattern);
: 그 형식을 df에 저장하고 - return df.format(number); }
: 입력한 실수를 그 형식에 맞춰서 반환
* 실수의 기본형인 "#,###.00"이 아닌 다른 형식을 하고 싶다면 중복정의된 메소드의 매개변수에 형식을 지정하면 됨
- public static String numberToString(double number) {
- < 날짜 -> 문자열 >
- public static String dateToString(Date date) {
: dateToString 메소드를 실행하면서 Date만 입력했으면 - return dateToString(date, "yyyy-MM-dd"); }
: 그 결과로 문자열을 얻기 위해서는, 입력한 Date와 Date의 기본형식인 "yyyy-MM-dd"를 매개인자로 한 메소드를 호출함 - public static String dateToString(Date date, String pattern) {
: 위에서 반환됨과 동시에 매개인자로 들어온 date와 pattern을 적용 - sdf.applyPattern(pattern);
: sdf의 기능 중 applyPattern을 이용해서 위의 메소드 결과 반환된 "yyyy-MM-dd"를 저장 - return sdf.format(date); }
: sdf의 기능 중 format을 이용해서 입력받은 date를 입력받은 형식으로 반환함
* 날짜의 기본형인 "yyyy-MM-dd"가 아닌 다른 형식으로 하고싶으면 중복정의된 메소드의 매개변수로 원하는 형식을 넣으면 됨
- public static String dateToString(Date date) {
- < 문자열 -> 숫자 >
- public static Date textToDate(String text) {
: 만약 "2022-09-30"을 text에 주면 - return textToDate(text, "yyyy-MM-dd"); }
: Date객체를 반환받기 위해서는, text와 Date의 기본형식을 매개변수로 갖는 메소드를 호출 - public static Date textToDate(String text,String pattern) {
: text에 "2022-09-30", pattern에 "yyyy-MM-dd"가 들어감 ( text 형식 = pattern 형식 이어야함 ) - sdf.applyPattern(pattern);
: 전달받은 패턴을 sdf에 저장 - return sdf.parse(text);
: 문자열 text("2022-09-30")를 지정한 패턴형식으로, 문자열에 해당하는 날짜 Date타입으로 바꿈
- public static Date textToDate(String text) {
2. Math
2-1. java.lang.Math
- 수학연산과 관련된 기능을 제공하는 유틸클래스
- 모든 메소드가 정적메소드
- 주요 메소드
- static int abs(int value) : 절대값 반환
- static int min(int a, int b) : 더 작은 값 반환
- static int max(int a, int b) : 더 큰 값 반환
- static long round(double a) : 실수를 일의자리까지 반올림해서 반환 (소수부 x)
- static double ceil(double a) : 1 < x <=2 일 때, ceil(x) = 2.0 (올림)
- static double floor(double a) : 1 <= x < 2 일 때, floor(x) = 1.0 (내림)
- static double random() : 0.0 <= x < 1 범위의 임의의 실수(난수) 반환
: (int)Math.random()*N -> 0부터 (N-1) 까지의 숫자 중 임의의 숫자 반환
: (int)(Math.random()*N + 1) -> 1부터 N까지의 숫자 중 임의의 숫자 반환
(ex. 한 페이지에 책 목록을 10개씩 표시할건데, 책이 23권이 있을 때
-> 23/10 = 2.3 페이지가 필요 -> ceil을 이용 -> 3페이지 생성 (한 페이지에 한 권만 있어도 페이지 생성 필요하니까)
import java.util.Arrays;
public class MathApp {
public static void main(String[] args) {
System.out.println("### round() 메소드");
System.out.println(Math.round(1.3)); // 1
System.out.println(Math.round(1.5)); // 2
System.out.println(Math.round(1.6)); // 2
System.out.println("### ceil() 메소드");
System.out.println(Math.ceil(1.3)); // 2
System.out.println(Math.ceil(1.5)); // 2
System.out.println(Math.ceil(1.6)); // 2
System.out.println("#### floor() 메소드");
System.out.println(Math.floor(1.3)); // 1
System.out.println(Math.floor(1.5)); // 1
System.out.println(Math.floor(1.6)); // 1
System.out.println("### random() 메소드");
System.out.println((int)(Math.random()*6+1));
System.out.println((int)(Math.random()*6+1));
System.out.println((int)(Math.random()*6+1));
System.out.println((int)(Math.random()*6+1));
System.out.println((int)(Math.random()*6+1));
System.out.println((int)(Math.random()*6+1));
int[] numbers = new int[10];
for(int i=0; i<numbers.length; i++) {
int number = ((int)(Math.random()*100/10 + 1))*10;
numbers[i] = number;
}
System.out.println(Arrays.toString(numbers));
}
}
### round() 메소드
1
2
2
### ceil() 메소드
2.0
2.0
2.0
#### floor() 메소드
1.0
1.0
1.0
### random() 메소드
6
1
2
6
4
2
[20, 30, 90, 40, 50, 20, 10, 30, 50, 80]
<과제>
app1 : 상품등록, 상품입고, 상품판매, 재고현황, 판매현황
app2 : 상품등록, 상품이고, 상품판해(여러 건), 재고현황, 판매현황
app3 : 학생등록, 성적등록(임의의 과목), 학생조회, 성적조회, 성적변경, 학생삭제
'수업내용 > Java' 카테고리의 다른 글
[2022.10.05.수] 콜렉션(List<E>) (0) | 2022.10.05 |
---|---|
[2022.10.04.화] 제네릭, 콜렉션(set<E>) (0) | 2022.10.05 |
[2022.09.29.목] 학생, 성적 처리 실습 (0) | 2022.09.30 |
[2022.09.28.수] System 클래스 (0) | 2022.09.29 |
[2022.09.27.화] Object 클래스, String 클래스 (0) | 2022.09.28 |