자바의 Object Class

    자바의 Object Class


    • Object Class는 자바의 모든 클래스의 최상위 클래스다. 모든 자바의 클래스는 Object Class를 상속받는다. (컴파일러가 자동으로 Object 선언시 extends Object를 추가한다)
    • 모든 클래스는 Object Class의 일부 메서드를 Override를 재정의 해서 사용할 수 있다.

     

    Object Class의 주요 재정의 메서드


    주요 재정의 메서드를 재정의 하기 전에 사용하는 Student Class의 멤버변수는 아래와 같음.

    // Cloneable한 클래스를 구현할 것이기 때문에 에노테이션을 달아준다.
    public class Student implements Cloneable{
    	String studentName;
    	int studentId;
    	
    	public Student(String studentName, int studentId) {
    		this.studentId = studentId;
    		this.studentName = studentName;
    	}
    }

    1. toString() 

    • Object에서는 인스턴스를 찍었을 때 "클래스명@16진수" 해쉬코드를 반환해준다. 이 용도로는 많이 사용되지 않고, 주로 인스턴스에 관련된 중요한 정보를 리턴해주는 용으로 사용된다.
    @Override
    public String toString() {
    	return "StudentName : " + studentName + "StudentId : " + studentId; 
    }

    2. hashCode() :  equals 메서드와 한쌍

    • Object 클래스에서는 객체가 저장되는 힙메모리의 해쉬값(주소값)을 반환해준다. HashCode가 같으면 같은 객체라고 인식을 한다. 재정의되는 클래스에서 사용될 때는 논리적 해쉬값이 같으면 같다는 것을 구현해주는 방식으로 사용된다. 예를 들어 사번이 같으면 같은 사람인 것처럼 재정의 되었을 때는 물리적 주소(해쉬값) 대신 논리적 주소가 같은지를 확인해준다. equals()와 hashCode()는 한쌍으로 재정의가 필요하다.
    @Override
    public int hashCode() {
    	return studentId;
    }

    3. equals()  : hashCode() 메서드와 한쌍

    • 두 인스턴스가 같은지를 확인해주는 메서드다. Object 클래스에서는 해쉬값이 같으면 같다고 한다. 일반 클래스에서 재정의해서 사용할 경우, 논리적 해쉬값을 설정하고 그 해쉬값이 같으면 같다/다르다를 반환해주면 된다.
    • Object 클래스의 객체를 받는 메서드를 재정의 하기 때문에 Object Type의 obj를 다운캐스팅 해주는 과정이 필요하다.
    public boolean equals(Object obj) {
    	// 같은 형인지 확인하고
    	// 다운 캐스팅 한다.
    	if (obj instanceof Student) {
    		Student temp = (Student)obj;
    		return this.studentId == temp.studentId ? true : false; 
    	}
    	else return false;
    }

    4. clone()

    • Object 클래스에서는 원본의 멤버 변수 + 나머지가 똑같은 인스턴스를 만든다. 
    • Clone은 객체 지향의 주요 성질인 정보은닉 관점에서 위배된다. 따라서, 클래스에 Cloneable interface를 구현했다는 것을 명시해주어야 한다. (implements Cloneable).
    protected Object clone() throws CloneNotSupportedException {
    	return super.clone();

     

    참고 : Hash 관련


    Hash Value = Hash Function(Key)

    Key는 일정하게 주어진다. 예를 들면 사번같은 것이다. 그런데 예를 들어 사번을 2자리 단위로 표기한다고 했는데, 직원이 많아져 300명의 사원이 있다고 가정해보자. 컴퓨터 입장에서는 22번, 122번, 222번은 동일한 사번이다. 왜냐하면 셋다 22라는 Key를 가지기 때문이다.

    컴퓨터는 이 22라는 Key에 대해서 Hash 값을 가지고, 그 Hash값을 찾아들어가서 그곳에 자료를 저장한다. 이 때 같은 Key 값을 가지더라도 다른 Hash를 가져서 자료를 저장하기 위해 주어지는 것이 Hash Function이다. 위의 Hash 관련 내용으로 이걸 알아두면 좋을 것 같다. 

    댓글

    Designed by JB FACTORY