728x90
반응형
1. 확장 함수(Extension Function)
확장 함수는 기존 클래스에 새로운 함수나 속성을 추가하는 방법입니다. 클래스 코드를 수정하지 않고도 메서드를 추가할 수 있어 매우 유용합니다.
(1) 확장 함수 정의
fun String.addExclamation(): String {
return this + "!"
}
val greeting = "Hello"
println(greeting.addExclamation()) // "Hello!"
- this는 확장 함수가 호출되는 객체를 나타냅니다.
- 확장 함수는 기존 클래스의 멤버처럼 사용할 수 있습니다.
(2) 확장 함수 활용
문자열의 확장 함수
fun String.isEmail(): Boolean {
return this.contains("@") && this.contains(".")
}
val email = "example@gmail.com"
println(email.isEmail()) // true
리스트의 확장 함수
fun List<Int>.sumOfSquares(): Int {
return this.map { it * it }.sum()
}
val numbers = listOf(1, 2, 3)
println(numbers.sumOfSquares()) // 14 (1² + 2² + 3²)
2. 확장 속성(Extension Property)
확장 속성을 사용하면 클래스에 속성을 추가할 수 있습니다.
val String.firstChar: Char
get() = this[0]
val word = "Kotlin"
println(word.firstChar) // 'K'
3. 표준 라이브러리 활용
코틀린은 많은 유용한 표준 라이브러리 함수들을 제공합니다. 대표적인 함수 몇 가지를 살펴보겠습니다.
(1) let
let은 특정 객체를 임시로 사용할 때 유용합니다.
val name: String? = "Alice"
name?.let {
println("Name is $it")
} // "Name is Alice"
(2) run
run은 블록 내부에서 객체를 처리한 결과를 반환합니다.
val result = "Kotlin".run {
println("String length: ${this.length}")
this.uppercase() // 반환값
}
println(result) // "KOTLIN"
(3) apply
apply는 객체 설정에 사용됩니다. 반환값은 객체 자체입니다.
val person = Person().apply {
name = "Bob"
age = 25
}
println(person.name) // "Bob"
(4) also
also는 객체를 설정하면서 디버깅하거나 부가 작업을 할 때 유용합니다.
val numbers = mutableListOf(1, 2, 3).also {
println("Original list: $it")
it.add(4)
}
println(numbers) // [1, 2, 3, 4]
(5) with
with는 객체를 컨텍스트로 사용하여 여러 작업을 수행합니다.
val builder = StringBuilder()
with(builder) {
append("Hello, ")
append("Kotlin!")
}
println(builder.toString()) // "Hello, Kotlin!"
4. 예제: 확장 함수와 표준 라이브러리 결합
fun String.maskEmail(): String {
val parts = this.split("@")
return if (parts.size == 2) {
parts[0].replace(Regex("."), "*") + "@" + parts[1]
} else this
}
fun main() {
val email = "example@gmail.com"
val maskedEmail = email.maskEmail()
maskedEmail.let {
println("Masked email: $it")
}
}
5. 확장 함수의 한계
- 확장 함수는 클래스 내부의 private 또는 protected 멤버에 접근할 수 없습니다.
- 멤버 함수와 이름이 같은 확장 함수가 있을 경우, 멤버 함수가 우선 호출됩니다.
728x90
반응형
'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
[Kotlin] 8. 코틀린 DSL(Domain-Specific Language) 소개와 작성 방법 (0) | 2024.11.25 |
---|---|
[Kotlin] 7. 코틀린의 코루틴과 비동기 프로그래밍 (0) | 2024.11.24 |
[Kotlin] 5. 컬렉션과 함수형 프로그래밍 (1) | 2024.11.22 |
[Kotlin] 4. 클래스와 객체 (0) | 2024.11.20 |
[Kotlin] 3. 조건문과 반복문 (0) | 2024.11.19 |