Dipa's document :: [JAVA] Object클래스 - equals()

블로그에 빨리올려야지 했는데..벌써 한달이 가까운시간을 안하고 이제서야 올린다,,,ㅡㅡ 반성중(_ _)

이번에는 Object클레스에 대해서 공부해보고자 한다.

Object클래스는 Java.lang패키지에 있는 클래스로 Java.lang패키지는 자바 프로그램의 기본적인 클래스를 담고있는 패키지 이다. 그중에서도 Object클래스 자바 클래스의 최상이 클래스 이기떄문에 중요한 클래스라고 생각을 한다.

따라서, 클래스를 선언을 하고 extends를 통해서 다른 클래스를 상속을 받지 않으면, 암시적으로 java.lang패키지의 Object클래스를 상속을 받게 된다. 

자바의 모든 클래스는 Object클래스의 자식클래스이자 자손 클래스이다. Object클래스는 메소드들로만 구성이 되어 있는데 이 메소드들은 모든 클래스가 Object클래스를 상속을 받고 있으므로 모든 클래스에 사용이 가능하다.

Object 클래스의 메소드에는 equals(), hashCode(), toString() 등등이 있다.


* equals()

 결론부터 예기를 하면 Object 클래스의 equals()는 '==' 연산자와 동일한 기능을 한다. 같은 객체일 경우에는 true를 리턴을 하고, 객체가 다를경우에는 false를 리턴을 한다. 그렇다면 여기서 의문을 가지는게,,, 왜 String의 문자 비교를 할떄는 equals()를 쓰는지가 의문일 것이다.

그것은 String클래스가 Object클래스의 equals()메소드를 Override(재정의)를 하였기 떄문이다. String클래스의 equals()는 Override를 통해서 논리적 동등 비교를 하는 것이다.(논리적 동등 비교란? 객체가 같은지 다른지를 비교를 하는 것이 아닌 객체가 저장하고 있는 데이터를 비교를 하는 것)

public class ObjectEqualsMethod {

	public static void main(String[] args) {
		Object object01 = new Object();
		Object object02 = new Object();

		System.out.println(object01 == object02);
		
		System.out.println(object01.equals(object02));
	}

}

위에 코드를 보면 Object의 equals()메소드는 '=='연산자와 같다는 것을 알수가 있다. 

그렇다면 String클래스를 한번 살펴 보자.

   public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

위의 코드는 Object클래스의 equals()메소드를 Override를 한 것이다. 처음 조건문에서는 객체를 비교를 하는 조건문이고 두번째 조건문에서는 String클래스가 맞으면 객체 안의 데이터. 즉, 문자를 비교를 하는 소스 코드이다.  첫번쨰 조건문이 왜 있는것일까? 단순희 문자만 비교를 하면 두번째 조건문마 있므면 되지 않나? 라는 의구심을 품는 개발자도 있을것이다. 

이 부분에 대해서는 String클래스 부분에서 다시한번 포스팅을 할 것이다. 결론부터 얘기를 하면 이 두소스의 차이이다. 

public class internMethod {

	public static void main(String[] args) {
		String input01 = "홍길동";
		String input02 = new String("홍길동");
		
		System.out.println(input01.equals(input02));

	}

}


Posted by SH후니
,