[kotlin] 확장 함수와 관련된 데이터 타입 활용 in 코틀린

코틀린은 확장 함수를 이용하여 기존 클래스에 새로운 메서드를 추가할 수 있는 기능을 제공합니다. 이를 통해 기존 코드를 수정하지 않고도 클래스에 메서드를 추가할 수 있어 매우 편리합니다. 그러나 확장 함수를 어떤 상황에서 사용해야 하는지, 특히 데이터 타입을 활용하여 어떻게 좀 더 효과적으로 확장 함수를 작성할 수 있는지에 대해 살펴보겠습니다.

1. 데이터 클래스의 확장 함수 활용하기

data class Person(val name: String, val age: Int)

fun Person.isAdult(): Boolean {
    return age >= 20
}

fun main() {
    val person = Person("Alice", 25)
    println(person.isAdult())  // true
}

위 예제에서 Person 데이터 클래스에 isAdult라는 메서드를 추가했습니다. 이를 통해 Person 객체의 나이에 따라 성인 여부를 확인할 수 있습니다.

2. Nullable 타입의 확장 함수 활용하기

fun String?.isNotNullOrBlank(): Boolean {
    return !this.isNullOrBlank()
}

fun main() {
    val nullString: String? = null
    val emptyString: String? = ""

    println(nullString.isNotNullOrBlank())  // false
    println(emptyString.isNotNullOrBlank()) // false
}

String? 타입에 대한 확장 함수로 isNotNullOrBlank를 정의했습니다. 이를 통해 Nullable한 문자열이 null이 아니고 공백이 아닌지를 확인할 수 있습니다.

3. 제네릭 확장 함수 활용하기

fun <T> List<T>.customPrint() {
    for (item in this) {
        println(item)
    }
}

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)
    numbers.customPrint()
}

List<T>를 대상으로 하는 제네릭 확장 함수인 customPrint를 정의했습니다. 이를 통해 모든 종류의 리스트에 사용할 수 있는 메서드를 추가할 수 있습니다.

4. 확장 함수와 데이터 타입 활용 시 고려 사항

위에서 살펴본 것 처럼, 데이터 타입을 활용하여 확장 함수를 효율적으로 활용할 수 있습니다. 이를 통해 코틀린의 확장 함수를 사용하여 기존 클래스에 새로운 기능을 추가할 수 있습니다.

참고: 코틀린 공식 문서 - 확장 함수