21.06.10 16:45 작성
·
716
답변 6
3
말(글) 로만 설명 드린거 같아서 간단한 예제 테스트 코드도 작성해 보았습니다 ^^
위의 테스트 코드는 같은 '값'과 같은 메모리 주소를 가리키기 때문에 isEqualTo와 isSameAs가 둘다 성공 하는 것을 확인 하실 수 있습니다.
,
아래의 테스트 코드는 같은 '값' 이지만 new연산자를 사용하여 새로운 메모리 주소를 할당 하였기 때문에 같은 값일지라도 동일한 메모리 주소를 참조하고 있지 않기 때문에 테스트가 실패하는 것을 볼 수 있습니다.
추가적으로 isNot~() 으로 테스트 결과의 true / false 반대 상황을 확인 해 보실 수도 있으세요
궁금한 점 있으시면 추가적인 댓글이나 질문글 남겨주세요 ^^
2
1
1
안녕하세요.
=====
Object 클래스의 equals() 메서드도 객체끼리 비교하면 같은 객체인지를 기본적으로(오버라이딩 하지 않았을 때) 객체의 주소로 비교해주니까
=> 맞습니다. Object 클래스의 equals는 아래의 Java doc에도 나와있듯 참조 값을 비교하고 있습니다.
다른 포스팅에 있는 내용도 가져와 볼게요.
- 기본 동작: '==' 연산 결과 반환
- override 목적: 물리적으로 다른 메모리에 위치하는 객체여도 논리적으로 동일함을 구현하기 위해
여기서 중요한 내용은 "물리적으로 다른 메모리"와 "논리적으로 동일함" 인데요.
물리적으로 다른 메모리 = (== 비교를 통한 주소 값이 다르더라도)
논리적으로 동일함 = (값 비교(equals)를 통해 같은 값이기만 한다면 같은 객체임을 보장하기 위함)
으로 이해할 수 있겠죠?
자, 그럼 다음 내용을 보면
isEqualTo가 equals처럼 동작한다면
=>
8분 55초부터 영한님이 하신 말씀입니다.
"자바에 보면 equals 라는 메서드 오버라이드 할 수 있거든요. 바로 그걸 비교하는겁니다. "
이 말인 즉슨 equals 메서드를 오버라이드 통한 값 비교를 하는 동작을 한다는 것이지 Object의 기본동작인 주소 값 비교를 한다는 뜻이 아닙니다. 이 부분을 오해 하신거 같아요.
즉, 정리하자면 isSameAs로 참조 값 비교를, isEqualTo로 값 자체 비교를 할 때 사용하는 것이라고 생각하시면 되겠습니다.
isSameAs말고 isEqualTo로 비교해도 되지 않나요? (영상 8:36)
자 이제 다시 영한님 강의 화면을 보시죠. @DisplayName() 안의 내용과 콘솔 출력 결과를 보시면,
이해가 되셨을거라 생각합니다.
설명이 미흡하거나 잘못되었다고 생각하시면 댓글 남겨주세요!
0
== 연산, equals() 메서드 차이를 공부해보시면 좋을 것 같습니다.
강의 8:55분쯤을 보시면 강사님께서 same은 ==, equal은 equals를 생각하시면 된다고 설명해주셨습니다.
String 클래스의 equals() 메서드를 확인해보시면 1. == 연산으로 두 객체의 참조값이 같은지를 확인, 2. 두 문자열의 구성이 같은지를 확인하도록 Object의 equals() 메서드를 오버라이딩한 것을 확인할 수 있습니다.
즉, isEqualTo는 같은 객체인지도 비교하며, 같은 참조값이 아니더라도 String 클래스의 equals() 메서드에 따라 두 문자열의 구성이 같다면 true을 반환합니다.
반면 isSameAs는 두 객체의 참조값이 같은지만 비교하기 때문에 위 예제에서는 false를 반환합니다.
1, 2번 테스트의 차이는 String 객체를 생성하는 방법인 new 연산과 리터럴 방식을 공부해보시면 좋을듯합니다.
2021. 06. 22. 21:26
네 맞습니다. isEqualTo는 a = 10, b = 10 과 같이 원시 타입(프리미티브)의 값 자체를 비교를 하는 반면
isSameAs는 메모리에 올라가진 주소를 비교합니다.
가령,
Member member1 = new Member("홍길동");
Member member2 = new Member("홍길동");
이 둘은 이름이 홍길동으로 같은 name을 가지겠지만, 서로 다른 메모리주소 공간에 올라가 있는 인스턴스 이므로 member1 != member2 이기 때문에 isSameAs 비교시 실패하게 되는 것입니다.
제 설명이 잘 이해 되지 않으시면
"자바 동일성 동등성"으로 검색하시면 많은 정보들을 찾아보실 수 있으실거에요.