학습
Kotlin Kotlin의 확장 함수
Kotlin Kotlin의 확장 함수 — 고급
Kotlin의 확장 함수
1. 도입 (왜 배워야 하는가)
Kotlin의 확장 함수는 기존 클래스에 새로운 기능을 추가할 수 있는 유용한 기법으로, 코드의 가독성과 재사용성을 높이는 데 큰 역할을 합니다. 실무에서 확장 함수를 사용하면 기존 라이브러리나 API를 수정할 수 없을 때, 필요한 기능을 손쉽게 추가할 수 있습니다. 만약 확장 함수를 모른다면, 중복된 코드를 작성하거나 불필요한 클래스를 생성하게 되어 코드의 복잡도가 증가하고 유지보수가 어려워질 수 있습니다.
2. 핵심 개념 설명
확장 함수는 기존 클래스에 새로운 메서드를 추가하는 방법입니다. 비유하자면, 집에 새로운 방을 추가하는 것과 같습니다. 기존의 구조는 그대로 두고, 필요한 기능을 추가하여 더 많은 일을 할 수 있게 만드는 것이죠.
관련 용어 정리
| 용어 | 정의 |
|---|---|
| 확장 함수 | 기존 클래스에 새로운 함수를 추가하는 것 |
| 수신 객체 | 확장 함수가 추가되는 클래스의 인스턴스 |
| 확장 프로퍼티 | 기존 클래스에 새로 추가되는 속성 |
3. 기본 코드 예제
가장 기본적인 확장 함수의 사용법을 알아봅시다.
fun String.addExclamation(): String {
return this + "!"
}
fun main() {
val greeting = "Hello"
println(greeting.addExclamation()) // 실행 결과: Hello!
}
fun String.addExclamation(): String {:String클래스에addExclamation이라는 확장 함수를 정의합니다.return this + "!":현재 객체(this)에 "!"를 추가하여 반환합니다.val greeting = "Hello":greeting변수에 "Hello"라는 문자열을 할당합니다.println(greeting.addExclamation()):greeting에 대해 확장 함수를 호출하여 결과를 출력합니다.
4. 실전 활용 예제
예제 1: 문자열 유효성 검사
쇼핑몰에서 사용자의 이메일 주소가 유효한지 체크하는 함수입니다.
fun String.isValidEmail(): Boolean {
return this.contains("@") && this.contains(".")
}
fun main() {
val email = "[email protected]"
println(email.isValidEmail()) // 실행 결과: true
}
예제 2: 리스트의 최대값 찾기
리스트에서 최대값을 찾는 확장 함수를 구현해 보겠습니다.
fun List<Int>.maxValue(): Int? {
return this.maxOrNull()
}
fun main() {
val numbers = listOf(3, 5, 1, 8, 4)
println(numbers.maxValue()) // 실행 결과: 8
}
5. 흔한 실수와 주의사항
실수 1: 수신 객체의 타입을 잘못 지정하기
잘못된 코드:
fun Int.addOne(): Int {
return this + 1
}
올바른 코드:
fun String.addOne(): String {
return this + "1"
}
Int 타입으로 확장 함수를 정의하면, 문자열에서는 사용할 수 없습니다.실수 2: 확장 함수의 오버라이딩
확장 함수는 실제로 클래스를 수정하는 것이 아니기 때문에, 상속받은 클래스에서 오버라이딩되지 않습니다.
예를 들어:
open class Base {
open fun display() = "Base"
}
fun Base.show() = "Base Extension"
class Derived : Base() {
override fun display() = "Derived"
}
fun main() {
val obj: Base = Derived()
println(obj.display()) // 실행 결과: Derived
println(obj.show()) // 실행 결과: Base Extension
}
show 함수는 Base 클래스의 확장 함수로, Derived 클래스에서 오버라이딩되지 않습니다.6. 정리
다음에 학습하면 좋은 주제: Kotlin의 고차 함수와 람다 표현식. 이는 확장 함수와 함께 사용하여 더욱 강력한 기능을 구현할 수 있습니다.