Kotlin/포스팅

코틀린 확장 프로퍼티

짜집퍼박사(짜박) 2023. 12. 31. 03:05

코틀린에서 확장 프로퍼티(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