삶 가운데 남긴 기록 AACII.TISTORY.COM
자바 API , Object 클래스 본문
자바 API documents
http://docs.oracle.com/javase/8/docs/api/
Object class
클래스는 extends를 생략하면 암시적으로 Object 클래스를 상속받습니다.
Object는 자바의 최상위 부모 클래스입니다.
equals()
객체가 동등한 지 비교합니다.
public class Member {
public String id;
public Member(String id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
//인수가 Member Type인지 확인
if(obj instanceof Member) {
//Member type으로 캐스팅
Member member = (Member)obj;
if(id.equals(member.id)) {
return true;
}
}
return false;
}
public static void main(String[] args) {
Member obj1 = new Member("blue");
Member obj2 = new Member("blue");
Member obj3 = new Member("red");
if(obj1.equals(obj2)) {
System.out.println("obj1 == obj2");
}else {
System.out.println("obj1 != obj2");
}
if(obj1.equals(obj3)) {
System.out.println("obj1 == obj3");
}else {
System.out.println("obj1 != obj3");
}
}
}
hashCode()
객체의 해시 코드는 객체의 메모리 번지를 이용해서 객체를 식별하기 위한 값을 말합니다.
그래서 해시 코드 값으로 비교를 하면 같은 객체인지 다른 객체인지 판별할 수 있습니다.
toString()
Object 클래스의 toString() 메서드는 객체의 해시 코드를 리턴합니다.
객체의 문자 정보를 해시 코드 말고 다른 정보를 리턴하도록 하려면 override 해서 사용합니다.
public class SmartPhone {
private String company;
private String os;
public SmartPhone(String company, String os) {
this.company = company;
this.os = os;
}
@Override
public String toString() {
return company + ", " + os;
}
public static void main(String[] args) {
SmartPhone myPhone = new SmartPhone("구글", "안드로이드");
String strObj = myPhone.toString();
System.out.println(strObj);
System.out.println(myPhone);
}
}
객체 소멸자 finalize()
참조하지 않는 객체는 Garbage Collector(이하 GC)가 힙 영역에서 자동으로 소멸시킵니다.
GC가 객체를 소멸하기 직전에 finalize()를 실행합니다.
GC는 메모리 상태를 보고 일부만 소멸시키며, CPU 사용량이 여유가 있을 때 실행되므로 finalize()가 실행되는 시점은 명확하게 알 수 없습니다.
객체가 소멸되기 전 마지막으로 사용한 자원을 close하고 싶거나 중요한 데이터를 저장하고 싶으면 finalize()를 override 해서 사용해도 되지만 GC의 실행 타이밍이 명확하지 않으므로 일반 메서드에서 명시적으로 자원을 해제 해주는 것이 좋습니다.
public class Counter {
private int no;
public Counter(int no) {
this.no = no;
}
@Override
protected void finalize() throws Throwable{
System.out.println(no + "객체의 finalize()가 실행 됨.");
}
public static void main(String[] args) {
Counter counter = null;
for(int i = 1; i <= 50 ; i++) {
counter = new Counter(i);
counter = null; //객체의 연결을 끊어서 Garbage로 만듦
System.gc(); //Garbage Collect 를 시스템에 요청
}
}
}
728x90
'DEV&OPS > Java' 카테고리의 다른 글
System 클래스 (0) | 2022.04.07 |
---|---|
java.util.Objects 클래스 (0) | 2022.04.07 |
예외 처리 (0) | 2022.04.06 |
익명 객체 (0) | 2022.04.05 |
중첩 클래스 중첩 인터페이스 (0) | 2022.04.05 |