TIL #2 [Java] Object 탐구!

eunseo·2021년 8월 3일
1

TIL

목록 보기
2/9
post-thumbnail

✔ 자바 Object 클래스 정리 - toString(), equals(), hashCode()

쉽게 배우는 자바 프로그래밍

  • 자바에서 모든 최상위 클래스는 java.lang 패키지에 있는 Object 클래스이다.
  • 명시적인 부모 클래스가 없다면 Object 클래스를 직접 상속하는 클래스이므로 다음 두 코드의 실행 결과는 같다.
public class SomeClass{}
public class SomeClass extends Object{} 

Object 클래스가 제공하는 주요 메서드 중에서 toString(), equals(), hashCode() 에 대해 알아보자!

👉 toString()

class Mouse{
	String name;
    
    public Mouse(String name){
    	this.name = name;
    }
}

class Keyboard{
	String name;
    
    public Keyboard(String name){
    	this.name = name;
    }
    
    public String toString(){
    	return "키보드입니다.";
    }
}
public class ObjectMethodDemo{
    public static void main(String[] args){

    	Mouse m1 = new Mouse("Logitech");
    	keyboard k1 = new Keyboard("Microsoft");
    
    	System.out.println(m1.toString()); //Mouse@28a418fc
    	System.out.println(m1); //Mouse@28a418fc
    
    	System.out.println(k1.toString()); //키보드입니다
    	System.out.println(k1); //키보드입니다. 
    
    
	}

}

Mouse 클래스는 Object 클래스에서 물려받은 메서드를 그대로 사용하지만, Keyboard 클래스는 오버라이딩해서 사용한다.

Mouse는 Object 클래스에서 물려받은 toString()의 결과로서 객체의 문자 정보를 반환한다.

객체 자체를 출력하면 객체의 toStirng()메서드의 결과를 출력한다는 것을 새로 알게 되었다!

Keyboard는 toString() 메서드를 오버라이딩 했으므로 키보드입니다가 출력된다.

👉 equals()

class Mouse{
	String name;
    
    public Mouse(String name){
    	this.name = name;
    }
}

class Keyboard{
	String name;
    
    public Keyboard(String name){
    	this.name = name;
    }
    
    public boolean equals(Object obj){
    	if(obj instanceof Keyboard){
        	Keyboard k = (keyboard) obj;
            if(name.equals(k.name))
            	return true;
        }
        
        return false;
    }
}
public class ObjectMethodDemo{
    public static void main(String[] args){

    	Mouse m1 = new Mouse("Logitech");
        Mouse m2 = new Mouse("Logitech");
        
    	keyboard k1 = new Keyboard("Microsoft");
        keyboard k2 = new Keyboard("Microsoft");
        
        
        System.out.println(m1.equals(m2)); //false
        System.out.println(k1.equals(k2));//true

	}

}

Mouse 클래스는 Object 클래스에서 상속받은 equals()메서드를 사용한다. 따라서 내용이 동일하더라도 false를 반환한다.

Keyboard 클래스는 equas() 메소드를 오버라이딩 했기 때문에 true를 반환한다.

👉 hashCode()

  • Object의 hashCode() 메서드는 객체의 메모리주소를 사용해 해시 값을 반환한다.
  • hashCode는 두 객체가 같은 객체인지 확인하는 메서드이다.
String s = new String("hi");
System.out.println(s.hashCode()); //3329
s = s + "!";
System.out.println(s.hashCode()); //103232

String은 불변하기 때문에 ! 를 더하면 다른 객체이다.
따라서 hashCode가 다른 것을 볼 수 있다.

https://velog.io/@eunseo2/JAVA-StringBuffer-%EC%99%9C-%EC%93%B0%EB%8A%94%EA%B0%80
=> String에 대해서 더 알고 싶으면 위 링크로 GoGo!

profile
backend developer

0개의 댓글