• Object 클래스
    • Object 클래스는 모든 자바 클래스의 최고 조상 클래스
    • 자바의 모든 클래스는 Object 클래스를 상속 받으므로 Object클래스의 메소드를 바로 사용 가능
    • 대표적으로 toString() 메소드, equals() 메소드 등
      • 예시) String a = "hello"; String b = "hello"; System.out.println(a.equals(b));
    • 그외 clone(), notify(), wait()등 총 11개의 메소드만으로 구성
  • Math 클래스
    • Math 클래스는 수학에서 자주 사용하는 상수들과 함수들을 미리 구현해 놓은 클래스
    • Math 클래스의 모든 메소드는 클래스 메소드(static method)
    • 주요메서드
      • random() 메소드
        • 0.0 이상 1.0 미만의 범위에서 임의의 double형 값을 하나 생성하여 반환
        • System.out.println((int)(Math.random() * 100)); // 0 ~ 99
      • abs() 메소드
        • 절댓값을 반환
      • floor(), ceil(), round() 메소드
        • 각각 내림, 올림, 반올림 하여 정수 반환
      • max() 메소드와 min() 메소드
        • 두 값을 비교하여 max, min 반환
      • pow(), sqrt() 메소드
        • 각각 제곱 연산, 제곱근 반환
  • Calendar 클래스
    • 날짜를 처리하기 위한 다양한 기능을 제공해주는 추상 클래스

    • Calendar 클래스의 모든 필드는 클래스 변수(static variable)이므로, 객체생성 없이 사용

    • 사용 예시

      Calendar time = Calendar.getInstance();

      System.out.println(time.getTime());

      System.out.println(time.get(Calendar.DAY_OF_MONTH));

      System.out.println(time.get(Calendar.HOUR_OF_DAY));

      System.out.println(time.get(Calendar.MINUTE));

    • 그러나 Calendar의 문제점으로 인해, java.time 패키지 사용이 대세

  • java.time 패키지
    • 주요클래스
      • LocalDate 클래스
        • 날짜를 표현할 때 사용
      • LocalTime 클래스
        • 시간을 표현할 때 사용
      • LocalDateTime
        • 날짜와 시간을 한 번에 표현. 가장 많이 사용
    • 주요메서드
      • now() 메소드
        • 현재의 날짜와 시간을 이용하여 새로운 객체를 생성
      • of() 메소드
        • 전달된 인수를 가지고 특정 날짜와 시간을 표현하는 새로운 객체를 생성
  • ChronoField 열거체(enum)
    • 날짜와 시간을 나타낼 때 사용하는 열거체
      • 특정한 숫자값을 get함수의 input값으로 주는데 사용
      • 열거체에 대해서는 추후 학습
    • 주요 열거체
      • YEAR, MONTH_OF_YEAR, DAY_OF_MONTH, DAY_OF_WEEK
      • AMPM_OF_DAY
        • 오전/오후
      • HOUR_OF_DAY
        • 시(0~23)
      • CLOCK_HOUR_OF_DAY
        • 시(1~24)
      • CLOCK_HOUR_OF_AMPM
        • 시(1~12)
      • DAY_OF_YEAR
        • 해당 연도의 몇 번째 날 (1~365, 윤년이면 366)
    • 사용 예시
      • LocalDateTime this_time = LocalDateTime.now() System.out.println("지금은 " + (this_time.get(ChronoField.YEAR))); System.out.println("지금은 " + (this_time.get(ChronoField.MONTH_OF_YEAR))); System.out.println("지금은 " + (this_time.get(ChronoField.AMPM_OF_DAY)));
  • 제네릭
    • 제네릭은 자바에서 타입을 미리 특정하지 않고 유연하게 다양한 타입을 처리할 수 있도록 도입한 프로그래밍 기능
    • 제네릭(Generic)은 타입(Type)의 매개변수화를 가능하게 함으로서 한 번 작성한 코드를 다양한 타입에 대해 사용가능하도록 해주는 기능
    • 제네릭 클래스(generic class) 생성 예시 class MyArray<T> { T name; void setName(T name) { this.name = name; } T getName() { return name; } } MyArray<String> st_arr = new MyArray(); MyArray<Integer> st_int = new MyArray();
      • 제네릭 클래스나 메서드의 타입을 파라미터화해서, 객체 생성 시에도 그 타입이 미리 정해져 있지 않아도 되므로, 다양한 타입으로 그때 그때 지정이 가능하므로 코드의 재사용성을 향상
      • 예제에서 사용된 'T'를 타입 변수(type variable)라고 하며, 임의의 참조형 타입을 의미. ’T'뿐만 아니라 어떠한 문자를 사용해도 상관없음
    • 특정 메서드에만 제네릭을 적용하는 제네릭 메서드 예시
      • public static <T> void sort(T[] array) { }
      • 반환타입왼쪽의 <T>는 메소드가 제네릭 타입 T를 사용할 것임을 선언
      • 메서드 내에 하나이상의 제네릭이 사용될 경우 반환타입 옆에 <제네릭타입> 선언후 사용
      • 클래스단위에 이미 제네릭이 선언돼 있으면 메서드에 표시할 필요X
    • 제네릭 타입소거
      • 제네릭의 타입소거란 제네릭의 타입을 컴파일 시점에 검사하고 런타임 시점에는 타입 소거시키는 java의 컴파일 방식
      • 장점
        • 제네릭 개념이 없던 이전 코드와의 호환성 유지
        • JVM의 복잡성을 줄여 성능 최적화
      • 단점
        • 런타임에 제네릭 타입 정보를 사용할 수 없으므로, 리플렉션을 통해 제네릭 타입을 추론하는 것이 불가능
        • 런타임 시점에는 제네릭 타입 정보가 없으므로, 필요에 따라 타입 캐스팅이 필요
  • Iterator<T> 인터페이스
    • 자바의 컬렉션 프레임워크는 컬렉션에 저장된 요소를 읽어오는 방법을 Iterator 인터페이스로 표준화
    • 예시) Set<String> mySet= new HashSet<>(); mySet.add("hello"); mySet.add("java"); Iterator<String> setIt = mySet.iterator(); while(setIt.hasNext()){ System.out.println(setIt.next()); }
    • 컬렉션 프레임워크 클래스 내에 Iterator 객체를 반환하는 iterator()메서드를 사용하여 iterator객체를 생성하고 이 객체를 통해 컬렉션에서 저장된 요소를 순환하여 read
    • Iterator의 주요 메서드
    • 향상된 for문과의 가장 큰 차이
  • Enum 클래스