■equals()
원래 Object의 equals()는 번지 비교를 합니다.
그래서 논리적 동등을 비교하기 위해서는 오버라이딩을 해주어야합니다.
논리적 동등이란? 같은 객체든 다른 객체든 객체 저장 데이터가 동일하다는 것입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class Member {
String id;
public Member(String id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
System.out.println("equals호출");
if (obj instanceof Member) {
//타입 변환이 가능한지 여부를 알기 위해 instanceof사용
//다운 캐스팅은 반드시 형변환 코드 必
Member member = (Member)obj;
//논리적 동등을 위해 조건문 설정
if (this.id.equals(member.id)) {
return true;
}
}return false;
}
}
|
cs |
equals()를 오버라이딩 하여
매개변수로 받은 객체가 Member이면 Member로 인스턴스를 생성하고
생성한 인스턴스의 id와 매개변수로 받은 obj의 id가 같으면 true를 리턴하라고 코드를 작성하였습니다.
논리적으로 id에 저장된 값이 같으면 true입니다.
<실행클래스>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public class MemberEx {
public static void main(String[] args) {
Member obj1 = new Member("blue");
Member obj2 = new Member("blue");
Member obj3 = new Member("red");
//주소는 다 다르다
System.out.println(obj1);
System.out.println(obj2);
System.out.println(obj3);
//Object의 eqauls메서드를 Member가 오버라이딩을 했기에 다음과 같이 동등객체로 인식한다.
if (obj1.equals(obj2)) {
System.out.println("논리적으로 동등합니다.");
}
else {
System.out.println("논리적으로 동등하지 않습니다.");
}
System.out.println();
if (obj1.equals(obj3)) {
System.out.println("논리적으로 동등합니다.");
}
else {
System.out.println("논리적으로 동등하지 않습니다.");
}
}
}
|
cs |
Member로 각각의 인스턴스를 만들었으므로 obj1,2,3의 주소는 각각 다릅니다.
밑에 if, else문을 보시면, 아까 위에서 equals를 오버라이딩 했으므로
id가 같으면 true가 나올 것이고 id가 다르면 false가 나올 것입니다.
각각 다른객체지만 obj1과 obj2는 id가 같으므로 true가 나옵니다.
<출력 결과>
728x90
'JAVA > java 실습' 카테고리의 다른 글
[자바JAVA] HH:MM:SS 정규표현식 (0) | 2020.12.11 |
---|---|
[자바JAVA] java에서 크롬/인터넷창 열기 /eclipse (0) | 2020.12.10 |
[자바JAVA] 클래스 - Time클래스로 보는 private접근 제어자, getter, setter, 매개변수가있는 생성자, toString오버라이딩 (0) | 2020.10.08 |
[자바JAVA] 객체지향1 - 클래스와 객체 . Tv클래스로 알아보는 객체배열, 멤버호출방법, 객체주소변경, 향상된 for문 (0) | 2020.10.07 |
[자바JAVA] 이차원배열 - String 이차원 배열 ( 3차원배열과 같음)로 단어퀴즈 만들기 (0) | 2020.10.06 |