자바

11.3.1   객체비교(equals())

 

다음은  Object 의 equals(Object obj) { ...}

equals() 메소드의 매개 타입은 Object인데, 이것은 모든 객체가 매개값으로 대입될 수 있음를 말한다. 그 이유는 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 를 리턴한다. 논리적으로 동등하다는 것은 같은 객체이건 다른 객체이건 상관없이 객체가 저장하고 있는 데이터가 동일함을 뜻한다. 예를 들어 String 객체의 equals() 메소드는 String 객체의 번지를 비교하는 것이 아니고, 문자열이 동일한지 조사해서 같다면 true 를 리턴하고, 그렇지 않다면 false를 리턴한다. 이것이 가능한 이유는 String 클래스가 Object 의 equals() 메소드를 재정의 (오버라이딩) 해서 번지 비교가 아닌 문자열 비교로 변경했기 때문이다. Object 의 equals() 메소드는 직접 사용되지 않고 하위 클래스에서 재정의하여 논리적으로 동등 비교할 때 이용된다. 

예를 들어 Member 객체는 다르지만 id 필드값이 같으면 논리적으로 동등한 객체로 취급하고 싶을 경우 Object 의 equals() 메소드를 재정의해서

id 필드값이 같음을 비교하면 된다.

equals() 메소드를 재정의할 때에는 매개값(비교 객체) 이 기준 객체와 동일한 타입의 객체인지 먼저 확인해야 한다. Object 타입의 매객 변수는 모든 객체가 매개값으로 제공될 수 있기 때문에 instanceof 연산자로 기준 객체와 동일한 타입인지 제일 먼저 확인해야 한다. 만약 비교 객체가 다른 타입이라면 equals() 메소드는 false 를 리턴해야 한다. 비교 객체가 동일한 타입이라면 기준 객체 타입으로 강제 타입 변환해서 필드값이 동일한지 검사하면 된다. 필드값이 모두 동일하다면 true 를 리턴하고 그렇지 않으면 false 를 리턴하도록 작성한다. 다음 예제는 Member 클래스에서 equals() 메소드를 재정의한 것이다. Member 타입이면서 id 필드값이 같을 경우는 true 를 리턴하고, 그 이외의 경우는 false 를 리턴하도록 했다.

 

class Member{
    public String id;
    
    public Member(String id){
        this.id=id;
    }

    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
    
        if(obj instanceof Member){
            Member member =(Member)obj;
            if(id.equals(member.id)){
                return true;
            }
        }
        return false;
    }
    
    
}

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)){
            System.out.println("obj1과 obj2는 동등합니다.");
        }else{
            System.out.println("obj1과 obj2는 동등하지 않습니다.");
        }
        
        if(obj1.equals(obj3)){
            System.out.println("obj1과 obj3은 동등합니다.");
        }else{
            System.out.println("obj1과 obj3은 동등하지 않습니다.");
        }
        
    }

    
    
}
 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼

인심이 함께 옳다고 하는 것을 공론이라고 하고, 공론이 선 것을 국시(國是)라고 한다. 국시란 한 나라의 사람들이 꾀하지 아니하고도 다 함께 옳다고 하는 것이니, 이로움으로 해서 유혹하는 것도 아니며 위세로써 두렵게 하는 것도 아니면서, 삼척 동자도 알만한 것이 국시다. -율곡 이이

댓글 ( 4)

댓글 남기기

작성

자바 목록    more