반응형
Scala에서의 객체 동등성
동등성 : 두 객체의 내용이 같은지 비교.
String Equality 테스트
== operator를 이용한 두개의 String instance 비교.
val s1 = "hello"
val s2 = "hello"
val s3 = "h" + "ello"
s1 == s2
res0: Boolean = true
s1 == s3
res1: Boolean = true
== 메소드는 String 이 null로 할당하여도 NullPointerException발생하지 않음.
val s4: String = null
s3 == s4
res2: Boolean = false
s4 == s3
res3: Boolean = false
대문자나 소문자로 변환한 두개의 string도 == method를 이용해서 비교할 수 있다.
val s5 = "Hello"
val s6 = "hello"
s5.toUpperCase == s6.toUpperCase
res4: Boolean = true
하지만, null인 String의 == 메소드는 NullPointerException 발생
val s7: String = null
val s8: String = null
s7.toUpperCase == s8.toUpperCase
java.lang.NullPointerException
자바 String Class의 equalsIgnoreCase를 이용하여 대소문자 구별하지 않고 두개의 string 비교
val s9 = "Maria"
val s10 = "maria"
s9.equalsIgnoreCase(s10)
res5: Boolean = true
스칼라에서 == method를 이용하여 객체가 동일한지 테스트한다.
스칼라에서 AnyRef class에 정의된 == method는 첫번째로 null 값을 체크한후, 두 객체가 같으면 그 다음 object(예. this)의 equals method를 호출한다. 결과적으로 string을 비교할 때 null값을 체크할 필요가 없다.
출처 :
1.1. Testing String Equality
equals 메소드를 정의해서 두 object instance를 비교하고 싶다면?
자바와 마찬가지로 두 instance를 비교하기 위해 equals method ( 그리고 hashCode method)를 정의한다.
하지만 Java와는 다르게 두개의 instance를 비교하기 위해 == method를 사용하면 된다.
Java에서 == operator는 reference equality이지만, Scala에서 == 는 두 instance의 동등성(equality)를 비교하기 위해 사용한다.
equals 메소드를 구현하기 위해 여러가지 방법이 있다. 다음은 그 중의 하나의 예.
package cookbook
class Employee(name: String, age: Int, var role: String) extends Person(name, age) {
override def canEqual(a: Any) = a.isInstanceOf[Employee]
override def equals(that: Any): Boolean =
that match {
case that: Employee => that.canEqual(this) && this.hashCode = that.hashCode
case _ => false
}
override def hashCode: Int = {
val ourHash = if (role == null) 0 else role.hashCode
super.hashCode + ourHash
}
}
출처 :
4.15. Defining an equals Method (Object Equality)
반응형
'backend > Scala_Play_Akka' 카테고리의 다른 글
[Akka] Akka Document - Actor Architecture (3) - Failure handling (0) | 2018.04.24 |
---|---|
[Akka] Akka Document - Actor Architecture (2) - actor lifecycle (0) | 2018.04.22 |
[Akka] Akka Document - Actor Architecture (1) (0) | 2018.04.22 |
[Scala] Mac에서 Scala 설치 (0) | 2016.10.22 |
[Play] Play설치(activator) (0) | 2016.03.06 |
Scala로의 산책 (0) | 2015.12.24 |