본문 바로가기
프로그래밍 언어/java

[java] Object 클래스

by m2162003 2021. 3. 18.

정의

- 모든 클래스의 최상위 클래스

- 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

댓글