본문 바로가기
JAVA

java.lang과 java.util 패키지

by 융디's 2024. 4. 26.
728x90
java.lang과 java.util 패키지

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()
      • 해당 객체에 대기 중인 모든 스레드를 깨운다.
      • 모든 스레드가 동시에 실행되도록 하는 경우에 사용

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

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

정적 또는 거의 변경되지 않는 문자열 : 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.log(double a)
      • 자연 로그 함수
    • Math.exp(double a)
      • 지수 함수
  • 랜덤 수 생성
    • Math.random()
      • 0과 1 사이의 난수를 생성하며, 0은 포함 1은 포함하지 않는 double 반환
  • 반올림 및 정수 변환
    • Math.round(double a)
      • 소수를 반올림정수 반환
    • Math.ceil(double a)
      • 주어진 값보다 크거나 같은 최소 정수 반환
    • Math.toIntExact(long value)
      • long 값을 int 값으로 변환하며, 오버플로우 발생 시 예외 발생

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.getenv()
      • 시스템의 환경 변수에 접근하여 맵 형식으로 반환
    // 시스템의 환경 변수 중 JAVA_HOME 값을 가져옴
    String javaHome = System.getenv("JAVA_HOME");
    System.out.println("JAVA_HOME: " + javaHome);
  • 시스템 프로퍼티 접근
    • 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.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.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.exit(int status)
      • 현재 실행 중인 java 가상 머신을 종료
      • 인수로 전달받은 상태 코드를 반환하며, 상태 코드 0은 정상 종료를 나타낸다.
      • 종료 코드를 사용하여 프로그램이 예상대로 종료되었는지 확인 가능
        • 종료 코드는 시스템에 따라 다르나, 일반적으로 0은 성공 그 외는 오류
// 시스템 종료 예시
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
    }

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()
      • 객체를 문자열로 표현한 값을 반환하며 일반적으로 날짜와 시간이 포함
// 현재 시간 생성
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네?
      나중에 문제가 생기면 실체 객체만 갈아끼우면 해결 되네?
  • 복잡한 날짜와 시간 계산, 시간대 변환, 윤년 계산 등을 수행할 때 유용
  • 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); // 한 달을 올림

java.time에서 자주 사용하는 클래스

💡
날짜와 시간을 다루는 새로운 API를 제공하며, 기존의 java.util.Datejava.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"

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"

Duration

💡
두 시간 사이의 지속 시간을 나노초의 정밀도로 나타내며,
주로 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분

Period

💡
두 날짜 사이의 기간을 년, 월, 일 단위로 나타내며,
주로 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일

최종 java.time 패키지 정리

  • 날짜와 시간만 필요한 경우 : LocalDate , LocalTime
  • 날짜와 시간 모두 필요하지만 시간대는 고려하지 않는 경우 : LocalDateTime
  • 시간대를 고려해야 하는 경우 : ZoneDateTime
  • 짧은 시간 간격 측정 : Duration
  • 긴 시간 측정 : Period

728x90

'JAVA' 카테고리의 다른 글

컬렉션 프레임워크  (1) 2024.04.27
제네릭  (1) 2024.04.26
내부 클래스  (0) 2024.04.25
자동 리소드 닫기  (0) 2024.04.25
예외 처리  (1) 2024.04.25