NAVER

질문 ArrayObjEquals2.java 관련해서 이어서 질문
비공개 조회수 67 작성일2019.04.25
  1.  @Override // 아래 궁금한 부분
  2.    public boolean equals(Object obj) {
  3.          if(this.num == ((INum)obj).num)
  4.              return true;
  5.          else
  6.              return false;


위 처럼 오버라이드했던 부분은 자바8 기준으로 작성되서 그랬던 것으로 확인되었습니다.
자바8에서는 api에 아래와 같이 정리되어 있습니다.
주목할 부분은 if (e1==null ? e2==null : e1.equals(e2))요 부분인데요.
e1.equals(e2) 이게 object 클래스의 equals 메소드를 사용하기 때문에 위와 같이 오버라이딩 한 것으로 확인됩니다.
왜냐면 오브젝트 클래스의 해당 이퀄스 메소드는 참조값만 비교하므로 값 비교를 위해 오버라이딩 한 것으로 확인됩니다. 

추가로 이전에 답변 하셨던 거 확인해보니 static 메소드는 static이나 지역 변수만 사용한다고 하셨습니다. 아래 로직을 보시면 아시다시피 object 클래스 멤버를 두개 받는 것으로 확인됩니다.
object 클래스는 모든 클래스가 직,간접적으로 참조하고 있으므로 어떠한 자료형이 와도 멤버로 전달되는데요. 답변해주신 내용과 달라 제가 잘못 알고 있는건지 문의드립니다.

public static boolean equals(Object[] a,                             Object[] a2)
Returns true if the two specified arrays of Objects are equal to one another. The two arrays are considered equal if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal. Two objects e1 and e2 are considered equal if (e1==null ? e2==null : e1.equals(e2)). In other words, the two arrays are equal if they contain the same elements in the same order. Also, two array references are considered equal if both are null.
프로필 사진

답변자님,

정보를 공유해 주세요.

1 개 답변
1번째 답변
프로필 사진
양념통닭
영웅
본인 입력 포함 정보
Arrays.equals(new Object[], new Object[]);

이 코드 보신건가요?

애는 static method 고 두개의 objectArray 를 받아 비교해주는 메소드에요
obj1.equals(obj2) 이렇게 처리해도 될 건데 저런건 왜 있는 걸까?
obj1.equals(obj2) 를 할때 obj1 이 null 이면 
null.equals(obj2) 가 되버려서 nullPointerException 이 발생합니다.
그걸 한번더 체크하려면 저런 형태의 코드가 들어가야하는데 매번 저렇게 하기 귀찮으니
편의상 만들어 놓은 static 메소드라고 보시면 됩니다


이해하셨겠지만 저 위에 설명한 친구는 Object 내에 있는 equals 메소드와는 다릅니다.
아래가 Object.class 의 equals 입니다 
"왜냐면 오브젝트 클래스의 해당 이퀄스 메소드는 참조값만 비교하므로 값 비교를 위해 오버라이딩 한 것으로 확인됩니다. " 이해하신게 맞습니다. 
java 의 모든 class 는 Object 를 상속받고 있고
equals 에 대한 별다른 오버라이딩이 없다면 참조 비교로 처리가 됩니다.
난 참조가 달라도 내가 정의한 값만 같으면 같다고 보고싶어! 라고 생각되면
오버라이딩하여 값비교 구문을 재정의 하면 되고, 이 때 주의 해야할 점이 hashCode 도
동일하게 구현해야합니다. 둘다 object 의 식별자 역할을 한다고 보시면되고, equals 는
우리가 작성하는 코드상에서 명시적으로 비교할 때 자주 사용되고 hashCode 는
hashSet 이나 HashMap 등의 자료구조에서 object 를 식별할 때 사용됩니다.
equals 만 재정의하고 hashCode 를 재정의하지 않으면 저 자료구조를 사용할 때
예상치 못한 동작을 할거에요


public boolean equals(Object obj) {
return (this == obj);
}


2019.04.26.

도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.