[JAVA] 이것이 자바다 - 기본 API 클래스(1)
자바 API 도큐먼트
- API는 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음을 말한다. ex) String 클래스, System 클래스
- API 도큐먼트는 쉽게 API를 찾아 이용할 수 있도록 문서화한 것을 말한다.
- 💡 API Document
java.lang과 java.util 패키지
java.lang 패키지
- java.lang 패키지는 자바 프로그램의 기본적인 클래스를 담고 있는 패키지이다.
- java.lang 패키지에 있는 클래스와 인터페이스는 import없이 사용할 수 있다.
- 주요 클래스
Object 클래스
- 클래스를 선언할 때 다른 클래스를 상속받지 않으면 자동으로 Object 클래스를 상속받게 된다.
- Object는 자바의 최상위 부모 클래스이며 모든 클래스는 Object 클래스의 자식,자손 클래스이다.
객체 비교(equals())
- equals() 메소드는 비교연산자인 ==과 동일한 결과를 리턴한다.
- String 객체의 equals() 메소드는 기존 메소드를 재정의해서 String 객체의 번지를 비교하는 것이 아니라 문자열이 동일한지를 비교한다.
객체 해시코드(hashCode())
- 객체 해시코드란 객체를 식별할 하나의 정수값을 말한다.
- Object의 hashCod()는 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체마다 다른 값을 가지고 있다.
- 논리적 동등비교 시 hashCode() 오버라이딩의 필요성
- 컬렉션 프레임워크의 HashSet, HashMap, Hashtable과 같은 클래스는 두 객체가 동등한 객체인지 판단할 때 아래의 과정을 거친다.
- 컬렉션 프레임워크의 HashSet, HashMap, Hashtable과 같은 클래스는 두 객체가 동등한 객체인지 판단할 때 아래의 과정을 거친다.
public class Key{
public int number;
public Key(int number){
this.number = number;
}
@Override
public boolean equals(Object obj){
if(obj instanceof Key){
Key compareKey = (key)obj;
if(this.number == compareKey.number){
return true;
}
}
return false;
}
}
public class KeyExample{
public static void main(String[] args){
// Key 객체를 식별키로 사용해서
// String 값을 저장하는 HashMap 객체 생성
HashMap<key,String> hashMap=new HashMap<key, String>();
// 식별키 "new Key(1)"로 "홍길동" 저장
// new로 Key 생성자에 매개값을 1로 주고 새로운 객체를 생성함
hashMap(new Key(1), "홍길동");
// 식별키 "new Key(1)"로 "홍길동" 읽기
String value = hashMap.get(new Key(1));
System.out.println(value);
// hsashCode()가 같지 않기 때문에 결과는 null
}
}
// hashCode()를 재정의해서 같은 해시코드값 리턴하기
public class Key{
...
@Override
public int hashCode(){
return number;
}
}
객체 문자 정보(toString())
- Object 클래스의 toString()은 객체를 문자열로 표현한 값을 리턴한다.
- 기본적으로 Object 클래스의 toString()은 "클래스명@16진수해시코드"로 구성된 문자 정보를 리턴한다.
- System.out.println(클래스)를 리턴하면 자동으로 클래스.toString()을 호출해 리턴값을 얻은 후 출력한다.
객체 복제(clone())
- 객체 복제는 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성한다.
- 객체를 복제하는 이유는 원본 객체를 안전하게 보호하기 위해서이다.
- Object의 clone()은 자신과 동일한 필드값을 가진 얕은 복제된 객체를 리턴한다.
- clone()으로 객체를 복제하려면 원본 객체는 반드시 Cloneable 인터페이스를 구현해야 한다.
- 얕은 복제(thin clone)
- 단순히 필드값을 복사해서 객체를 복제하는 것
- 기본 타입일 경우 값 복사, 참조 타입일 경우 객체의 번지 복사
- 깊은 복제(deep clone)
- 깊은 복제란 참조하고 있는 객체도 복제하는 것을 말한다.
- 깊은 복제를 하려면 Object의 clone()을 재정의해서 참조 객체를 복제하는 코드를 직접 작성해야 한다.
public class Member implements Cloneable{
public String name;
public int age;
public int[] scores;
public Car car;
public Member(String name, int age, int[] scores, Car car){
this.name = name;
this.age = age;
this.scores = scores
this.car = car;
}
@Override
protected Object clone() throws CloneNotSupportedException{
// 얕은 복사를 해서 name, age 복사
Member cloned = (Member)super.clone();
// scores 깊은 복제
cloned.scores = Arrays.copyOf(this.scores
, this.scores.length);
// car 깊은 복제
cloned.car = new Car(this.car.model);
// 깊은 복제된 Member 객체 리턴
return cloned;
}
public Member getMember(){
Member cloned = null;
try{
cloned = (Member) clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return cloned;
}
}
객체 소멸자(finalize())
- GC는 참조하지 않는 배열이나 객체를 소멸시키기 전에 finalize()를 실행시킨다.
- Object의 finalize()는 기본적으로 실행 내용이 없기 때문에 객체 소멸전 사용했던 자원을 닫고 싶거나 중요한 데이터를 저장하고 싶다면 finalize()를 재정의할 수 있다.
- GC는 메모리의 상태를 확인하고 일부 객체를 무작위로 소멸시키고 구동 시점이 일정하지 않기 때문에 되도록 사용하지 않는 것이 좋다.
Objects 클래스
- Objects 클래스는 객체 비교, 해시코드 생성, null 여부, 객체 문자열 리턴 등의 연산을 수행하는 정적 메소드로 구성된 Object의 유틸리티 클래스이다.
객체 비교(compare(T a, T b, Comparator< T >c))
- compare(T a, T b, Comparator< T >c)는 두 객체를 비교자(Comparator)로 비교해서 int 값을 리턴한다.
- Comparator< T >는 제네릭 인터페이스 타입으로 두 객체를 비교하는 compare(T a, T b)가 정의되어 있다.
- a가 b보다 작으면 음수, 같으면 0, 크면 양수를 리턴하도록 구현 클래스를 만들어야 한다.
동등 비교(equals()와 deepEquals())
- Object.equals(Object a, Object b)는 두 객체의 동등을 비교하는데 다음과 같은 결과를 리턴한다.
- 만약 a와 b가 모두 null이라면 true를 리턴한다.
- deepEquals(Object a, Object b) 역시 두 객체의 동등을 비교하는데 a와 b가 서로 다른 배열일 경우 항목 값까지 모두 같다면 true를 리던한다.
- Arrays.deepEquals(Object[] a, Object[] b)와 동일하다.
해시코드 생성(hash(), hashCod())
- Object.hash(Object ...values)는 매개값으로 주어진 값들을 이용해 해시코드를 생성하는 역할을 하는데, 주어진 매개값들로 배열을 생성하고 Arrays.hashCode(Object[])를 호출해서 해시코드를 얻고 이 값을 리턴한다.
- Object.hashCode(Object o)는 매개값으로 주어진 객체의 해시코드를 리턴하기 때문에 o.hashCode()와 리턴값이 동일하다.
- 매개값이 null이면 0을 리턴한다.
널 여부 조사(isNull(), nonNull(), requireNonNull())
- Object.isNull(Object obj)는 매개값이 null인 경우 true를 리턴한다.
- nonNull(Object obj)은 매개값이 not null인 경우 true를 리턴한다.
- requireNonNull()은 다음 세가지로 오버로딩 되어있다.
객체 문자 정보(toString())
- Object.toString()은 객체의 문자 정보를 리턴한다.
- 첫번째 매개값이 not null이면 toString()으로 얻은 값을 리턴하고 null이면 "null" 또는 두번째 매개값인 nullDefault를 리턴한다.
Author And Source
이 문제에 관하여([JAVA] 이것이 자바다 - 기본 API 클래스(1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@3hee_11/이것이-자바다-기본-API-클래스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)