Object 클래스는 모든 클래스의 최고 조상 클래스라고 이전 포스팅에서 이야기했다. 그리고 모든 클래스가 공통적으로 상속받는 이 Object 클래스에는 유용한 메서드들이 많이 있고, 이를 필요에 따라 오버라이딩하여 자신이 만든 클래스에 맞게 수정해서 사용하는 것 또한 가능하다.
Object 클래스의 toString 메서드는 기본적으로 주소값을 출력해주는 역할을 한다. 때문에 toString 메서드를 오버라이딩하지 않은 클래스에 대해 toString 메서드를 콜하면 주소값이 출력된다.
또한 이 toString 메서드는 생략하더라도 다음과 같이 출력시 자동으로 호출된다.
System.out.println(Count) // Count 클래스의 주소가 출력됨
Object 클래스의 equals는 주소값을 가지고 비교해서 true/false를 반환한다. 문자열 비교 시 이 equals를 사용하면 내용이 같은지에 따라 true/false가 리턴되는데, 이처럼 내용에 따라 참 거짓이 판별된다면 해당 클래스에서는 equals 메서드가 오버라이딩되어 있다는 사실을 짐작할 수 있다.
객체를 생성하면 이 객체는 heap 영역에 생성되고, 참조값이 변수에 저장된다.
그리고 이 변수에 다른 참조값을 저장하여 더 이상 "토끼" 객체를 가리키는 변수가 없어진 상황에 객체를 지우는 상황이다.
그리고 이렇게 더 이상 자신을 참조하는 참조 변수가 없어진 객체들은 자바의 가비지 콜렉터가 관리되고 제거된다.
그리고 이렇게 객체들이 가비지 콜렉터에 의해 제거되기 전에 해야할 작업들(시스템 자원 할당의 해제와 같은)을 지정해두는 곳이 finalize 메서드이며, 가비지 콜렉터에 의해 자동으로 호출된다.
이 finalize() 또한 원형은 Object 클래스에 정의되어있고, 이를 오버라이딩하여 사용한다.
protected void fianlize(){
...
}