반응형
.equals()
- 두개의 객체가 같다라는 의미 ? => 속성이 같다는 의미로 해석
- .equals() 함수 소스를 보면 두 개의 객체를 비교할 때 비교연산자(==)를 사용하여 비교를 함
- == 연산자는 속성의 주소값(쉬운말로 방번호)을 비교를 함
String 객체에서 어떻게 비교를 해야할까?
.equals() 함수를 재정의하여 비교연산자(==) 대신 값을 비교하도록 재정의함
즉, 두 개의 객체를 비교할 때 속성을 비교할 수 있게 equals() 함수를 재정의하여 사용해야함!
JAVA 언어의 최고 조상 객체는 Object 객체이며 Object 객체의 메서드 종류는 .equals(), .hashCode(), .toString()등이 있음
JAVA에서 모든 객체(클래스)는 Object 를 상속받고 있음 (extends 라는 키워드는 생략)
예제1
public class Member {
// TODO : 속성, 생성자함수, 메서드
// 속성
public String id;
// 생성자
public Member(String id) {
this.id = id;
}
// 객체 동등 비교를 위해 .equals 함수 재정의 해야함 : alt + insert
// TODO : 인텔리제이 자동코딩
// @Override
// public boolean equals(Object o) {
// if (this == o) return true;
// if (o == null || getClass() != o.getClass()) return false;
// Member member = (Member) o;
// return Objects.equals(id, member.id); // 객체 속성 동등비교
// }
// TODO : 참고, 개발자 직접코딩
@Override
public boolean equals(Object o) {
// 1) 매개변수 o 객체가 Member 인가?
if(o instanceof Member) {
// 강제 형변환
Member member = (Member) o;
// 2) 속성의 값(id) 비교 같으면 true, 아니면 false
if(this.id.equals(member.id)) {
return true;
}
}
return false;
}
}
실행클래스
public class MemberApplication {
public static void main(String[] args) {
// Member 객체 2명 생성
Member member = new Member("blue");
Member member2 = new Member("blue");
// 객체 2명 비교
if(member.equals(member2)){
System.out.println("같습니다.");
} else {
System.out.println("다릅니다.");
}
}
}
결과
같습니다.
.hashCode()
* 해쉬코드(hashCode)? : 객체를 식별하는 유일한 정수값(번호 중복 없음)
* 1) 방번호(주소) : 메모리의 랜덤하고 유일한 방번호 만들때 사용
* 2) HashMap, HashSet 자료구조에서 내부적으로 해쉬코드를 사용함(객체들을 비교할때)
* TODO => 기본 hashCode는 객체간 비교에서 오류를 일으키므로 재정의 해야함!
* 결론 ) .equals(), .hashCode() 재정의해야함 (추천 : 자동코딩 기능이용)
예제2
public class Member {
// 속성
public String id;
// 생성자
public Member(String id) {
this.id = id;
}
// equals, hashCode 재정의
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Member member = (Member) o;
return Objects.equals(id, member.id);
}
@Override
public int hashCode() {
// 2개의 객체를 생성해서 비교시 id 속성의 해쉬코드가 2개 모두 같아짐
return Objects.hash(id); // 객체의 비교(속성을 비교)
}
반응형
'Java > Java 이론' 카테고리의 다른 글
예외처리 (0) | 2023.09.26 |
---|---|
자료구조 - Stack / Queue (0) | 2023.09.26 |
자료구조 (0) | 2023.09.25 |
MVC 디자인 패턴 (0) | 2023.09.22 |
생성자 (0) | 2023.09.20 |