정의
- 모든 클래스의 최상위 클래스
- java.lang.Object에 위치한다.
- 모든 클래스는 Object 클래스의 상속을 받아서 Object 클래스의 메서드를 @Override 가능하다. (final 메서드 제외)
Object 메서드의 종류
toString()
객체 정보를 String으로 바꾸어준다.
재정의해서 많이 이용된다.
public class MyDate{
int year;
int month;
int day;
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
return year + "." + month + "." + day;
}
}
equals()
두 객체의 동일함을 논리적으로 재정의가능하다.
본래는 물리적 동일함(두 객체의 메모리 주소를 비교)을 비교하지만
Override해서 사용자가 재정의할 수 있다.
cf) String에서 equals()를 쓰지 않고 ==를 사용하면 메모리 주소만 비교한다.
@Override
public boolean equals(Object obj) {
if (obj instanceof MyDate) {
MyDate date = (MyDate) obj;
return date.hashCode() == this.hashCode();
}
return false;
}
hashCode()
본래는 인스턴스가 저장된 VM의 주소를 반환한다.
사용자가 재정의해서 다른 멤버 변수를 리턴하게 만들 수 있으며 일반적으로 equals()에서 비교되는 멤벼 변수를 리턴한다.
@Override
public int hashCode() {
int ID = 0;
ID += (year - 1) * 365;
int[] days = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int prevMonth = month - 1;
for (int i = 0; i < prevMonth; i++) {
ID += days[i];
}
ID += day;
return ID;
}
clone()
객체의 복사본을 만든다.
객체지향 프로그래밍에서 정보 은닉을 위배할 수 있으므로 복제할 객체는 cloneable 인터페이스를 implements 해야 한다.
public class MyDate implements Cloneable {
int year;
int month;
int day;
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public MyDate clone() {
return this;
}
}
public static void main(String[] args) {
MyDate d1 = new MyDate(2021, 3, 15);
System.out.println(d1);
MyDate d2 = new MyDate(2019, 8, 28);
MyDate d3 = new MyDate(2021, 3, 15);
System.out.println(d1.equals(d2));
System.out.println(d1.equals(d3));
//// 클론하기
MyDate cloneDate = d1.clone();
System.out.println(cloneDate);
}
finalize()
객체가 힙 메모리에서 해체될 때 GC에서 호출되는 메서드이다. (C랑 다르게 JAVA는 GC가 알아서 메모리 해제해준다 ㅎ)
사용자가 직접 쓸일은 거의 없다.
'프로그래밍 언어 > java' 카테고리의 다른 글
[java] Class 클래스, 자바 리플렉션 (0) | 2021.03.18 |
---|---|
[java] String, Wrapper 클래스 (0) | 2021.03.18 |
[java] 인터페이스 다중 상속 (0) | 2021.03.12 |
[java] 인터페이스 (0) | 2021.03.12 |
[java] final, 템플릿 메서드 (0) | 2021.03.11 |
댓글