본문 바로가기
프로그래밍 놀이터/Kotlin, Coroutine

[Effective Kotlin] Item 40 : Respect the contract of equals

by 돼지왕 왕돼지 2022. 5. 26.
반응형

이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서
Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다.

 

#
Any 를 상속한 모든 object 는 잘 정의된 아래 3개 규칙을 지켜야 한다.

  1. equals
  2. hashCode
  3. toString

 

 

Equality

#
object 같은 type 이거나 subtype 일 때만 equality operator 를 사용할 수 있다.

 

 

Why do we need equals?

 

 

The contract of equals

#

  1. Reflexive ( x.equals(x) == true )
  2. Symmetric ( x.equals(y) == y.equals(x) )
  3. Transitive ( x.equals(y) & y.equals(z) == true 면 x.equals(z) == true )
  4. Consistent ( x.equals(y) == x.equals(y) )
  5. Never equal to null ( x.equals(null) == false )

 

 

Problem with equals in URL

#
jeva.net.URL 은 equals 결과를 network 에 의존적인, 실제 연결되는 IP 값을 기준으로 판단하다.
이는 문제가 많으므로.. java.net.URI 사용이 권장된다.

 

 

Implementing equals

#
특별한 이유가 없다면 data class 를 사용하자.

 

 

 

반응형

댓글