-
자바 equals()는 대체 왜 쓰는가...?Java/자바의정석 2023. 2. 22. 14:15반응형
equals()메서드와 hashcode() 메서드는 대체 왜 쓰는가..?
우선 equals 메서드가 무엇인지부터 알아보자.
equals 메서드란?
public boolean equals(Object obj) { return (this == obj); }
해당 코드는 Object.java 에 선언되어있는 equals 메서드이다.
equals메서드의 기능은 객체의 참조변수를 받아 비교하여 그 결과를 boolean 값으로 알려주는 역할을 한다.
코드를 보면 단지 참조값을 비교하여 같은지 여부를 판단하여 True, False를 반환한다.
equals()는 언제 사용하는가?
개발을 하다보면 참조하고 있는 주소가 다르지만 두 값을 같은 값으로 인식해야하는 경우가 있다.
그러한 경우에 equals()를 오버라이딩 해줘야한다.
class Person { long id; public boolean equals(Object obj) { if(obj instanceof Person) return id ==((Person)obj).id; else return false; } Person(long id) { this.id = id; } } class Ex9_2 { public static void main(String[] args) { Person p1 = new Person(8011081111222L); Person p2 = new Person(8011081111222L); if(p1.equals(p2)) System.out.println("p1과 p2는 같은 사람입니다."); else System.out.println("p1과 p2는 다른 사람입니다."); } }
보기와 같은 코드가 있다.
p1과 p2는 Person참조형으로 객체를 생성하여 각기 다른 주소를 가지고있다.
자바에서 == 를 사용한다면 각 주소를 비교하기때문에 전달받은 내부값을 비교하기위해서는 equals를 사용해야한다.
p1객체를 생성하면 8011081111222L 값을 입력받아 iv 값에 8011081111222L 이 입력된다.
p2객체를 생성하면 8011081111222L 값을 입력받아 iv 값에 8011081111222L 이 입력된다.
if(p1.euqlas(p2))에서
object의 equals를 오버라이딩하여 매개변수로 들어오는 객체와 자신의 객체가 같은지 비교하는 기능을 한다.
매개변수로 들어온 값은 8011081111222L 이며 자신이 가지고 있는 iv값 또한 8011081111222L이다.p1, p2둘다 동일한 값을 입력받았으므로 오버라이딩 메서드는 true를 반환하고 "p1과 p2는 같은 사람입니다"를 출력하게된다.
정리를하자면 값을 비교하기위해 ==를 사용하면 자바에서는 각 주소로 비교를 하게된다.이름이 같은 동명이인이 있는데 살고있는 곳이 다른 격이된다.그래서 나는 그사람의 주소가 아닌 그사람의 이름이 같은지 비교를 원하는 상황이다.그래서 자바에서 최상위 Object객체에 존재하는 equals메서드가 구현되어있으니 이것을 오버라이딩하여 재사용하는것이다.
반응형'Java > 자바의정석' 카테고리의 다른 글
자바 equals()와 hashcode()는 왜 같이 재정의해야하는가? (0) 2023.02.22 자바 hashCode(), identityHashCode() (0) 2023.02.22 자바의정석 8장 예외처리, 예외던지 (1) 2023.02.22 자바의정석 Exception 예외처리, printStackTrace() (Ex8~ (0) 2023.02.21 JAVA Exception 예외처리 간단 명료 정리!! (0) 2023.02.21