본문 바로가기
수업(국비지원)/Java

[Java] chap11 : 기본 API (패키지 클래스) - Object 클래스, hashCode(), toString()

by byeolsub 2023. 4. 16.
  • Object 클래스
 Object 클래스
   1. 모든 클래스의 부모클래스
   2. 모든 클래스의 객체는 Object 클래스의 객체를 가지고 있다. 
      => 모든 객체는 Object 타입으로 참조가 가능하다.
   3. 모든 틀래스의 객체는 Object 클래스의 멤버를 호출할 수 있다.
   
 equals 메서드 
    : 동일성 판단 메서드. 객체의 내용비교를 위한 메서드 
      객체의 내용의 동일성 판단을 위해서는 equals 메서드로 호출 해야함.
      Object 클래스에서는 == 연산자와 동일한 기능을 구현.
      내용비교(논리적 동등성)를 위해서는 오버라이딩이 필요함.
      참조형 객체인 경우 내용비교를 위해서는 ==  연산자 사용하지 말고 equlas 메서드로 비교.

 

📌

package chap11;

class Equal {
	int value;
	Equal(int value) {
		this.value = value;
	}
	//내용비교를 위하여 equals 메서드를 오버라이딩 필요
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Equal) {
			Equal e = (Equal)obj;
			return e.value ==value;
		} else return false;
	}
	//논리적인 동등성을 위하여 hashCode 메서드 오버라이딩
	@Override
	public int hashCode() {
		return value;
	}
	//내용 출력을 위한 toString() 메서드 오버라이딩
	@Override
	public String toString() {
		return "Equal[value="+value+"]";
	}
}
public class ObjectEx1 {
	public static void main(String[] args) {
		Equal e1 = new Equal(10);
		Equal e2 = new Equal(10);
		if(e1==e2) //참 : e1객체와 e2객체가 동일한 경우(내용 비교 불가)
			System.out.println("e1==e2: e1과 e2는 같은 객체임");
		else 
			System.out.println("e1!=e2: e1과 e2는 다른 객체임");
		// equals 메서드는 Object 멤버 메서드임
		//   => 모든 객체는 equals 메서드를 포함한다.
		// e1 객체의 내용과 e2 객체의 내용의 동일성 비교
		//  => equals 메서드를 오버라이딩 필요
		if(e1.equals(e2)) 
			System.out.println("e1.equals(e2): e1과 e2는 같은 내용의 객체임");
		else 
			System.out.println("!e1.equals(e2): e1과 e2는 다른 내용의 객체임");
	}
}

 


  • hashCode()
hashCode() : 원래의 의미는 객체를 구분하기 위한 참조값
             내용이 같다는 기능 => 논리적인 동등성.
               - equals 의 결과가 true 
               - hashCode 값이 동일함.
권장사항 : equals 메서드 오버라이딩을 하는 경우 hashCode 메서드도 함께 오버라이딩 하도록 권장함.

 

 📌

package chap11;

public class ObjectEx2 {
	public static void main(String[] args) {
		Equal e1 = new Equal(10);
		Equal e2 = new Equal(10);
		System.out.println(e1.hashCode());
		System.out.println(e2.hashCode());
		System.out.println(System.identityHashCode(e1)); //실제 e1의 HashCode 값 : 617901222
		System.out.println(System.identityHashCode(e2)); //실제 e2의 HashCode 값 : 1159190947
	}
}

  • toString()
toString() : 객체를 문자열로 리턴하는 메서드
             참조변수를 출력하면 자동으로 toString() 메서드가 호출됨.
             내용 출력을 위해 오버라이딩 필요.

Object 클래스 : 클래스명(패키지명 포함)@16진수해쉬코드로 출력되도록 구현됨.
         => 각각의 클래스에서 나의 내용을 출력하기 위하여 오버라이딩이 필요하다.  

 

📌

package chap11;

public class ObjectEx3 {
	public static void main(String[] args) {
		Equal e1 = new Equal(10);
		Equal e2 = new Equal(10);
		System.out.println(e1); //toString() 메서드 호출
		System.out.println(e2); //toString() 메서드 호출
	}
}