인프런 커뮤니티 질문&답변

트릴님의 프로필 이미지
트릴

작성한 질문수

김영한의 실전 자바 - 중급 1편

동등 연산자 (==) 객체 비교 질문

작성

·

66

0

안녕하세요, 다름이 아니라 동등연산자에서 객체비교중 의문이 있어 질문드립니다.

아래 이미지에서 다른 객체 인스턴스 끼리는 동등연산 자체가 컴파일 에러나는데 이유가 무엇인가요?

동작은 해야 정상이 아닌가 싶은데,,, 다형적 참조가 가능한 객체끼리만 가능한가요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 트릴님께서 질문하신 동등 연산자 ==에 대한 객체 비교에 대해 설명드리겠습니다.

Java에서 동등 연산자 ==는 두 객체의 참조(주소)를 비교합니다. 즉, 두 객체가 동일한 메모리 위치를 가리키고 있는지 판단합니다. 이때, 두 객체가 서로 다른 타입이거나, 상속 관계상 서로 다른 클래스일 경우에는 참조를 비교하는 것이 컴파일 오류가 나지 않습니다. 다만, 두 객체의 타입이 전혀 다른 경우(예: Dog 객체와 Cat 객체)에도 동등 연산자는 사용 가능합니다. 그러나 다형적인 참조 관계(상속 및 인터페이스 구현 관계)가 성립되지 않으면 그 비교는 무의미하여, 컴파일 오류는 발생하지 않더라도 논리적 의미로 오해할 가능성이 있습니다.

따라서, 질문에서 언급하신 “다형적 참조가 가능한 객체끼리만 가능한가요?“라는 질문의 경우, 컴파일상의 오류는 발생하지 않지만 이 경우 의미 있는 비교는 힘들 수 있습니다. Java에서는 타입 캐스팅이나 객체의 타입 체크(instanceof 사용)를 통해 의도된 객체 유형을 확실히 할 수 있습니다.

==의 비교가 성공적으로 이루어지지 않는 경우 equals() 메서드를 통해 보다 의미 있는 비교를 수행할 수 있습니다. 이는 두 객체의 필드 값 기반 비교를 할 수 있도록 객체 클래스에서 재정의가 가능한 메서드입니다. 객체를 비교할 때는 상황에 맞는 적절한 방법을 선택하셔야 합니다.

자세한 내용은 아래 포스팅에서도 확인하실 수 있습니다:
- equals 메서드도 - Object 클래스의 equals() 메서드를 객체 주소 비교 기준으로 보고하는 내용
- isEqualTo / isSameAs - isEqualTo와 isSameAs의 차이에 대한 설명입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

트릴님의 프로필 이미지
트릴

작성한 질문수

질문하기