아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
라인 favicon라인

equals() 제대로 알고 쓰자! 버그 예방 꿀팁

by DD
2025-11-07
8개월 전
조회수 12

LY Corporation의 코드 품질 개선 노력의 일환으로, equals() 오버라이딩 시 주의사항을 강조함

equals()는 동일성(identity) 또는 등가성(equivalence)을 나타내야 하며, 일부 속성만 비교하는 것은 지양해야 함

Kotlin data class의 equals 구현과 캐싱, 표현과 값의 등가성 정의 등, 다양한 예외 케이스를 제시함

equals() 정의의 두 가지 원칙

equals()는 객체의 동일성(identity) 또는 등가성(equivalence)을 명확히 정의해야 한다. 동일성은 객체 참조가 같을 때 true를 반환하며, 등가성은 모든 속성이 같을 때 true를 반환한다. 따라서 equals() 구현 시, 어떤 의미를 부여할지 신중하게 결정해야 한다.

일부 속성만 비교하는 equals()의 문제점

일부 속성만 비교하는 equals()는 예상치 못한 버그를 발생시킬 수 있다. StateFlow나 LiveData와 같은 observable에서 equals()를 사용하여 변경 여부를 판단하는 경우, 특정 속성이 변경되어도 UI가 업데이트되지 않는 문제가 발생한다. 따라서 equals()는 모든 속성을 비교하거나, 별도의 함수를 사용해야 한다.

등가성 정의 시 고려사항

등가성/동등성을 정의할 때는 표현(representation)과 실제 값(actual value)의 차이를 고려해야 한다. Rational(유리수) 예시처럼, 표현 방식에 따라 등가성의 의미가 달라질 수 있다. 따라서 equals()를 구현하기 전에, 해당 객체가 무엇을 나타내는지 정확히 이해하고 등가성 정의를 신중하게 결정해야 한다.

코드 품질 개선 기법 22편: To equal, or not to equal
중급
아키텍처
Java
Kotlin
equals
Backend
원문 읽기
원문 읽기

댓글 0

첫 번째 댓글을 남겨보세요!

관련 추천 글

Java Kotlin 전환, 성공적인 백엔드 리팩토링 사례

우아한형제들 로고

C++ 표준 라이브러리, 왜 계속 '퇴보'하는가?

랍스타즈 로고

Anthropic, AI 에이전트 확장 위해 Stainless 인수

해커뉴스 로고

구글 안드로이드 정책 변경, 개발자 자유 위협!

레딧 로고

IntelliJ IDEA 2026.1 출시! C/C++ 지원 강화 및 AI 에이전트 통합!

레딧 로고

Mill 1.1.0, JVM 프로젝트 설정을 더 쉽게!

레딧 로고
라인 favicon라인
중급
아키텍처
Java
Kotlin
equals
Backend

관련 추천 글

Java Kotlin 전환, 성공적인 백엔드 리팩토링 사례

우아한형제들 로고

C++ 표준 라이브러리, 왜 계속 '퇴보'하는가?

랍스타즈 로고

Anthropic, AI 에이전트 확장 위해 Stainless 인수

해커뉴스 로고