728x90
반응형
1. Nullable 리시버
리시버 타입에 ?가 붙어 있는 것이 Nullable 리시버이다.
확장 함수를 응용하면, 참조 변수에 null이 지정되어 있어도 함수 호출이 가능하게 할 수 있다.
(Nullable 타입으로도 멤버 함수를 호출할 수 있다)
fun String?.isNumber(){
if(this == null) {
println("문자열이 null입니다.")
}
}
fun main() {
val empty: String? = null
empty.isNumber()
}
확장 함수 참고
https://yelin1217.tistory.com/425
[TIL/Kotlin] 코틀린 중급문법_접근지정자, 접근지정자 오버라이딩, 확장 함수, 확장 프로퍼티
1. 접근 지정자 코틀린에서 선언 가능한 요소(함수, 전역변수, 클래스, 프로퍼티, 멤버함수 등) 중, 일부 요소에는 접근 권한이라는 것을 지정할 수 있다. 이를 접근 지정자 또는 가시성 지정자라
yelin1217.tistory.com
2. 동반자 객체의 확장 함수
확장 함수를 다음과 같이 선언하면 동반자 객체에도 확장 함수를 달 수 있다.
fun 클래스 이름.Companion.함수 이름() {
}
동반자 객체는 클래스 이름만으로 접근할 수 있지만, 확장 함수를 선언할 때 그렇게 하면 동반자 객체가 아닌 클래스 자체에 멤버 함수가 추가되므로 Companion 식별자를 반드시 적어줘야 한다.
// 빈 동반자 객체 정의
class Person{ companion object }
// 동반자 객체에 create 함수 주입
fun Person.Companion.create() = Person()
// Person 클래스의 동반자 객체에 주입된 create 함수를 호출
fun main() = Person.create()
3. 확장 함수의 리시버 타입이 상속 관계에 있을 때
확장 함수의 리시버 타입이 상속 관계에 있을 때 멤버 함수와 다르게 참조 변수가 실제로 가리키는 객체의 타입을 따르지 않고 참조 변수의 타입을 그대로 따른다.
open class AAA; class BBB: AAA()
fun AAA.hello() = println("AAA")
fun BBB.hello() = println("BBB")
fun main() {
val test: AAA = BBB()
test.hello() // AAA
}
728x90
반응형
'TIL > Kotlin' 카테고리의 다른 글
[TIL/Kotlin] 코틀린 고급문법_중첩 클래스와 내부 클래스 (0) | 2023.05.21 |
---|---|
[TIL/Kotlin] 코틀린 고급문법_추상 클래스, 인터페이스, 다이아몬드문제(상속구현문제) (0) | 2023.05.17 |
[TIL/Kotlin] 코틀린 고급문법_inline 함수, const, lateinit (0) | 2023.05.17 |
[TIL/Kotlin] 코틀린 고급문법_객체 선언과 동반자 객체 (0) | 2023.05.17 |
[TIL/Kotlin] 코틀린 중급문법_접근지정자, 접근지정자 오버라이딩, 확장 함수, 확장 프로퍼티 (0) | 2023.05.14 |