«   2017/12   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
Archives
Today
92
Total
1,197,432
관리 메뉴

버리야 날자

[Scala] Scala에서의 객체 동등성 본문

나만의 작업/Scala/Play

[Scala] Scala에서의 객체 동등성

버리야 2015.06.01 00:03
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값을 체크할 필요가 없다.





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)


저작자 표시 비영리 변경 금지
신고

'나만의 작업 > Scala/Play' 카테고리의 다른 글

[Play] Play설치(activator)  (0) 2016.03.06
Scala로의 산책  (0) 2015.12.24
[Scala] Scala에서의 객체 동등성  (0) 2015.06.01
0 Comments
댓글쓰기 폼