728x90
java.lang과 java.util 패키지
@2024.04.12
java.lang에서 자주 사용하는 클래스
- Object, String, StringBuilder, StringBuffer, Math, System, Throwable
Object
💡
모든 클래스의 조상으로, 모든 자바 객체가 기본적으로 상속받는 클래스
- 주요 메서드
- toString()
- 객체의 문자열 표현을 반환
- 클래스 이름, @ 심벌, 해시 코드의 16진수 표현을 기본 형식으로 사용
- 대부분 이 메서드를 오버라이드 하여 사용
// toString(): 객체의 문자열 표현을 반환 @Override public String toString() { return "ExampleClass[value=" + value + "]"; }
- equals(Object obj)
- 객체 참조를 비교하여 두 객체가 동일한지 비교
- 객체의 동등성을 정의하기 위해 오버라이드 하여 사용
// equals(Object obj): 객체 참조를 비교하여 두 객체가 동일한지 비교 @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; ExampleClass that = (ExampleClass) obj; return value == that.value; }
- hashCode()
- 객체의 해시 코드를 반환
- equals() 메서드를 오버라이드 할 때, hashCode()도 함께 오버라이드하는 것이 일반적
// hashCode(): 객체의 해시코드를 반환 @Override public int hashCode() { return Objects.hash(value); }
- getClass()
- 객체의 런타임 클래스를 반환
// getClass() ExampleClass obj1 = new ExampleClass(10); System.out.println("getClass(): " + obj1.getClass().getName()); //ExampleClass
- clone()
- 객체의 복사본을 생성(얕은 복사)
- Cloneable 인터페이스를 구현하는 클래스에서 사용
// clone(): 객체의 복사본을 생성(얕은 복사) @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }
- wait()
- 현재 스레드를 일시적으로 대기 상태로 만든다.
- 대기 상태에서 스레드는 다른 스레드가 해당 객체의 notify()나 notifyAll() 메서드를 호출할 때까지 기다린다.
- notify()
- 대기 중인 스레드 중 하나를 임의로 선택해서 깨운다.
- 선택된 스레드는 wait() 상태에서 벗어나 실행 대기 상태가 된다.
- notifyAll()
- 해당 객체에 대기 중인 모든 스레드를 깨운다.
- 모든 스레드가 동시에 실행되도록 하는 경우에 사용
- toString()
String
💡
문자열을 표현하고 관리하는 데 사용되며, 자바에서 String은 불변이다.
- 한번 생성된 String 객체의 내용은 변경할 수 없다. (=불변성)
- 문자열을 수정하는 것처럼 보이나, 실제로는 새로운 String 객체를 생성하는 것
- 주요 메서드
- + 연산자와 concat()
- 두 문자열을 연결
// 두 문자열을 연결합니다. String str1 = "Hello"; String str2 = "World"; String result = str1.concat(str2); // 결과: HelloWorld System.out.println("concat(): " + result);
- length()
- 문자열의 길이를 반환
// 문자열의 길이를 반환합니다. String str = " Example String "; int len = str.length(); // 결과: 19 System.out.println("length(): " + len);
- charAt(Index)
- 주어진 인덱스에 해당하는 문자 반환
// 주어진 인덱스에 해당하는 문자를 반환합니다. char ch = str.charAt(2); // 결과: E System.out.println("charAt(): " + ch);
- substring(startIndex, endIndex)
- 주어진 범위에서 해당하는 문자열 반환
// 주어진 범위에 해당하는 문자열을 반환합니다. String sub = str.substring(3, 8); // 결과: ample System.out.println("substring(): " + sub);
- equals()
- 다른 문자열과 현재 문자열을 비교하여 같으면 true, 다르면 false 반환
// 다른 문자열과 현재 문자열을 비교하여 같으면 true, 아니면 false를 반환합니다. boolean isEqual = str1.equals(str2); // 결과: false System.out.println("equals(): " + isEqual);
- equalsIgnoreCase()
- 대소문자를 무시하고 문자열 비교
// 대소문자를 무시하고 문자열을 비교합니다. boolean isEqualIgnoreCase = str1.equalsIgnoreCase(str2); // 결과: false System.out.println("equalsIgnoreCase(): " + isEqualIgnoreCase);
- indexOf
- 주어진 문자 또는 문자열이 처음 등장하는 위치의 인덱스 반환
// 주어진 문자 또는 문자열이 처음 등장하는 위치의 인덱스를 반환합니다. String substring = "ample"; int index = str.indexOf(substring); // 결과: 3 System.out.println("indexOf(): " + index);
- lastIndexOf
- 주어진 문자 또는 문자열이 마지막으로 등장하는 위치의 인덱스 반환
// 주어진 문자 또는 문자열이 마지막으로 등장하는 위치의 인덱스를 반환합니다. int lastIndex = str.lastIndexOf(substring); // 결과: 11 System.out.println("lastIndexOf(): " + lastIndex);
- toUpperCase()
- 문자열을 모두 대문자로 변환
// 문자열을 모두 대문자로 변환합니다. String upperCaseStr = str.toUpperCase(); // 결과: EXAMPLE STRING System.out.println("toUpperCase(): " + upperCaseStr);
- toLowerCase()
- 문자열을 모두 소문자로 변환
// 문자열을 모두 소문자로 변환합니다. String lowerCaseStr = str.toLowerCase(); // 결과: example string System.out.println("toLowerCase(): " + lowerCaseStr);
- trim()
- 문자열 앞뒤 공백을 제거
// 문자열의 앞뒤 공백을 제거합니다. String trimmedStr = str.trim(); // 결과: Example String System.out.println("trim(): " + trimmedStr);
- contains()
- 주어진 문자열이 현재 문자열에 포함되어있는가?
String str = "Hello, World!"; boolean containsWorld = str.contains("World"); // true
- + 연산자와 concat()
StringBuilder / StringBuffer
💡
변경 가능한 문자열을 처리하는 클래스
- 문자열 추가, 삭제, 수정 등의 작업
- StringBuilder
- 단일 스레드 환경에서 사용하기 적합
- StringBuffer에 비해 더 빠른 성능을 제공
- 동기화가 되지 않기에 멀티 스레드에서는 스레드가 안전하지 않다.
- StringBuffer
- 멀티 스레드 환경에서 사용하기 적합
- 동기화가 되어있어 스레드는 안전하나, 이로 인해 StringBuilder보다 성능이 느리다.
- 주요 메소드
- append()
- 문자열 뒤에 지정된 값을 추가
StringBuilder sb = new StringBuilder("Hello"); sb.append(" World"); System.out.println(sb.toString()); // 출력: Hello World
- insert(index, str)
- 지정된 위치에 값을 삽입
StringBuilder sb = new StringBuilder("Hello"); sb.insert(5, " World"); System.out.println(sb.toString()); // 출력: Hello World
- delete(deleteFront, deleteEnd)
- 지정된 범위의 문자열을 삭제
StringBuilder sb = new StringBuilder("Hello World"); sb.delete(6, 11); System.out.println(sb.toString()); // 출력: Hello
- deleteCharAt(index)
- 지정된 인덱스의 문자 삭제
StringBuilder sb = new StringBuilder("Hello World"); sb.deleteCharAt(5); System.out.println(sb.toString()); // 출력: Helloworld
- reverse()
- 문자열의 순서를 뒤집는다.
StringBuilder sb = new StringBuilder("Hello World"); sb.reverse(); System.out.println(sb.toString()); // 출력: dlroW olleH
- toString()
- 문자열 객체 또는 문자열 표현을 반환
StringBuilder sb = new StringBuilder("Hello World"); String str = sb.toString(); System.out.println(str); // 출력: Hello World
- append()
정적 또는 거의 변경되지 않는 문자열 : String
단일 스레드 환경에서의 동적 문자열 조작 : StringBuilder
멀티 스레드 환경에서의 동적 문자열 조작 : StringBuffer
Math
💡
기본적인 수학적 연산과 관련된 메서드를 제공하는 유틸리티 클래스로, 수학적 계산에 필요한 정적 메서드들을 포함하고 있다.
- 기본 수학 연산
- Math.max(int a, int b) → 두 정수 중 큰 값 반환
- Math.min(int a, intb) → 두 정수 중 작은 값 반환
- Math.pow(double a, double b) → 주어진 수의 주어진 지수의 승 계산
- Math.sqrt(double a) → 주어진 수의 제곱근을 계산
int maxVal = Math.max(5, 10); // 결과: 10
int minVal = Math.min(5, 10); // 결과: 5
double square = Math.pow(4, 2); // 결과: 16.0
double squareRoot = Math.sqrt(16); // 결과: 4.0
- 삼각함수
- Math.sin(double a)
- 사인 함수
- Math.cos(double a)
- 코사인 함수
- Math.tan(double a)
- 탄젠트 함수
- Math.sin(double a)
- 로그 및 지수 함수
- Math.log(double a)
- 자연 로그 함수
- Math.exp(double a)
- 지수 함수
- Math.log(double a)
- 랜덤 수 생성
- Math.random()
- 0과 1 사이의 난수를 생성하며, 0은 포함 1은 포함하지 않는 double 반환
- Math.random()
- 반올림 및 정수 변환
- Math.round(double a)
- 소수를 반올림한 정수 반환
- Math.ceil(double a)
- 주어진 값보다 크거나 같은 최소 정수 반환
- Math.toIntExact(long value)
- long 값을 int 값으로 변환하며, 오버플로우 발생 시 예외 발생
- Math.round(double a)
System
💡
시스템 관련 기능을 제공하며, 표준 입력, 출력, 오류 스트림에 접근하거나, 환경 변수 읽기, 현재 시간 측정, 시스템 프로퍼티 조회 등의 기능을 포함
- 표준 입력, 출력 , 오류 스트림
- System.in
- 표준 입력 스트림으로 콘솔에서 사용자로부터 데이터를 입력받을 때 사용
- System.out
- 표준 출력 스트림으로, 콘솔에서 출력할 데이터를 전달할 때 사용
- System.err
- 표준 오류 출력 스트림으로 프로그램 실행 중 발생한 오류 메시지 출력
// 표준 입력에서 데이터를 읽어와서 변수에 저장 Scanner scanner = new Scanner(System.in); System.out.print("Enter your name: "); String name = scanner.nextLine(); // 표준 출력으로 변수의 값을 출력 System.out.println("Hello, " + name + "!"); // 표준 오류 출력으로 오류 메시지 출력 System.err.println("An error occurred!");
- System.in
- 환경 변수 접근
- System.getenv()
- 시스템의 환경 변수에 접근하여 맵 형식으로 반환
// 시스템의 환경 변수 중 JAVA_HOME 값을 가져옴 String javaHome = System.getenv("JAVA_HOME"); System.out.println("JAVA_HOME: " + javaHome);
- System.getenv()
- 시스템 프로퍼티 접근
- System.getProperties()
- 시스템의 모든 프로퍼티를 나타내는 Properties 객체 반환
- System.getProperty(String key)
- 주어진 키에 해당하는 시스템 프로퍼티 값 반환
// 시스템의 모든 프로퍼티 출력 Properties properties = System.getProperties(); properties.list(System.out); // 특정 시스템 프로퍼티 값 가져오기 String javaVersion = System.getProperty("java.version"); System.out.println("Java Version: " + javaVersion);
- System.getProperties()
- 현재 시간 밀리초 단위 측정
- System.currentTimeMillis()
- 1970년 1월 1일 0시 0분 0초(UTC)부터 현재까지 경과한 시간을 밀리초 단위로 반환
- System.nanoTime()
- 시스템의 현재 시간을 나노초 단위로 반환하며, 더 높은 정밀도를 제공하고 시간 경과를 정확하게 측정하는 데 사용된다.
// 현재 시간(밀리초) 가져오기 long currentTimeMillis = System.currentTimeMillis(); System.out.println("Current Time (milliseconds): " + currentTimeMillis); // 시스템의 현재 시간(나노초) 가져오기 long nanoTime = System.nanoTime(); System.out.println("Current Time (nanoseconds): " + nanoTime);
- System.currentTimeMillis()
- 배열 복사
- System.arraycopy(Obejct src, int srcPos, Object dest, int destPos, int length)
- 배열에서 다른 배열로 요소를 복사한다
- 소스 배열(scr)의 지정된 위치(scrPos)에서 시작하여 대상 배열(dest)의 지정된 위치(destPos)에 복사하며, 지정된 길이(length) 만큼 복사
// 배열 복사 예시 int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = new int[5]; System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length); System.out.println("Destination Array: " + Arrays.toString(destinationArray));
- System.arraycopy(Obejct src, int srcPos, Object dest, int destPos, int length)
- 시스템 종료
- System.exit(int status)
- 현재 실행 중인 java 가상 머신을 종료
- 인수로 전달받은 상태 코드를 반환하며, 상태 코드 0은 정상 종료를 나타낸다.
- 종료 코드를 사용하여 프로그램이 예상대로 종료되었는지 확인 가능
- 종료 코드는 시스템에 따라 다르나, 일반적으로 0은 성공 그 외는 오류
- System.exit(int status)
// 시스템 종료 예시
int errorCode = 1; // 에러 코드
System.exit(errorCode); // 시스템 종료
Throwable
💡
자바에 모든 에러와 예외의 최상위 클래스로, 자바에서 예외 처리 메커니즘의 기반을 이루며, Exception과 Error 클래스의 상위 클래스다.
- 사용자 정의 예외를 만들 때도, Throwable 클래스를 상속받아 구현
- 주요 메소드
- getMessage()
- 예외에 대한 간단한 설명 반환
try { int result = 10 / 0; // ArithmeticException 발생 } catch (ArithmeticException e) { String message = e.getMessage(); System.out.println("Exception Message: " + message); // 출력: / by zero
- printStackTrace()
- 예외를 발생시킨 호출 스택의 모든 메서드를 출력
try { int result = 10 / 0; // ArithmeticException 발생 } catch (ArithmeticException e) { e.printStackTrace(); }
- getCause()
- 예외의 원인을 반환하며, 원인이 없는 예외는 null 반환
try { // 예외 발생 throw new RuntimeException("Something went wrong"); } catch (RuntimeException e) { Throwable cause = e.getCause(); System.out.println("Cause: " + cause); // 출력: null (예외의 원인이 없으므로) }
- initCause(Throwable cause)
- 예외의 원인을 설정
try { // 예외 발생 RuntimeException exception = new RuntimeException("Something went wrong"); // 원인 예외 설정 Exception causeException = new Exception("Root cause"); exception.initCause(causeException); throw exception; } catch (RuntimeException e) { Throwable cause = e.getCause(); System.out.println("Cause: " + cause.getMessage()); // 출력: Root cause }
- getMessage()
java.util에서 자주 사용하는 클래스
- Date, Calendar
Date
💡
날짜와 시간을 나타내는데 사용되며, 특정 시점을 밀리초 단위로 표현하여, 날짜와 시간을 쉽게 조작하고 표시할 수 있는 여러 메사tj드 제공
- 오래된 api로 인해 시간대 처리가 불편하고 설계상의 문제가 존재
⇒
Java 8 이후 java.time 패키지의 새로운 날짜 및 시간 API를 사용할 것을 권장
- 주요 메소드
- after(Date when)
- 현재 날짜가 지정된 날짜 이후인지 확인
- 이후면 true 아니면 false 반환
- before(Date when)
- 현재 날짜가 지정된 날짜 이전인지 확인
- 이전이면 true 아니면 false 반환
- getTime()
- 1970년 1월 1일 0시 0분 0초(UTC)로부터의 경과 시간을 밀리초 단위로 반환
- setTime(long time)
- 현재 날짜를 주어진 시간(time)에 해당하는 날짜로 설정
- 주어진 시간은 1970년 1월 1일 0시 0분 0초(UTC)로부터의 경과시간을 밀리초 단위로 표현
- toString()
- 객체를 문자열로 표현한 값을 반환하며 일반적으로 날짜와 시간이 포함
- after(Date when)
// 현재 시간 생성
Date currentDate = new Date();
// after(Date when): 현재 날짜가 지정된 날짜 이후인지 확인
Date futureDate = new Date(System.currentTimeMillis() + 86400000); // 현재 시간으로부터 1일 후
boolean isFuture = currentDate.after(futureDate);
System.out.println("Is future date? " + isFuture); // 출력: Is future date? false
// before(Date when): 현재 날짜가 지정된 날짜 이전인지 확인
Date pastDate = new Date(System.currentTimeMillis() - 86400000); // 현재 시간으로부터 1일 전
boolean isPast = currentDate.before(pastDate);
System.out.println("Is past date? " + isPast); // 출력: Is past date? false
// getTime(): 현재 날짜의 시간을 밀리초로 가져옴
long currentTimeInMillis = currentDate.getTime();
System.out.println("Current time in milliseconds: " + currentTimeInMillis); // 현재 시간의 밀리초 출력
// setTime(long time): 현재 날짜를 주어진 시간으로 설정
long newTimeInMillis = System.currentTimeMillis() + 86400000; // 현재 시간으로부터 1일 후
currentDate.setTime(newTimeInMillis);
System.out.println("New date: " + currentDate); // 변경된 날짜 출력
// toString(): 현재 날짜를 문자열로 변환하여 출력
System.out.println("Current date and time: " + currentDate.toString());
Calendar
💡
추상 클래스로, 날짜와 시간을 나타내고 조작하는 데 사용되며, Date 클래스보다 더 유연하다
- 구체적인 달력 시스템을 제공하는 서브 클래스를 통해 사용된다(GregorianCalendar)
- 추상 클래스네? 근데 추상 클래스 타입 그대로 쓰네? 실제 객체는 GregorianCalendar네?
나중에 문제가 생기면 실체 객체만 갈아끼우면 해결 되네?
- 추상 클래스네? 근데 추상 클래스 타입 그대로 쓰네? 실제 객체는 GregorianCalendar네?
- 복잡한 날짜와 시간 계산, 시간대 변환, 윤년 계산 등을 수행할 때 유용
- java8 이상에서는 java.time 패키지 사용을 좀 더 권장
- 주요 메소드
- getInstance()
- 현재 로컬과 타임존에 따른 캘린더 인스턴스 반환
Calendar calendar = Calendar.getInstance();
- set(int year, int month, inst date)
- 캘린더 필드 중 연도, 월, 일 설정
Calendar calendar = Calendar.getInstance(); calendar.set(2024, Calendar.APRIL, 12);
- get(int field)
- 지정된 캘린더 필드 값을 반환
Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR);
- add(int field, int amount)
- 지정된 캘린더 필드에 지정된 양만큼 값을 더한다
Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, 1); // 한 달을 더함
- roll(int field, boolean up)
- 지정된 필드 값을 변경
- up이 true 이면 값이 올라가고, false 면 값이 내려간다.
Calendar calendar = Calendar.getInstance(); calendar.roll(Calendar.MONTH, true); // 한 달을 올림
- getInstance()
java.time에서 자주 사용하는 클래스
💡
날짜와 시간을 다루는 새로운 API를 제공하며, 기존의 java.util.Date 및 java.util.Canlender에 비해 향상된 시간 처리와 불변 객체를 제공하여 날짜와 시간을 더 쉽고 안전하게 다룰 수 있다.
LocalDate 클래스
💡
날짜만을 나타내며, 연, 월, 일 정보를 포함한다. (시간대 정보나 시간은 포함 X)
- 주로 생년월일이나 특정 날짜를 표현할 때 사용
LocalTime 클래스
💡
시간만을 나타내며, 시, 분, 초, 나노초, 정보를 포함한다. (날짜나 시간대 정보 포함 X)
- 주로 일과 시간이나 특정 시각을 표현할 때 사용
LocalDateTime 클래스
💡
날짜와 시간을 모두 포함하며, LocalDate와 LocalTime의 조합이다. (시간대 정보 포함 X)
- 주로 일정 관리나 이벤트 로깅 등에 사용
LocalDate, LocalTime, LocalDateTime 주요 메소드
- 시스템의 날짜와 시간을 쉽게 조작하고, 포멧팅하며, 비교할 수 있는 다양한 메서드를 제공
- now()
- 현재 시스템을 기반으로 인스턴스 생성
// 현재 날짜를 가져오는 예시 LocalDate currentDate = LocalDate.now(); // 오늘 날짜 // 현재 시간을 가져오는 예시 LocalTime currentTime = LocalTime.now(); // 현재 시간 // 현재 날짜와 시간을 가져오는 예시 LocalDateTime currentDateTime = LocalDateTime.now(); // 현재 날짜와 시간
- of()
- 주어진 값을 기반으로 인스턴스 생성
// 2024년 4월 12일을 나타내는 예시 LocalDate date = LocalDate.of(2024, 4, 12); // 오후 3시 30분을 나타내는 예시 LocalTime time = LocalTime.of(15, 30); // 2024년 4월 12일 오후 3시 30분을 나타내는 예시 LocalDateTime dateTime = LocalDateTime.of(2024, 4, 12, 15, 30);
- plusDays()
- 주어진 날짜 수만큼 날짜를 더한다.
// 현재 날짜에 7일을 더하는 예시 LocalDate futureDate = currentDate.plusDays(7); // 현재 날짜로부터 7일 후
- minusHours()
- 주어진 시간 수만큼 시간을 뺸다.
// 현재 시간에서 2시간을 빼는 예시 LocalTime earlierTime = currentTime.minusHours(2); // 현재 시간으로부터 2시간 전
- Format(DateTimeFormatter)
- 날짜 또는 시간을 원하는 형식으로 문자열로 반환
// 날짜를 "yyyy-MM-dd" 형식으로 출력하는 예시 DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String formattedDate = currentDate.format(dateFormatter); // "2024-04-13" // 시간을 "HH:mm:ss" 형식으로 출력하는 예시 DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); String formattedTime = currentTime.format(timeFormatter); // "15:30:00" // 날짜와 시간을 "yyyy-MM-dd HH:mm:ss" 형식으로 출력하는 예시 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = currentDateTime.format(dateTimeFormatter); // "2024-04-13 15:30:00"
- now()
ZonedDateTime
💡
시간대를 고려한 날짜와 시간을 나타내며, 전 세계의 다양한 시간대에 따른 정확한 시간을 표현한다.
- 주로 전 세계 사용자의 지역 시간대에 맞춰 시간을 표시할 때 사용
- LocalDateTime과 유사하지만 특정 시간대의 정보를 포함하고 있다.
- 주요 메소드
- now()
- 현재 시스템 시간을 기반으로 한 특정 시간대의 인스턴스 생성
// 현재 시스템 시간을 서울 시간대로 가져오는 예시 ZonedDateTime currentZonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
- of(LocalDateTime, ZoneId)
- 주어진 날짜와 시간을 특정 시간대로 변환하여 인스턴스 생성
// LocalDateTime을 서울 시간대로 변환하는 예시 LocalDateTime localDateTime = LocalDateTime.of(2024, 4, 13, 15, 30); ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("Asia/Seoul"));
- withZoneSameInstant(ZoneId)
- 해당 시간을 다른 시간대로 변환
- 시간은 동일한 인스턴스를 나타내나, 시간대가 변경된다.
// 서울 시간대 -> 뉴욕 시간대로 변환 // zonedDateTime 객체가 서울 시간대로 되어 있다고 가정 ZonedDateTime newYorkTime = zonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York"));
- foramt(DateTimeFormatter)
- ZonedDateTime을 원하는 형식으로 문자열로 변환
// ZonedDateTime을 "yyyy-MM-dd HH:mm:ss z" 형식으로 출력하는 예시 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z"); String formattedDateTime = currentZonedDateTime.format(formatter); // "2024-04-13 15:30:00 KST"
- now()
Duration
💡
두 시간 사이의 지속 시간을 나노초의 정밀도로 나타내며,
주로 LocalTime이나, LocalDateTime
객체 간의 차이를 초 단위로 표현할 때 사용 (불변)
주로 LocalTime이나, LocalDateTime
객체 간의 차이를 초 단위로 표현할 때 사용 (불변)
- 주요 메서드
- Duration.ofSeconds()
- 주어진 초 수를 기반으로 한 Duration 인스턴스 생성
// 3600초(1시간)을 나타내는 Duration 인스턴스 생성 예시 Duration oneHour = Duration.ofSeconds(3600); LocalTime currentTime = LocalTime.now(); // 현재 시간 LocalTime nextHourTime = currentTime.plus(oneHour); // 현재 시간에 1시간을 더함 System.out.println("1시간 후의 시간: " + nextHourTime);
- Duration.ofMinutes()
- 주어진 분 수를 기반으로 한 Duration 인스턴스 생성
// 60분을 나타내는 Duration 인스턴스 생성 예시 Duration oneHour = Duration.ofMinutes(60); LocalTime currentTime = LocalTime.now(); // 현재 시간 LocalTime nextHourTime = currentTime.plus(oneHour); // 현재 시간에 60분을 더함 System.out.println("1시간 후의 시간: " + nextHourTime);
- between()
- 두 시간 사이의 차이를 계산하여 Duration 인스턴스 생성
// 두 시간 사이의 차이를 계산하는 예시 LocalDateTime startTime = LocalDateTime.of(2024, 4, 13, 10, 0); LocalDateTime endTime = LocalDateTime.of(2024, 4, 13, 12, 30); Duration duration = Duration.between(startTime, endTime); long hours = duration.toHours(); // 시간 단위로 계산 long minutes = duration.toMinutes(); // 분 단위로 계산 System.out.println("두 시간의 차이(시간 단위): " + hours + "시간"); // 시간단위로 2시간 System.out.println("두 시간의 차이(분 단위): " + minutes + "분"); // 분 단위로 150분
- Duration.ofSeconds()
Period
💡
두 날짜 사이의 기간을 년, 월, 일 단위로 나타내며,
주로 LocalDate
객체 간의 차이를 연, 월, 일 단위로 표현할 때 사용(불변)
주로 LocalDate
객체 간의 차이를 연, 월, 일 단위로 표현할 때 사용(불변)
- 주요 메서드
- Period.ofDays()
- 주어진 일 수를 기반으로 한 Period 인스턴스 생성
// 7일을 나타내는 Period 인스턴스 생성 예시 Period oneWeek = Period.ofDays(7); LocalDate currentDate = LocalDate.now(); // 현재 날짜 LocalDate nextWeekDate = currentDate.plus(oneWeek); // 현재 날짜에 7일을 더함 System.out.println("7일 후의 날짜: " + nextWeekDate);
- Period.ofMonths()
- 주어진 월 수를 기반으로 한 Period 인스턴스 생성
// 1개월을 나타내는 Period 인스턴스 생성 예시 Period oneMonth = Period.ofMonths(1); LocalDate currentDate = LocalDate.now(); // 현재 날짜 LocalDate nextMonthDate = currentDate.plus(oneMonth); // 현재 날짜에 1개월을 더함 System.out.println("1개월 후의 날짜: " + nextMonthDate);
- between()
- 두 날짜 사이의 차이를 계산하여 Period 인스턴스 생성
// 두 날짜 사이의 차이를 계산하는 예시 LocalDate startDate = LocalDate.of(2024, 4, 1); LocalDate endDate = LocalDate.of(2024, 4, 15); Period period = Period.between(startDate, endDate); int days = period.getDays(); // 일 수 int months = period.getMonths(); // 월 수 int years = period.getYears(); // 년 수 System.out.println("두 날짜의 차이(년): " + years + "년"); // 0년 System.out.println("두 날짜의 차이(월): " + months + "개월"); // 0개월 System.out.println("두 날짜의 차이(일): " + days + "일"); // 14일
- Period.ofDays()
최종 java.time 패키지 정리
- 날짜와 시간만 필요한 경우 : LocalDate , LocalTime
- 날짜와 시간 모두 필요하지만 시간대는 고려하지 않는 경우 : LocalDateTime
- 시간대를 고려해야 하는 경우 : ZoneDateTime
- 짧은 시간 간격 측정 : Duration
- 긴 시간 측정 : Period
728x90