개발 일기

모든 클래스의 부모 클래스는 Object 다 본문

카테고리 없음

모든 클래스의 부모 클래스는 Object 다

flow123 2022. 3. 10. 13:05

자바의 신 12장. 

 

Object 클래스에서 가장 많이 사용되는 메서드는 toString()이다.

package c.inheritance; 

public class ToString {
  public static void main(String args[]) {
  ToString thisObject = new ToString();
  thisObject.toStringMethod(thisObject);
  System.out.println("here is method2"); 
  thisObject.toStringMethod2(); 
  }
  
  public void toStringMethod(Object obj) {
  System.out.println(obj);
  System.out.println(obj.toString());
  System.out.println("plus "+obj);
  }
  
  public void toStringMethod2() {
  System.out.println(this);
  System.out.println(toString());
  System.out.println("plus "+this);
}

}

 

컴파일하고 실행해보면, toStringMethod(Object obj)와 toStringMethod2() 모두 결과 같다. 

this는 자기자신을 의미하기 때문에 굳이 이 예제에서는 매개변수로 Object obj 을 따로 넘겨줄 필요가 없다. 

 

이렇게 하면 hashcode 값이 나오기 때문에, toString() 메서드를 overriding 해줘야 한다. 

 

toString 클래스를 오버라이드 해보자. 

  public String toString() {
  return "ToString class"; 
  }

 

 

Object 를 비교할 때, ==,!= 를 사용하면 객체의 주소값을 비교하게 된다. 객체의 값 자체를 비교하려면 equals 를 사용해야 한다. 

  public void equalMethod2() {
    MemberDto obj1 = new MemberDto("Sangmin"); 
    MemberDto obj2 = new MemberDto("Sangmin");
    if(obj1.equals(obj2)) {
      System.out.println("obj1 and obj2 is same");
      } else {
     System.out.println("obj1 and obj2 is not same");
        }
    }

생성자와 구성요소가 같은데도, equals 를 통과하지 못하는 이유는 equals()메서드를 따로 오버라이딩 하지 않아서이다. 오버라이딩 하지 않았을 때, equals() 메서드에서는 hashcode() 값을 비교한다 - 객체 주소 값. 

출처: 자바의 신 12장 

Comments