profile image

L o a d i n g . . .

equals()

Object의 equals() 메소드는 객체의 번지를 비교하고 boolean 값을 리턴한다.

`obj instanceof Class`: obj가 Class에 속하거나 Class를 상속받는 클래스에 속하면 true가 반환 됨

 

MemberExample.java

package ch12.sec03.exam01;

public class MemberExample {

	public static void main(String[] args) {
		Member mbr1 = new Member("홍길동");
		Member mbr2 = new Member("홍길동");
		Member mbr3 = new Member("고길동");
		User usr1 = new User("홍길동");

		System.out.printf("1 == 2 => %s\n", mbr1.equals(mbr2));
		System.out.printf("1 == 2 => %s\n", mbr1 == mbr2);
		System.out.printf("1 == 3 => %s\n", mbr1.equals(mbr3));
		System.out.printf("mbr1 == usr1 => %s\n", mbr1.equals(usr1));
	}
}

Member.java

package ch12.sec03.exam01;

public class Member {
	public String id;

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

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Member target) {
			if (this.id.equals(target.id)) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
}

실행 순서

  1. MemberExample.java에서 `Member mbr1 = new Member("홍길동");` 을 통해서 Member 클래스의 생성자인 `Member(String id)` 가 호출 됨 - 코드를 볼 땐 항상 main에서 보는 습관을 들여야 함
  2. Member.java에서 홍길동 값이 `id`로 전달 되고, 이 값이 `mbr1` 객체의 `id` 필드에 저장 됨
  3. Member.java의 `mbr1.equals(mbr2)` 가 호출되면서 `mbr1` 의 `equals()` 메서드가 실행 됨
  4. instanceof는 `object instanceof type `즉. object가 type이거나, type을 상속받는 클래스라면 true를 리턴, 아니라면 false를 리턴
  5. 3번의 `mbr2` 가 `equlas()` 메서드의 `obj` 매개변수로 전달 됨
  6. Member.java에서 `obj instance Member target` 이 실행되면서 `obj` 가 `Member` 타입이 맞으므로 `target` 변수에 `obj`가 저장 됨
  7. `if (this.id.equals(target.id))` 를 통해 target.id, 즉 mbr1의 id와 mbr2의 id가 일치하는지 검증함

출처

1. 이것이 자바다 

복사했습니다!