== : 동일성의 개념. 두 객체의 참조가 동일한 객체를 가리키고 있는지 확인한다.
equals() : 동등성의 개념. 두 객체가 논리적으로 동등한지 확인한다.
동일은 완전히 같음을 의미 -> 같은 메모리에 있는 객체 인스턴스인지 참조값 확인
동등은 같은 가치나 수준을 의미 -> 논리적으로 같은지 확인
User user1 = new User("id-100");
User user2 = new User("id-100");
user1 == user2 -> false
user1.equals(user2) -> false
여기서 user1 == user2 가 false 로 나오는 것 까진 알겠는데 (같은 메모리에 있는 객체가 아니니)
왜 equals()를 사용했을 때도 false가 나오는 것일까?
모든 클래스마다 동등성을 비교하는 기준이 다르기 때문에 -> 즉 어떤 클래스는 아이디로, 또 어떤 클래스는 이름으로 비교할 수 있기 때문에 누가 어떤 의도로 만들었냐에 따라 동등성은 달라진다.
따라서 그걸 object 라는 하나의 클래스가 모든 케이스를 정의할 수 없다.
그래서 equals() 메서드를 사용자가 재정의(오버라이딩) 해야한다. 그렇지 않으면 기본으로 object 클래스는 equals() 메서드 내부에서 동일성 비교를 한다.
참고: Command + N 을 하면 IDE에서 알아서 오버라이딩을 해준다.
참고문서 : (https://cwchoiit.tistory.com/173)