equals() 정의, 활용

dewdew·2022년 5월 25일
0

JAVA

목록 보기
2/3


출처 : 유튜브 [ 자바의 정석-기초편 ] 을 보고 정리 작성한 자료입니다.
👉 클릭! 유튜브 링크


1. equals(Object obj) 정의

  • 객체 자신과 객체 obj가 같은 객체인지 알려준다.
    (같으면 true, 다르면 false) => boolean 타입
  • 객체의 주소(참조변수 값) 비교

내부 살펴보기

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

유튜브 화면 캡쳐

v1 객체와 v2 객체는 같은 10 이라는 값을 갖고 있지만, 주소가 다름. 즉 컴퓨터 입장에선 다른 객체다. 때문에 equals() 로 비교시 false 가 나온다. 안에 있는 값의 비교와 상관없이 객체는 모두 고유의 주소 값을 가진다. 그렇다면, 늘 false 가 나온다면! 이 메서드는 왜 있는걸까..? equals()를 활용해서 객체의 값!

객체에 실제 들어가 있는 값을 비교하고 싶으면 어떻게 해야 할까?

2. 활용

정답은?! > 오버라이딩

1) 비교하려는 객체에 equals() 를 오버라이딩 한다.
equals()object 메서드이기에 가능!

class Value {
	int value;
	
	public Value(int value) {
		this.value = value;
	}
	
	@Override //Object의 equals() 오버라이딩 해서 주소가 아닌 value를 비교
	public boolean equals(Object obj) {
		
		// 참조변수의 형변환 전에는 반드시 instanceof로 확인해야함.
        // 다른 비교할 수 없는 객체들이 들어오는 것을 사전에 방지.
        // Object는 다 들어올 수 있으니까.
		if(!(obj instanceof Value)) return false;
		
        // 형변환, 왜냐하면 Object 안에서 value를 꺼낼 수 없으니까!
		Value v = (Value)obj;
		
		return this.value == v.value;
	}
}

2) 메인에서 비교하기

public class ObjectEx {

	public static void main(String[] args) {
		
		Value v1 = new Value(10);
		Value v2 = new Value(10);
		
		if (v1.equals(v2)) 
			System.out.println("같다.");
		else 
			System.out.println("다르다.");
		
	}

}

3) 결과 확인 -> 값 비교 성공!


🐥 TMI
hashcode()도 같이 오버라이딩 해서 주소 값도 맞춰줘야 한다는데, 아직 강의 안들어서 모르겠다.. ㅎ,ㅎ 이 부분 복습하고 봐야지.. 이렇게 짧은데 하나 하나 정리하고 따라 쳐서 복붙 하는데 시간이 엄청 걸린다. ㅠ_ㅠ 물론 이해는 훨씬 잘 되니까 맞는 공부 방법 같은데, 좀 더 해봐야겠다!!
그래도 좋은 강의를 무료로 보며 공부할 수 있다는 것에 무한한 감사를 느낀다.
🥄🥄🥄 잘 받아 먹자ㅏㅏ!!

profile
새로운 것은 늘 짜릿해

0개의 댓글