코틀린에서 확장 프로퍼티(Extension Property)는 기존 클래스에 새로운 프로퍼티를 추가할 수 있는 기능을 제공합니다. 확장 프로퍼티를 사용하면 기존 클래스의 코드를 변경하지 않고 새로운 프로퍼티를 선언할 수 있습니다.
확장 프로퍼티의 선언
확장 프로퍼티는 다음과 같이 선언됩니다.
val ClassName.propertyName: PropertyType
get() = // 프로퍼티의 게터 구현
- val: 읽기 전용 프로퍼티인 경우에 사용합니다.
- ClassName: 확장할 클래스의 이름입니다.
- propertyName: 확장 프로퍼티의 이름입니다.
- PropertyType: 프로퍼티의 타입입니다.
확장 프로퍼티의 예제
val String.doubleLength: Int
get() = this.length * 2
fun main() {
val message = "Hello"
println(message.doubleLength) // 출력: 10
}
위의 예제에서 doubleLength는 String 클래스에 새로운 읽기 전용 프로퍼티로 추가되었습니다. 이제 모든 String 인스턴스에서 doubleLength 프로퍼티를 사용할 수 있게 되었습니다.
Nullable 타입의 확장 프로퍼티
val String?.safeLength: Int
get() = this?.length ?: 0
fun main() {
val nullableString: String? = null
println(nullableString.safeLength) // 출력: 0
}
위의 예제에서 safeLength 프로퍼티는 String? 타입의 확장 프로퍼티로, nullable한 문자열에 대해서도 안전하게 길이를 반환합니다.
수신 객체(this) 활용
확장 프로퍼티 내에서도 this를 사용하여 수신 객체에 접근할 수 있습니다.
val String.printLength: Unit
get() = println("Length of $this is ${this.length}")
fun main() {
val message = "Hello"
message.printLength // 출력: Length of Hello is 5
}
위의 예제에서 printLength 프로퍼티는 문자열의 길이를 출력하는 읽기 전용 프로퍼티입니다.
확장 프로퍼티는 클래스의 내부에 직접적으로 추가되는 것이 아니라, 외부에서 정의되며 해당 클래스의 인스턴스에서 마치 내부 프로퍼티인 것처럼 사용할 수 있습니다. 이를 통해 기존 클래스의 수정 없이 새로운 프로퍼티를 추가할 수 있어 코드의 확장성과 유지보수성을 높일 수 있습니다.
With ChatGPT
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 람다와 수신 객체 지정 함수 타입 (0) | 2023.12.31 |
---|---|
코틀린 동반 확장 (0) | 2023.12.31 |
코틀린 확장 함수 (0) | 2023.12.31 |
코틀린 비지역적 제어 흐름 (0) | 2023.12.31 |
코틀린 인라인 함수와 프로퍼티 (0) | 2023.12.31 |