코틀린(Kotlin)

코틀린(kotlin) : this 와 Equality

알통몬_ 2018. 2. 8. 08:00
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 'this' 와 Equality 에 대해 공부합니다.


This Expression

현재 리시버를 나타내기 위해 우리는 'this' 를 사용합니다.

- 클래스의 멤버에서 this는 현재 클래스 객체를 가리킵니다.

- 확장 함수나 리시버가 있는 함수 리티럴에서 this 는 dot 왼쪽에 전달되는

리시버 파라미터를 나타냅니다.


만약 'this'에 한정자가 없다면 가장 안쪽의 범위를 참조합니다.

다른 범위를 참조하려면 label 한정자가 사용됩니다.


Qualified this : 한정된 this

this 를 통해 내부 범위에서 외부 범위로 접근하려면 this@label 한정자를 사용해야 합니다.

예제 코드 )

class ThisA {
inner class ChildB {
fun Int.cb() {
val a = this@ThisA // a = ThisA
val b = this@ChildB // b = ChildB

val c = this // c = cb() 의 receiver, Int
val c2 = this@cb // c2 = cb() 의 receiver, Int

val funLit = lambda@ fun String.() {
val d = this // funLit() 의 receiver
}

val funLit2 = { s: String ->

val d1 = this
}
}
}
}


Equality '='

코틀린에서는 두 가지 타입의 equality 가 있습니다.

- 구조 equality ( a check for equals() )

- 참조 equality ( 두 참조가 같은 객체인지 체크 )


Structural equality 구조 평등

구조 평등은 == 연산자를 사용해 체크합니다.

부정은 != 입니다.

관례 상 a == b는 아래와 같이 번역됩니다.

a?.equals(b) ?: (b === null)

즉, 만약 a 는 null이 아니면 equals(Any?)를 호출하고 

a가 null인 경우 b갸 참조 가능하게 null과 동일한지 확인합니다.


* 명시적으로 null 과 비교할 때는 코드를 최적화 할 필요가 없습니다.

a == null 은 자동적으로 a === null 로 변환됩니다.


Floating point numbers equality

equality 체크 해야 할 피 연산자가 float 나 double 인 경우( nullable or not),

이 체크는 IEEE 754 부동 소수점 산술 표준을 따릅니다.

그렇지 않으면 구조 평등은 NaN 이 그 자체와 같고, -0.0 이 0.0 과 다르도록

표준과 일치하는 구조적 동일성을 사용합니다.


Referential equality 참조 평등

참조 평등은 === 연산자를 사용합니다. 부정은 !==을 사용합니다.

a === b 의 결과과 true 이면 a 와 b는 같은 객체입니다.

원시타입에 === 연산자를 사용하면  == 와 같은 기능을 합니다.



이상입니다.

다음 포스팅에서는 Operator overloading 에 대해 공부합니다.

감사합니다.

반응형