[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. 확장 함수와 데이터 타입 활용 시 고려 사항
- 명확한 용도: 확장 함수를 작성할 때 어떤 데이터 타입에 사용될지 명확히 정의해야 합니다.
- 네임스페이스 충돌: 기존 클래스에 이름이 겹치는 확장 함수를 추가할 때는 충돌을 방지하기 위해 이름을 신중히 선택해야 합니다.
위에서 살펴본 것 처럼, 데이터 타입을 활용하여 확장 함수를 효율적으로 활용할 수 있습니다. 이를 통해 코틀린의 확장 함수를 사용하여 기존 클래스에 새로운 기능을 추가할 수 있습니다.