코틀린의 확장 함수(Extension Functions)는 기존 클래스의 멤버 함수를 추가할 수 있는 강력한 기능입니다. 확장 함수를 사용하면 기존 클래스의 코드를 변경하지 않고 새로운 함수를 추가할 수 있어 유연하고 간결한 코드를 작성할 수 있습니다.
확장 함수의 선언
확장 함수는 다음과 같이 선언됩니다.
fun ClassName.extensionFunctionName(parameters: ParameterType): ReturnType {
// 함수의 내용
}
- ClassName: 확장할 클래스의 이름입니다.
- extensionFunctionName: 확장 함수의 이름입니다.
- parameters: 함수의 매개변수입니다.
- ReturnType: 함수의 반환 타입입니다.
확장 함수의 예제
// String 클래스에 확장 함수를 추가하는 예제
fun String.addExclamation(): String {
return "$this!"
}
fun main() {
val greeting = "Hello"
val excitedGreeting = greeting.addExclamation()
println(excitedGreeting) // 출력: Hello!
}
위의 예제에서 addExclamation은 String 클래스에 새로운 멤버 함수처럼 보이지만, 실제로는 확장 함수입니다. 이로써 모든 String 인스턴스에서 addExclamation 함수를 호출할 수 있게 되었습니다.
확장 함수 호출
val original = "Hello"
val result = original.addExclamation()
println(result) // 출력: Hello!
확장 함수는 일반적인 멤버 함수처럼 호출됩니다.
Nullable 타입의 확장 함수
fun String?.safeLength(): Int {
return this?.length ?: 0
}
fun main() {
val nullableString: String? = null
val length = nullableString.safeLength()
println(length) // 출력: 0
}
위의 예제에서 safeLength 함수는 String? 타입의 확장 함수로, nullable한 문자열에 대해서도 안전하게 길이를 반환합니다.
수신 객체(this) 활용
확장 함수 내에서 this를 사용하여 수신 객체에 접근할 수 있습니다.
fun String.printWithPrefix(prefix: String) {
println("$prefix$this")
}
fun main() {
val message = "World"
message.printWithPrefix("Hello, ") // 출력: Hello, World
}
위의 예제에서 printWithPrefix 함수는 문자열을 받아서 주어진 접두사와 함께 출력하는 확장 함수입니다.
확장 함수는 클래스의 내부에 직접적으로 추가되는 것이 아니라, 외부에서 정의되며 해당 클래스의 인스턴스에서 마치 내부 멤버인 것처럼 사용할 수 있습니다. 이를 통해 기존 클래스의 수정 없이 새로운 기능을 추가할 수 있어 코드의 확장성과 유지보수성을 높일 수 있습니다.
With ChatGPT
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 동반 확장 (0) | 2023.12.31 |
---|---|
코틀린 확장 프로퍼티 (0) | 2023.12.31 |
코틀린 비지역적 제어 흐름 (0) | 2023.12.31 |
코틀린 인라인 함수와 프로퍼티 (0) | 2023.12.31 |
코틀린 호출 가능 참조 (0) | 2023.12.31 |