티스토리 뷰
Chapter 10. 기본 API 클래스 알아보기
▶ 학습 목표
: API가 무엇인지 알고 기본적으로 제공하는 클래스를 적절하게 사용할 수 있다.
10-9. formatting
: 데이터를 일정한 형식으로 통일되게 형식을 지정해 주는 것
데이터를 동일한 형식으로 통일하여 보이기 때문에 보기가 편하다.
- DecimalFormat
: DecimalFormat 클래스는 숫자를 형식화하는 클래스이다.
많은 데이터를 사용시 형식이 제각각이면 불편하기 때문에 편하게 읽기 위해 패턴을 지정한다.
# | 있으면 출력 | , | 콤마 넣음 |
0 | 없으면 0으로 채움 | E | 지수 기호 |
. | 소수점 | % | 100곱하고 퍼센트 붙여서 출력 |
- | 음수 기호를 붙임 |
package chapter10;
import java.text.DecimalFormat;
public class format1 {
public static void main(String[] args) {
String[] pattern = { //문자열 데이터타입의 패턴이름을 가진 배열
"###.###","000.000","-###.###","000000.00%"
};
double[] arr = {1.3, 3.33, 124.243, 242};
for(int p=0; p<pattern.length; p++) {
DecimalFormat d = new DecimalFormat(pattern[p]);
System.out.println("<<<<<"+pattern[p]+">>>>>");
for(int i=0; i<arr.length; i++) {
System.out.println(d.format(arr[i]));
}
}
}
}
출력
<<<<<###.###>>>>>
1.3
3.33
124.243
242
<<<<<000.000>>>>>
001.300
003.330
124.243
242.000
<<<<<-###.###>>>>>
-1.3
-3.33
-124.243
-242
<<<<<000000.00%>>>>>
000130.00%
000333.00%
012424.30%
024200.00%
- SimpleDateFormat
: 날짜를 형식화 하는 클래스이다.
Date와 Calendar에 있는 출력 이외 원하는 형태로 출력하기 위해서 사용한다.
y | 년 | a | 오전/오후 |
M | 월 | H | 시간 |
d | 일 | m | 분 |
E | 요일 | s | 초 |
SimpleDateFormat을 사용 시 원하는 패턴을 파라미터로 인스턴스를 생성한 후 format 메서드를 사용한다.
package chapter10;
import java.text.SimpleDateFormat;
import java.util.Date;
public class format2 {
public static void main(String[] args)
{
Date day = new Date();
String patternKorea = "yyyy-MM-dd";
String patternUSA = "MM-dd-yyyy";
String patternUK = "dd-MM-yyyy";
String pattern1 = "E요일 HH시 mm분 ss초";
SimpleDateFormat p1 = new SimpleDateFormat(patternKorea);
SimpleDateFormat p2 = new SimpleDateFormat(patternUSA);
SimpleDateFormat p3 = new SimpleDateFormat(patternUK);
SimpleDateFormat p4 = new SimpleDateFormat(pattern1);
System.out.println("현재 날짜"+day);
System.out.println("한국 형식(년,월,일) : "+p1.format(day));
//p1안의 format함수(p1이참조변수? 그럼format은 인스턴스메서드?)
System.out.println("미국 형식(월,일,년) : "+p2.format(day));
System.out.println("영국 형식(일,월,년) : "+p3.format(day));
System.out.println(p4.format(day));
}
}
현재 날짜Fri Oct 27 12:34:02 KST 2023
한국 형식(년,월,일) : 2023-10-27
미국 형식(월,일,년) : 10-27-2023
영국 형식(일,월,년) : 27-10-2023
금요일 12시 34분 02초
10-10. Object 클래스
: 클래스는 모든 클래스의 부모 클래스이다.
자바의 모든 클래스는 따로 표기가 되어 있지 않아도 Object 클래스를 상속 받는다.
상속 받기 때문에 Object 클래스의 멤버를 사용할 수 있다.
protected Object | clone() | 객체의 복사본을 반환한다. |
boolean | equals(Object obj) | obj와 같은 객체인지 아닌지 boolean 값으로 반환한다. |
protected void | finalize)_ | 객체가 소멸할 때 호출된다 |
Class<?> | getClass() | 클래스의 정보를 담고 있는 'Class' 객체를 반환한다. |
int | hashcode() | 해시코드를 반환한다. |
void | notify() | 대기 중인 하나의 스레드를 깨운다. |
void | notifyAll() | 대기 중인 모든 스레드를 깨운다. |
String | toString() | 객체의 정보를 문자열로 반환한다. |
void | wait() | 현재의 스레드를 멈추고 대기한다 |
void | wait(long timeout) | timeout만큼 스레드를 멈추고 대기한다. |
void | wiat(long timeout, int nanos) | 실제로 일어난 시간만큼 스레드를 멈추고 대기한다. |
10-11. java.time 패키지
: 날짜와 시간을 다루기 위한 패키지이다.
java.time의 하위 패키지로는 java.time(날짜와 시간), java.time.format(날짜와 시간을 파싱하고 포맷팅), java.time.chrono(달력 시스템 사용가능), java.time.temporal(날짜와 시간을 연산하기 위한 api포함), java.tiem.zone(타임존 지원-한국은 +9) 이 있다.
java.time 패키지는 날짜를 나타내는 LocalDate와 시간을 나타내는 LocalTime 등을 포함한다.
클래스들은 불변하는(immutable) 속성이 있기 때문에 날짜나 시간을 변경하게 되면 실제로는 변경하는 것이 아니라 새로운 객체를 반환한다.
- time 패키지의 시간과 날짜 클래스 종류
- LocalDate 클래스
: 날짜 정보를 저장하는 클래스이다.
저장하는 방법에는 now()와 of() 두가지가 있다.
now()에는 현재 날짜를 지정하는 것이고 of()는 파라미터 자리에 특정 값을 넣어 틀정 날짜를 지정하는 메서드이다.
LocalDate ld = LocalDate.now();
LocalDate mld = LocalDate.of(int year, int month, int dayOfMonth);
* of()는 세팅해서 받음
* 싱글턴 패턴이랑 비슷
* 싱글턴도 두가지 방법이 있음
싱글턴 첫번째 방법 예시
class A
static A tmp = new A();
static A getInstance(){
resturn tmp;
}
싱글턴 두번째 방법 예시
static A getInstance()
{
return new A(파라미터값);
}
- Localtime 클래스
: 시간 정보를 저장하는 클래스이다.
date와 동일하게 now() 쓰는 방식과 of() 메서드를 쓰는 방식이 있다.
LocalTime lt = LocalTime.now();
LocalTime mlt = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);
of() 메서드는 파라미터의 개수나 종류에 따라 다양하게 사용할 수 있다. (=오버로딩)
of(int hour, int minute);
of(int hour, int minute, int second);
of(int hour, int minute, int second, int nanoOfSecond);
- LocalDate Time 클래스
: LocalDate 클래스와 LocalTime 클래스를 결합한 클래스이다.
날짜 정보와 시간 정보 모두 저장하므로 날짜와 시간 정보 모두 사용하고 싶을 때 사용가능하다.
이것 또한 앞서 본 클래스와 동일하게 now() 방법과 of() 방법이 있다.
LocalDateTime ldt = LocalDateTime.now();
LocalDateTime mldt = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);
- ZonedDateTime 클래스
: 타임존에 따라 날짜와 시간을 저장하는 클래스이다.
협정세계시(UTC)와 차이 나는 시간(존 오프셋)이 따로 저장된다.
ZoneDateTime 클래스는 now() 메서드 뒤에 ZoneID를 매개 값으로 넘겨야한다.
ZonedDateTime zdt = ZonedDateTime.now(Zoneld.of("UTC");
- Instant
: 특정 시점의 타임스탬프 객체이다.
1970년 1우러 1일(millisecond)부터 현재까지의 시간을 세는 객체로 사람이 아닌 Machine time에 유리하다.
Instant i1 = Instant.now();
- 클래스들의 정보 값 읽어보기
- LocalDate/LocalTime
: 이전에 학습했던 Calendar이 일요일 = 1 월요일 = 2 으로 표현했지만
LocalDate와 LocalTime 에서는 월요일이 1 화요일이 2와 같이 표현하고 월도 정상적으로 출력된다.
LocalDate | int | getYear() | 년도 |
Month (=클래스주소) | getMonth() | Month의 열거값 | |
int | getMonthValue() | 월 | |
int | getDayOfYear() | 1년의 몇 번째 일 | |
int | getDayOfMonth() | 월의 몇번째 일 | |
DayOfWeek | getDayOfWeek() | 요일 | |
boolea | isLeapYEar() | 윤년여부 | |
LocalTime | int | getHour() | 시간 |
int | getMinute() | 분 | |
int | getSecond() | 초 | |
int | getNano() | 나노초 |
- 클래스들의 정보 더하기/빼기
: 클래스는 필드(전역변수) 값을 변경하기 위한 메서드들을 가지고 있다.
클래스들의 정보를 연산하기 위한 메서드 종류
minusYears(long) | 년도 빼기 | plusWeeks(long) | 주 더하기 |
minusMonths(long) | 월 빼기 | minusHours(long) | 시간 빼기 |
minusDays(long) | 일 빼기 | minusMinutes(long) | 분 빼기 |
minusWeeks(long) | 주 빼기 | minusSeconds(long) | 초 빼기 |
plusYears(long) | 년도 더하기 | minusNanos(long) | 나노초 빼기 |
plusMonths(long) | 월 더하기 | plusHours(long) | 시간 더하기 |
plusDays(long) | 일 더하기 | plusMinutes(long) | 분 더하기 |
ex) 날짜를 더하고 빼는 메서드
package chapter10;
import java.time.LocalDate;
public class Timeplus {
public static void main(String[] args) {
LocalDate ld = LocalDate.now();
System.out.println(ld);
LocalDate ld2=ld
.minusYears(2)
.plusMonths(3)
.minusDays(4);
System.out.println(ld2);
LocalDate ld3 = ld2.minusDays(3);
System.out.println(ld3);
LocalDate ld4=ld3.plusWeeks(3);
System.out.println(ld4);
}
}
2023-10-27
2022-01-23
2022-01-20
2022-02-10
ex) 시간을 더하고 빼는 메서드
package chapter10;
import java.time.LocalDateTime;
public class Timeplus2 {
public static void main(String[] args) {
LocalDateTime ld=LocalDateTime.now();
System.out.println("현재 시간 : "+ld);
LocalDateTime ld2 =ld
.minusHours(5)
.plusMinutes(30)
.minusSeconds(4);
//ld의 변수 minus plus minus해라 체이닝 변수 변경하고 ld에 덮어씀(return있으면 안됨)
/*ld=ld.minusHours(5)
* ld=ld.plusMinutes(3)
* ld=ld.minusSeconds(4) 와 같이 보면 된다.*/
System.out.println("변경 시간 : "+ld2);
LocalDateTime ld3 = ld2.minusHours(24);
System.out.println("자동 변환 시간 : "+ld3);
}
}
현재 시간 : 2023-10-27T15:33:14.713963900
변경 시간 : 2023-10-27T11:03:10.713963900
자동 변환 시간 : 2023-10-26T11:03:10.713963900
- 클래스들의 정보(전역변수) 값 변경하기
: 각 클래스에는 필드(전역변수)값들을 특정 값으로 변경할 수 있는 메서드들이 존재한다.
특정 값으로 변경할 수 있는 메서드 종류
withYear(int) | 년 변경 | withHour(int) | 시간 변경 |
withMonth(int) | 월 변경 | withMinute(int) | 분 변경 |
withDayOfMonth(int) | 월의 일 변경 | withSecond(int) | 초 변경 |
withDayOfYear(int) | 년의 일 변경 (그 해의 int번째 일) |
withNano(int) | 나노초 변경 |
ex) 클래스의 값 (날짜)변경하기 예시
package chapter10;
import java.time.LocalDate;
public class Withprac {
public static void main(String[] args) {
LocalDate ld = LocalDate.now(); //날짜 데이터를 ld에 set해줌
System.out.println(ld); //날짜 데이터 출력(toString 포함된 클래스라 연속되서 나옴)
LocalDate new_ld = ld.withYear(1999)
.withDayOfYear(23)
.withMonth(8);
System.out.println(new_ld);
}
}
2023-10-27
1999-08-23
ex) 시간 변경하는 예시
package chapter10;
import java.time.LocalTime;
public class Withprac2 {
public static void main(String[] args) {
LocalTime lt = LocalTime.now();
System.out.println(lt);
LocalTime new_time = lt.withHour(3)
.withMinute(25)
.withSecond(24)
.withNano(33333);
System.out.println(new_time);
}
}
15:43:40.456322500
03:25:24.000033333
firstDayOfYear() | 년도의 첫 번째 일 |
lastDayOfYear() | 년도의 마지막 일 |
firstDayOfMonth() | 달의 첫 번째 일 |
lastDayOfMonth() | 달의 마지막 일 |
firstInMonth(DayOfWeek.dayOfWeek) | 달의 첫번째 요일 |
lastInMonth(DayOfWeek.dayOfWeek) | 달의 마지막 요일 |
next(DayOfWeek.dayOfWeek) | 돌아오는 요일 |
NextOrSame(DayOfWeek.dayOfWeek) | 오늘을 포함한 돌아오는 요일 |
previous(DayOfWeek.dayOfWeek) | 지난 요일 |
previousOrSame(DayOfWeek.dayOfWeek) | 오늘을 포함한 지난 요일 |
ex) with 메서드 사용 예시
package chapter10;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
public class Temporalprac {
public static void main(String[] args) {
LocalDateTime ldt = LocalDateTime.now(); //ldt참조변수에 LocalDateTime.now() 담음
System.out.println(ldt); //현재날짜 시간 출력
LocalDateTime new_ldt; //참조변수
new_ldt=ldt.with(TemporalAdjusters.firstDayOfYear());
System.out.println("올해의 첫 번째 날" +new_ldt);
new_ldt=ldt.with(TemporalAdjusters.lastDayOfYear());
System.out.println("올해의 마지막 날"+new_ldt);
new_ldt=ldt.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("이번 달의 첫번째 날"+new_ldt);
new_ldt=ldt.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("이번달의 마지막 날"+new_ldt);
new_ldt=ldt.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println("이번달의 첫 월요일"+new_ldt);
new_ldt=ldt.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
System.out.println("이번달의 마지막 일요일"+new_ldt);
new_ldt=ldt.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
System.out.println("돌아오는 금요일"+new_ldt);
new_ldt=ldt.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY));
System.out.println("오늘을 포함한 다음 금요일"+new_ldt);
new_ldt=ldt.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));
System.out.println("지난 월요일"+new_ldt);
new_ldt=ldt.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
System.out.println("오늘을 포함한 지난 월요일"+new_ldt);
}
}
출력
2023-10-27T15:50:18.148587500
올해의 첫 번째 날2023-01-01T15:50:18.148587500
올해의 마지막 날2023-12-31T15:50:18.148587500
이번 달의 첫번째 날2023-10-01T15:50:18.148587500
이번달의 마지막 날2023-10-31T15:50:18.148587500
이번달의 첫 월요일2023-10-02T15:50:18.148587500
이번달의 마지막 일요일2023-10-29T15:50:18.148587500
돌아오는 금요일2023-11-03T15:50:18.148587500
오늘을 포함한 다음 금요일2023-10-27T15:50:18.148587500
지난 월요일2023-10-23T15:50:18.148587500
오늘을 포함한 지난 월요일2023-10-23T15:50:18.148587500
- 클래스들의 정보 값 비교하기
: time 패키지에서는 각 필드 값을 비교하는 메서드를 사용한다.
isAfter() | 이전의 날짜인지 비교하여 boolean값 반환 |
isBefore() | 지나간 날짜인지 비교하여 boolean값 반환 |
isEqual() | 동일 날짜인지 비교하여 boolean값 반환 |
until() | 날짜나 시간의 차이를 반환 |
between() | 전체 날짜나 시간의 차이를 반환 |
* 앞에 is가 붙은 함수는 리턴 값이 논리 값으로 true 나 false를 반환한다.
ex) 날짜 변경 예시
package chapter10;
import java.time.LocalDateTime;
public class After1 {
public static void main(String[] args) {
LocalDateTime ldt1 = LocalDateTime.of(2010,1,1,12,23,23,444);
System.out.println(ldt1);
LocalDateTime ldt2 = LocalDateTime.of(2010,12,25,1,12,2,232);
System.out.println(ldt2);
System.out.println(ldt1.isAfter(ldt2));
System.out.println(ldt1.isBefore(ldt2));
System.out.println(ldt1.isEqual(ldt2));
}
}
2010-01-01T12:23:23.000000444
2010-12-25T01:12:02.000000232
false
true
false
ex) 메서드 호출하는 참조변수와 인자로 들어가는 참조변수간의 날짜 비교를 통해 논리값 반환
package chapter10;
import java.time.LocalDateTime;
public class After2
{
public static void main(String[] args)
{
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt); //현재시간 출력
LocalDateTime end_time=LocalDateTime.of(2027,6,24,12,00);
System.out.println(end_time);
if(ldt.isAfter(end_time))
{
System.out.println("유통기한이 지났습니다!");
}
else
{
System.out.println("유통기한이 아직 지나지 않았습니다!");
}
}
}
출력
2023-10-27T15:54:39.481244900
2027-06-24T12:00
유통기한이 아직 지나지 않았습니다!
'코딩 > JAVA' 카테고리의 다른 글
[4주차 2일] Chapter 11. 컬렉션 프레임웍 (1) | 2023.10.31 |
---|---|
[4주차 1일] 여러개의 클래스로부터 값 받기 (0) | 2023.10.30 |
[3주차 4일] Chapter 10. 기본 API 클래스 알아보기 (0) | 2023.10.26 |
[3주차 3일] Chapter 10. 기본 API 클래스 알아보기 (0) | 2023.10.25 |
[3주차 2일] Chapter 9. 예외처리 (0) | 2023.10.24 |
- Total
- Today
- Yesterday