자바

JAVA Object 클래스 객체 비교 equals()

알통몬_ 2017. 3. 14. 10:07
반응형

Object 클래스

 클래스를 선언할 때 다른 클래스를 상속하지 않으면 java.lang.Object 클래스를 상속하게 됩니다. 

따라서 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스입니다.

Object는 자바의 최상위 클래스에 해당합니다. 


필드가 없고, 메서드들로 구성되어 있습니다. 

이 메서드들은 모든 클래스가 Object를 상속하기 때문에 모든 클래스에서 사용이 가능합니다.


객체 비교 equals()

 Object의 메서드.

 public boolean equals(Object obj) { ... }

equals() 메서드의 매개 타입은 Object 인데 이모든 객체가 매개값으로 대입될 수 있음을 말합니다. Object가 최상위 타입이므로 모든 객체는 Object 타입으로 자동 타입 변환이 될 수 있기 때문

equals() 메서드는 비교 연산자인 == 과 동일한 결과를 리턴. 

두 객체가 동일하다면 true를 리턴하고 , 그렇지 않으면 false를 리턴합니다.

Object obj1 = new Object();

Object obj2 = new Object();

boolean result = obj1.equals(obj2);  ------|

                  기준 객체     비교 객체     |

                                                |

boolean result = (obj1 == obj2); ←---------| 결과가 동일


두 객체를 동등 비교할 때 equals() 메서드를 흔히 사용합니다. equals() 메서드는 두 객체를 비교해서 논리적으로 동등하면 true 를 리턴하고 동등하지 않으면 false 를 리턴합니다. 논리적으로 동등하다는 것은 같은 객체이건 다른 객체이건 상관없이 객체가 저장하고 있는 데이터가 동일함을 뜻합니다. 

바로 예제를 보겠습니다.

public class Member {

public String id;

public Member(String id) {

this.id = id;

}

@Override

public boolean equals(Object obj) {

if(obj instanceof Member) { 매개값이 Member 타입인지 확인

Member member = (Member) obj; // 강제 타입 변환 후

if(id.equals(member.id)) { // id 필드 값이 동일한지 검사한 후 

return true; // 동일하다면 true 리턴

}

}

return false; //

}

}


public class MemberExample {
public static void main(String[] args) {
Member obj1 = new Member("blue");
Member obj2 = new Member("blue");
Member obj3 = new Member("red");
if(obj1.equals(obj2)) { // 매개값이 Member 타입이고 id 필드 값도 동일 true 리턴
System.out.println("obj1과 obj2는 동등함.");
} else {
System.out.println("obj1과 obj2는 동등하지 않음.");
}
if(obj1.equals(obj3)) { // 매개값이 Member 타입이지만 id 필드값이 다르므로 false 리턴
System.out.println("obj1과 obj3은 동등함.");
} else {
System.out.println("obj1과 obj3은 동등하지 않음.");
}
}
}


반응형