본문 바로가기

개발(합니다)/Java&Spring

[java-기초-11-02] 기본 API 클래스

반응형

정규 표현식과 Pattern 클래스

문자열이 정해져 있는 형식으로 구성되어 있는지 검증해야 하는 경우에 정규표현식을 사용하면 된다.

기호 설명
[ ] 한 개의 문자 [abc] a, b, c 중 하나의 문자
[^abc] a, b, c 이외의 하나의 문자
[a-zA-Z] a~z, A~Z 중 하나의 문자
\d 한 개의 숫자, [0-9]와 동일
\s 공백
\w 한 개의 알파벳 또는 한 개의 숫자, [a-zA-Z_0-9]와 동일
? 없음 또는 한 개
* 없음 또는 한 개 이상
+ 한 개 이상
{n} 정확히 n개
{n,} 최소한 n개
{n,m} n개에서부터 m개까지
( ) 그룹핑

- (02|010)-\d{3,4}-\d{4}

기호 설명
(02|010) 02 또는 010
- - 포함
\d{3,4} 3자리 또는 4자리 숫자
- - 포함
\d{4} 4자리 숫자

- \w+@\w+\.\w+(\.\w+)?

기호 설명
\w+ 한 개 이상의 알파벳 또는 숫자
@ @
\w+ 한 개 이상의 알파벳 또는 숫자
\. .
\w+ 한 개 이상의 알파벳 또는 숫자
(\. \w+)? \. \w+이 없거나 한 번 더 올 수 있음
  • Pattern 클래스 : 문자열을 정규 표현식으로 검증하는 기능은 java.uril.regex.Pattern 클래스의 정적 메서드인 matches() 메서드가 제공한다.

Arrays 클래스

리턴타입 메서드 이름 설명
int binarySearch(배열, 찾는 값) 전체 배열 항목에서 찾는 값이 있는 인덱스 리턴
타겟 배열 copyOf(원본배열, 복사할길이) 원본 배열의 0번 본 배열의 0번 인덱스에서 복사할 길이만큼 복사한 배열 리턴, 복사할 길이는 원본 배열의 길이보다 커도 되며, 타겟 배열의 길이가 된다.
타겟 배열 CopyOfRange(원본 배열, 시작인덱스, 끝인덱스) 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열 리턴
boolean deepEquals(배열, 배열) 두 배열의 깊은 비교(중첩 배열의 항목까지 비교)
boolean equals(배열, 배열) 두 배열의 얕은 비교(중첩 배열의 항목은 비교하지 않음)
void fill(배열, 값) 전체 배열 항목에 동일한 값을 저장
void fill(배열, 시작인덱스, 끝인덱스, 값) 시작 인덱스부터 끝 인덱스까지의 항목에만 동일한 값을 저장
void sort(배열) 배여ㅑㄹ의 전체 항목을 올므차순으로 정렬
String toString(배열) "[값1ㅡ, 값2, ...]"와 같은 문자열을 리턴

Wrapper(포장) 클래스

  • 기본 타입의 값을 갖는 객체를 생성할 수 있다.
기본 타입 포장 클래스
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
  • 박싱과 언박싱 : 기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고, 포장 객체에서 기본 타입의 값을 얻는 과정을 언박싱이라고 한다.

Math 클래스

메서드 설명
int abs(int a)
double abs(double a)
절대값
double ceil(double a) 올림값
double floor(double a) 버림값
int max(int a, int b)
double max(double a, double b)
최대값
int min(int a, int b)
double min(double a, double b)
최소값
double random() 랜덤값
double rint(double a) 가까운 정수의 실수값
long round(double a) 반올림값

Foramt 클래스

  1. 숫자 형식 클래스
    • 0 : 10진수(빈자리는 0으로 채움)
    • : 10진수(빈자리는 채우지 않음)

    • . : 소수점
      • : 음수 기호
    • , : 단위 구분
    • E : 지수 문자
    • ; : 양수와 음수의 패턴을 모두 기술할 경우, 패턴 구분자
    • % : 100을 곱한 후에 % 문자를 붙임
    • \u00A4 : 통화 기호
  2. 날짜 형식 클래스
    • y : 년
    • M : 월
    • d : 일
    • D : 월 구분 없는 일(1~365)
    • E : 요일
    • a : 오전/오후
    • w : 년의 몇 번째 주
    • W : 월의 몇 번째 주
  3. 문자열 형식 클래스
    • + : 연결 연산자

java.time 패키지

  • java.time : 날짜와 시간을 나타내는 핵심 API인 LocalDate, LocalTime, LocalDateTeim, ZonedDateTime을 포함하고 있다. ISO-8601에 정의된 달려 시스템에 기초한다.
  • java.time.chrono : ISO-8601에 정의된 달려 시스템 이외에 다른 달력 시스템이 필요할 때 사용할 수 있는 API들이 포함되어 있다.
  • java.time.format : 날짜와 시간을 파싱하고 포맷팅하는 API들이 포함되어 있다.
  • java.time.temporal : 날짜와 시간을 연산하기 위한 보조 API들이 포함되어 있다.
  • java.time.zone : 타임존을 지원하는 API들이 포함되어 있다.

날짜와 시간 객체 생성

  • LocalDate : 로컬 날짜 클래스
          LocalDate currDate = LocalDate.now();
          LocalDate targetDate = LocalDate.of(int year, int month, int dayOfMonth);
  • LocalTime : 로컬 시간 클래스
          LocalTime currTime = LocalTime.now();
          LocalTime targetTime = LocalTime.of(int year, int minute, int second, int nanoOfSecond);
  • LocalDateTime : 로컬 날짜 및 시간 클래스(LocalDate + LocalTime)
          LocalDateTime currDateTime = LocalDateTime.now();
          LocalDateTime targetTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);
  • ZonedDateTime : 특정 타임존(TimeZone)의 날짜와 시간 클래스
          ZonedDateTime utcDateTime = ZonedDateTIme.now(ZoneId.of("UTC"));
          ZoneDateTime londonDateTime = ZonedDateTime.now(Zoneid.of("Europe/London"));
          ZOneDateTIme seoulDateTIme = ZOneDateTIme.now(ZoneId.of("Asia/Seoul"));
  • Instant : 특정 시점의 Time-Stamp 클래스, 특정한 두 시점 간의 시간적 우선순위를 따질 때 사용한다.
          Instant instant1 = Instant.now();
          Instant instant2 = Instant.now();
          if(instant1.isBefore(instant2)) { System.out.println("instant1이 빠릅니다."); }
          else if(instant1.isAfter(instant2)) { System.out.println("instant1이 늦습니다."); }
          else { System.out.println("동일한 시간입니다."); }
          System.out.println("차이(nanos): " + instant1.until(instant2, ChronoUnit.NANOS));

날짜와 시간에 대한 정보 얻기

  • LocalDate
    • getYear() : 년
    • getMonth() : Month 열거 값
    • getMonthValue() : 월
    • getDayOfYear() : 일년의 몇 번째 일
    • getDayOfMonth() : 월의 몇 번째 일
    • getDayOfWeek() : 요일
    • isLeapYear() : 윤년 여부
  • LocalTime
    • getHour() : 시간
    • getMinute() : 분
    • getSecond() : 초
    • getNano() : 나노초
  • ZonedDateTime
    • getZone() : 존아이디를 리턴(ex: Asia/Seoul)
    • getOffset() : 시차를 리턴

날짜와 시간을 조작

  • 빼기와 더하기(LocalDate, LocalDateTime, ZonedDateTime)
    • minus[Years, Months, Days, Weeks, Hours, Minutes, Seconds, Nanos)
    • plus[Years, Months, Days, Weeks, Hours, Minutes, Seconds, Nanos)
  • 변경하기(LocalDate, LocalDateTime, ZonedDateTime)
    • with[Year, Month, DayOfMonth, DayOfYear, Hour, Minute, second, Nano], with(TemporalAdjuster adjuster)
  • TemporalAdjuster
    • firstDayOfYear() : 이번 해의 첫 번째 일
    • lastDayOfYear() ; 이번 해의 마지막 일
    • firstDayOfNextYear() : 다음 해의 첫 번째 일
    • firstDayOfMonth() : 이번달의 첫 번째 일
    • lastDayOfMonth() : 이번달의 마지막 일
    • firstDayOfNextMonth() : 다음 달의 첫 번째 일
    • firstInMonth(DayOfWeek dayOfWeek) : 이번 달의 첫 번째 요일
    • lastInMonth(DayOfWeek dayOfWeek) : 이번 달의 마지막 요일
    • next(DayOfWeek dayOfWeek) : 돌아오는 요일
    • nextOrSame(DayOfWeek dayOfWeek) : 돌아오는 요일(오늘 포함)
    • previous(DayOfWeek dayOfWeek) : 지난 요일
    • previousOrSame(DayOfWeek dayOfWeek) : 지난 요일(오늘 포함)

날짜와 시간을 비교

클래스 메서드 설명
LocalDate
LocalDateTime
isAfter(ChronoLocalDate other) 이후 날짜인지 비교
isBefore(ChronoLocalDate other) 이전 날짜인지 비교
isEqual(ChronoLocalDate other) 동일 날짜인지 비교
LocalTime
LocalDateTime
isAfter(LocalTime other) 이후 시간인지 비교
isBefore(LocalTime other) 이전 시간인지 비교
LocalDate until(ChronoLocalDate endDateExclusive) 날짜 차이
LocalDate
LocalTime
LocalDateTime
until(
 Temporal endExclusive,
 TemporalUnit unit
)
시간 차이
Period between(
 LocalDate startDateInclusive,
 LocalDate endExclusive
)
날짜 차이
Duration between(
 Temporal startinclusive,
 Temporal endExclusive
시간 차이
ChronoUnit.YEARS between(
 Temporal temporal1Inclusive,
 Temporal temporal2Exclusive
)
전체 년 차이
ChronoUnit.MONTHS 전체 달 차이
ChronoUnit.WEEKS 전체 주 차이
ChronoUnit.DAYS 전체 일 차이
ChronoUnit.HOURS 전체 시간 차이
ChronoUnit.SECONDS 전체 초 차이
ChronoUnit.MILLIS 전체 밀리초 차이
ChronoUnit.NANOS 전체 나노초 차이

파싱과 포맷팅

  • 파싱(LocalDate, LocalTime, LocalDateTime, ZoneddDteTime)
    • parse(CharSequence)
    • parse(CharSequence, DateTimeFormatter)
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
      LocalDate localDate = LocalDate.parse("2020.12.12", formatter);
      LocalDate localDate = LocalDate.parse("2020.12.12", BASIC_ISO_DATE);
상수 설명 부가설명
ofLocalizedDate(dateStyle) Formatter with date style from the locale '2011-12-03'  
ofLocalizedTime(timeStyle) Formatter with time style from the locale '10:15:30'  
ofLocalizedDateTime(dateTimeStyle) Formatter with a style for date and time from the locale '3 Jun 2008 11:05:30'  
ofLocalizedDateTime(dateStyle,timeStyle) Formatter with date and time styles from the locale '3 Jun 2008 11:05'  
BASIC_ISO_DATE Basic ISO date '20111203' 날짜 시간 값을 yyyymmdd 문자열 값으로 변환합니다.
ISO_LOCAL_DATE ISO Local Date '2011-12-03' 날짜 시간 값을 yyyy-mm-dd 문자열 값으로 변환합니다.
ISO_OFFSET_DATE ISO Date with offset '2011-12-03+01:00' 날짜 시간 값을 yyyy-mm-dd+오프셋 값 문자열 값으로 변환합니다. 오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다.
ISO_DATE ISO Date with or without offset '2011-12-03+01:00'; '2011-12-03' 날짜 시간 값을 yyyy-mm-dd+오프셋 값 또는 yyyy-mm-dd 문자열 값으로 변환합니다. 오프셋 값이 사용 가능한 경우 추가됩니다.
ISO_LOCAL_TIME Time without offset '10:15:30' 날짜 시간 값을 hh-mm-ss 문자열 값으로 변환합니다.
ISO_OFFSET_TIME Time with offset '10:15:30+01:00' 날짜 시간 값을 hh-mm-ss+오프셋 값 문자열 값으로 변환합니다.오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다.
ISO_TIME Time with or without offset '10:15:30+01:00'; '10:15:30' 날짜 시간 값을 hh:mm, hh:mm:ss 또는 hh:mm:ss+오프셋 값 문자열 값으로 변환합니다. 오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다.
ISO_LOCAL_DATE_TIME ISO Local Date and Time '2011-12-03T10:15:30' 날짜 시간 값을 yyyy-mm-ddThh:mm:ss 문자열 값으로 변환합니다.
ISO_OFFSET_DATE_TIME Date Time with Offset 2011-12-03T10:15:30+01:00' 날짜 시간 값을 yyyy-mm-ddThh:mm:ss+오프셋 값 문자열 값으로 변환합니다. 오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다.
ISO_ZONED_DATE_TIME Zoned Date Time '2011-12-03T10:15:30+01:00[Europe/Paris]' 날짜 시간 값을 yyyy-mm-ddThh:mm:ss+오프셋 값[zone id] 문자열 값으로 변환합니다. 오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다. 형식 내 'zone id'는 시간대를 나타냅니다
ISO_DATE_TIME Date and time with ZoneId '2011-12-03T10:15:30+01:00[Europe/Paris]' 날짜 시간 값을 yyyy-mm-ddThh:mm:ss, yyyy-mm-ddThh:mm:ss+오프셋 값 또는 yyyy-mm-ddThh:mm:ss+오프셋 값[zone id] 문자열 값으로 변환합니다.
ISO_ORDINAL_DATE Year and day of year '2012-337' 날짜 시간 값을 yyyy-[연 기준 날짜] 문자열 값으로 변환합니다. 예를 들어 날짜 시간 값이 '2018년 1월 25일'인 경우 '2018-25' 형식으로 지정됩니다. 여기서 '25'는 날짜를 나타냅니다.
ISO_WEEK_DATE Year and Week 2012-W48-6' 날짜 시간 값을 yyyy-[연 기준 주]-[요일] 문자열 값으로 변환합니다. 예를 들어 날짜 시간 값이 '2018년 1월 25일'인 경우 '2018-W4-4' 형식으로 지정됩니다. 여기서 'W4'는 해당 연도의 네 번째 주를 나타내고, '4'는 요일을 나타냅니다.
ISO_INSTANT Date and Time of an Instant '2011-12-03T10:15:30Z' 날짜 시간 값을 yyyy-mm-ddThh:mm:ss+오프셋 값Z 문자열 값으로 변환합니다.
RFC_1123_DATE_TIME RFC 1123 / RFC 822 'Tue, 3 Jun 2008 11:05:30 GMT' 날짜 시간 값을 [요일], [월 기준 날짜] ['MMM' 형식의 월] ['YYYY'형식의 연도] hh:mm:ss [offset id] 문자열 값으로 변환합니다. 예를 들어 날짜 시간 값이 '2018-01-25 10:15'인 경우 'Thu, 25 December 2018 10:15:00GMT' 형식으로 지정됩니다. 'GMT'는 사용 가능한 오프셋이 없음을 나타냅니다.
  • 포맷팅(LocalDate, LocalTime, LocalDateTime, ZonedDateTime)
    • foramt(Date TimeFormatter formatter)
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 M월 d일 a h시 m분");
        String nwoString = now.format(dateTimeFormatter);
반응형