공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 '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 에 대해 공부합니다.
감사합니다.
'코틀린(Kotlin)' 카테고리의 다른 글
코틀린(kotlin) : Null Safety 널 세이프티 (2) | 2018.02.08 |
---|---|
코틀린(kotlin) : 단항 연산자, 이항연산자, 여러 연산자 (0) | 2018.02.08 |
코틀린(kotlin) : 타입체크 is 와 캐스팅 as Type Checks and Casts (0) | 2018.02.07 |
코틀린(kotlin) : Ranges 범위 표현 (0) | 2018.02.07 |
코틀린(kotlin) : Collections : List, Set, Map (0) | 2018.02.07 |