본문 바로가기

study/java

자바/JAVA 자바 API

자바 API(Application Programming Interface): 자바에서 제공하는 클래스 및 인터페이스. 라이브러리 라고도 한다. 공식 문서를 통해 제공하는 API에 대한 정보를 얻을 수 있다.

 

 

Java Platform, Standard Edition Documentation - Releases

Java Platform, Standard Edition documentation, current and previous releases

docs.oracle.com

 

java.lang 패키지는 자바 프로그램의 기본적인 클래스를 담고 있다. 그리고 import 하지 않아도 java.lang이 제공하는 클래스와 인터페이스를 사용할 수 있다.

 

 

java.lang이 제공하는 클래스

  • Object : 자바의 최상위 부모 클래스. 모든 클래스는 Object 클래스의 자식이다.(명시하지 않아도 자동으로 상속받음) 따라서 Object 클래스의 메소드는 모든 자바 객체에서 사용 가능.
    • equals(Object obj); - 매개값과 객체가 같은지 비교한다. == 비교 연산자와 같은 결과가 나온다.
      재정의를 통해, 필드만 같더라도 true를 반환하도록 바꿀 수 있다.
      String 클래스의 경우 다른 객체여도 값이 같으면 true를 반환함.
    • hashCode(); - 객체를 식별하는 하나의 정수값이 리턴된다. 재정의에 의해 유일한 값이 아닐 수 있다. 매개 값은 없다.
      Object의 hashCode() 메소드는 인스턴스가 저장된 JVM의 주소를 10진수로 반환.
      재정의를 통해 두 객체가 동등한 지 비교할 때 사용할 수 있다. -> HashSet, Hashtable, HashMap 클래스는 equals() 메소드와 더불어 hashCode() 메소드로도 비교하기 때문이다.

      HashSet, Hashtable, HashMap 클래스가 객체를 비교하는 법:
      1. hashCode() 리턴 값을 비교한다.
      2. equals() 리턴 값을 비교한다.
      3. 1의 비교값이 true이고 2의 반환값이 true이면, 실제 메모리의 위치가 달라도 같은 객체로 본다.
    • finalize(); - 객체가 Heap 메모리에서 해제될 때 가비지 컬렉터에 의해 호출되는 메소드다.
    • getClass(); - 객체의 정보가 담긴 Class 를 반환한다.
    • clone(); - 객체를 복제하는 메소드다.
      이 메소드를 구현하는 클래스를 만드려면 Cloneable이라는 인터페이스를 구현하는 코드만 작성해주면 된다.
      private 멤버도 복사할 수 있어, OOP의 정보 은닉에 위배될 가능성이 있다. 따라서 인터페이스를 구현하는 코드가 있어야 한다.
      마크 인터페이스이기 때문에 따로 구현할 메소드가 없다. --> class Exam implements Cloneable
      프로토타입 객체를 복사할 때 유용하게 사용한다.
    • toString() - 객체가 갖고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드
      레퍼런스 변수를 출력하면, 자동으로 toString() 메소드가 호출된다.
      Overriding을 통해 유용하게 사용할 수 있다. 그러나 접근 제한자 public을 꼭 붙여야 한다.
      기본적으로 "클래스이름@16진수해시코드"의 문자열을 리턴한다. -> getClass().getName()+'@'+Integer.toHexString(hashCode)
      String 타입의 객체는 자기 자신을 그대로 리턴하고, File 타입의 객체는 경로값을 리턴한다
      System.out.println(strVar); 여기서 strVar는 strVar.toString()이 자동으로 호출되어 리턴값이 전달되는 것이다.
      일반 객체의 리턴값은 속한 패키지와 클래스, 식별자를 갖고 있다.
class Animal{
	public String toString(){
    	return "이것은 Animal 클래스의 toString() 메소드이다.";
    }
}

///
Animal ani = new Animal();
System.out.println(ani);

//결과
이것은 Animal 클래스의 toString() 메소드이다.
  • System 클래스: 자바가 운영체제의 기능을 사용하기 위한 클래스다. 정적필드와 정적메소드로 구성되어 객체 없이 사용 가능.
    • exit(): 매개값으로 0을 넣어 실행하면, JVM이 종료된다.(프로그램 종료)
    • nanoTime(), currentTimeMillis() : 현재 시간을 가져온다.
    •  identityHashCode(): 객체의 고유한 hashCode()를 리턴한다. Object의 hashCode()는 재정의되서 반환값이 중복될 수 있지만, 이 메소드는 객체의 고유한 값을 리턴한다.
  • Class 클래스: 클래스와 인터페이스의 메타데이터를 관리하는 클래스.(메타데이터: 타입이름, 파일 경로 정보, 필드 정보, 생성자 정보, 메소드 정보)
    • 다른 클래스를 가져와 Class 타입의 객체를 생성하면, 클래스의 필드, 이름 등등의 정보를 얻을 수 있다.
    • Class 객체는 파일 경로 정보를 갖고 있어, 이것을 활용해 다른 리소스의 파일의 경로를 얻을 수 있다.
    • 자세한 글
  • String 클래스: 다양한 생성자로 직접 String 객체를 만들 수 있다.
    • new로 사용해 선언하면 새로운 인스턴스를 생성하지만, new 없이 리터럴만 입력해서 선언하면 상수풀에 있는 문자열을 가리킨다.
    • equals(): String객체의 내용 비교 메소드.
    • indexOf(String var): 주어진의 문자열의 인덱스를 리턴.
    • concat(String var) : 문자열을 합쳐서 새로운 인스턴스를 생성한다.
    • replace(), subString() 등등.
  • Wrapper 클래스: 기본 타입의 값을 갖는 객체를 포장 객체로 만듦. 포장 객체로 만드는 과정을 박싱, 그 반대를 언박싱.
    • new 키워드로 생성하면 새로운 인스턴스를 생성하고, new 없이 리터럴만 입력해서 선언하면, 상수풀에 있는 인스턴스를 가리킨다.
    • 포장하면 값을 바꿀 수 없음.
    • 문자열을 기본 타입의 값으로 바꿀 수 있음.
    • Wrapper 객체끼리 비교하려면, ==, != 보다 equals() 메소드를 사용하는 것이 좋음. 값의 범위에 따라 비교 값이 다를 수 있기 때문.
  • Math 클래스: 수학 계산에 사용되는 메소드를 제공. 모두 정적 메소드로 제공되므로 객체 없이 사용 가능.
  • StringBuffer 클래스: String은 문자열을 결합할 때마다 새로운 객체를 만드는 반면, StringBuffer는 Buffer(가변적인 char 배열)를 이용해 문자열을 바로 결합할 수 있어 공간의 낭비가 적고, 속도가 빠르다.(가변 클래스 <---> 불변 클래스)

    비슷한 클래스로 StringBuilder 클래스가 있다. StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화가 보장되고, 단일 쓰레드 프로그래밍에선 String Builder를 사용하는 것이 좋다.
    • append(String var) : 문자열 붙이기
    • reverse() : 문자열 거꾸로
    • toString() : 문자열 반환

 

 

 

java.util이 제공하는 클래스

  • Scanner 클래스: 외부로부터 입력을 받는다. 사용자로부터 입력을 받을 수 있고, 파일의 저장된 데이터를 입력받을 수 있다.
  • Date 클래스: 날짜를 표현하는 클래스. SimpleDataFormat 클래스와 함께 이용해 원하는 형태의 문자열로 반환할 수 있다.
  • Calendar 클래스: 달력을 표현하는 클래스. OS의 날짜와 시간을 다양하게 얻을 수 있다. 추상 클래스이므로 getInstance() 메소드로 하위 객체를 얻는다.
  • StringTokenizer: 토큰은 문법적으로 더 이상 나눌 수 없는 요소이다. 토큰은 구분자로 나눠 얻을 수 있다. 예를들어 "2021-01-13"에서 구분자를 '-'로 할 때, 토큰은 2021, 01, 13이 된다. StringTokenize의 매개변수로 문자열과 구분자를 전달하면, 토큰을 얻을 수 있다.
  • TreeSet: Set은 집합의 형태로 객체를 저장하는 방식이다. 요소를 저장할 때, 순서가 없고 요소의 중복을 허락하지 않는다. Set의 대표적 형태로는 TreeSet(정렬)과 HashSet(비정렬)이 있다. TreeSet은 요소를 정렬해서 보여준다.
  • Map, HashMap: Map은 키와 값을 쌍으로 객체를 저장하는 방식이다. Map의 대표적인 형태로는 TreeMap(정렬)과 HashMap(비정렬)이 있다. 

 

 

java.time이 제공하는 클래스. Date, Calendar 클래스가 있지만, JDK8 이후로 time 패키지로 많은 부분이 대체되었다.(고 한다)

  • LocalDate, LocalTime, LocalDateTime 클래스: 각각 날짜, 시간, 날짜와 시간을 다루는 클래스다. 다양한 메소드들로 형식 문자열을 얻을 수 있고, 날짜와 시간 차이를 구할 수도 있다.(자세한건 docs.oracle로)

 

'study > java' 카테고리의 다른 글