2 minute read

★Object클래스는 모든 클래스의 최상위 클래스이다. 명시적으로 상속하지 않아도 이미 상속이 되어 있다.

★Object클래스의 기본 메소드 1 : toString() : 클래스명@식별번호가 기본적으로 출력되며 변경가능. 출력할 때 toString을 쓰지 않아도 자동으로 toString해줌

@Override
public String toString() {
	return super.toString() + ", " + hashCode() + ", 이름 : " + name + ",
	 나이 : " + age + ", 생년월일 : " + format.format(birthday.getTime());
}

★Object클래스의 기본 메소드 2 : clone() : 객체를 복제하며 Object를 반환하므로 다운 캐스팅해서 사용한다. 기본적으로 사용은 가능한 함수이지만 Cloneable인터페이스를 구현한 클래스만 복제할 수 있다. 이 인터페이스는 빈 인터페이스이며 자바에게 복제가능한 클래스란걸 알려주기위한 구분 인터페이스이다.

★Object클래스의 기본 메소드 3 : equals() : 비교할때 사용, 비교방법을 달리 하려면 여기서 오버라이드

★객체의 3가지 비교법

  1. ”==”연산은 피연산자가 기본자료형인 경우는 값이 같은지를 비교, 그 외의 객체라면 주소값이 같은지를 비교한다.
  2. Object.equals()함수는 디폴트로 “==” 연산을 실행하도록 되어있으므로 주소값이 다르면 false를 반환하지만 개발자의 의도에 따라 자유롭게 설정할 수 있다. 함수의 주소값이 아니더라도 내용이 같다면 같은 객체로 할수 있으며 이걸 ‘equality(동등성) 비교’라고 한다.
  3. hashCode를 이용 : hashCode는 두 객체가 동일한 객체인지를 판단한다. ‘identity(동일성) 비교’. equals를 재정의 할 때는 hashCode를 함께 재정의 해줘야 부작용이 없다. equals만 정의해서 두 객체가 같다고 판단 되었는데 두 객체가 hashCode가 다른경우 중복을 자동으로 없애주는 Set, HashTable, HashMap과 같은 Collection객체에 넣었을 때 중복되어 저장되어버리는 경우가 생긴다. 이런 Collection객체들은 hashCode()를 이용해서 객체의 중복성을 검사한다. 즉, equals()가 true인 두 객체의 hashCode는 같아야 한다. 또한 equals에서 비교하는데 사용한 파라메터들은 hashCode()에서도 빠짐없이 사용해줘야 한다. [equals]를 재정의할 때는 일반 규약을 따르자 equals 메서드는 재정의하기 쉬워 보이지만 실수할 여지가 많다. 만약 재정의 하지 않는다면 그 경우에는 자기 자신하고만 같다. 만약 아래 조건이 부합한다면 그래도 된다.
    1. 각각의 객체가 고유하다.
    2. 클래스에 논리적 동일성 검사 방법이 있건 없건 상관 없다.
    3. 상위 클래스에서 재정의한 equals가 하위 클래스에서 사용하기에도 적합하다.
    4. 클래스가 private 또는 packing-private선언 되고 equals메서드를 호출할 일이 없다.

    equals 메서드는 동치 관계를 구현한다.

    1. 반사성 : null이 아닌 참조 x가 있을때 x.equals(x)는 true를 반환한다.
    2. 대칭성 : null이 아닌 참조 x와 y가 있을 때 x.equals(y)는 y.equals(x) 가 true일때만 true를 반환한다.
    3. 추이성 : null이 아닌 참조 x,y,z가 있을 때 x.equals(y)가 true이고 x.equals(z)가 true면 x.equals(z)도 true이다.
    4. 일관성 : null이 아닌 참조 x,y가 있을 때 equals 통해 비교되는 정보에 아무 변화가 없다면 호출 결과는 횟수에 상관 없이 항상 같아야 된
    5. null 아닌 참조 x에 대하여 x.equals(null)은 항상 false이다.
@Override
public boolean equals(Object obj) {
	SomeClass sc = (SomeClass)obj;
	if (name.equals(sc.getName()) && age == sc.getAge()) {
		return true;
	}
	return false;
}

★Object클래스의 기본 메소드 4 : hashCode() : 메모리에서 가진 hash주소 값을 반환해준다. 기본적으로 hash는 서로 다른 객체가 같은 값을 갖는 경우도 있다. 하지만 hash함수를 쓰는 Collection객체 등이 있으므로 함께 사용하는것. hashCode() 와 관련된 규약

  1. equals() 로 비교시 두개의 오브젝트가 같다면, hashCode() 값도 같아야 한다.
  2. equals() 로 비교시 false 라면, hashCode() 값은 다를수도, 같을수도 있다. 그러나 성능을 위해서는 hashCode() 값이 다른것이 낫다. 그래야 해싱 알고리즘으로 Set 에 해당 오브젝트가 존재하는지 아닌지 빠르게 검색할 수 있다.
  3. hashCode() 값이 같다고 해서, equals()가 true 를 리턴하는 것은 아니다. 해싱 알고리즘 자체의 문제로, 같은 해시값이 나올 수 있다.

★Object클래스의 기본 메소드 5 : finalize() : 객체가 소멸될 때 호출된다. 커스텀 안하기를 권유되고있음 }

Categories:

Updated: