코틀린에서는 기존 클래스에 새로운 메서드를 추가하는 것처럼 확장 함수(extension function)를 사용하여 해당 클래스의 메서드처럼 동작하게 만들 수 있습니다. 이는 실제로 해당 클래스를 변경하거나 상속하지 않고도 가능합니다.
확장 함수의 장점
- 모듈성: 기존 코드를 수정하지 않고도 새로운 기능을 추가할 수 있습니다.
- 유연성: 라이브러리나 API 등 외부 소스코드를 수정하지 않고도 확장 함수를 사용해 기능을 추가할 수 있습니다.
- 읽기 쉬운 코드: 확장 함수를 통해 더 직관적이고 읽기 쉬운 코드를 작성할 수 있습니다.
물론이죠. 다른 예시를 들어보겠습니다.
예시 시나리오
Int
클래스에는 해당 정수가 홀수인지를 확인하는 함수가 내장되어 있지 않습니다. 이를 확인하기 위해서는 주로 %
연산자를 사용하여 2로 나눈 나머지를 확인합니다. 하지만 확장 함수를 이용하면 Int
클래스에 이러한 기능을 "추가"할 수 있습니다.
예시 코드
// 1. Int 클래스에 "isOdd"라는 확장 함수를 정의합니다.
fun Int.isOdd(): Boolean {
// this는 확장 함수 내부에서 수신 객체(receiver object)를 참조하기 위해 사용됩니다.
// 여기서 수신 객체는 확장 함수를 호출하는 Int 인스턴스를 말합니다.
return this % 2 == 1
}
fun main() {
val number = 5
// 2. 정의한 확장 함수를 Int 객체에 대해 호출합니다.
if (number.isOdd()) {
println("$number is an odd number") // 출력: "5 is an odd number"
} else {
println("$number is an even number")
}
}
상세 설명
fun Int.isOdd()
:Int
클래스에isOdd
라는 이름의 확장 함수를 정의합니다.return this % 2 == 1
: 여기서this
는 확장 함수가 호출되는 Int 객체를 참조합니다.%
연산자를 사용하여 2로 나눈 나머지가 1인지 확인하여 홀수 여부를 반환합니다.val number = 5
:number
이라는 변수에 5라는 정수 값을 할당합니다.if (number.isOdd())
:isOdd
확장 함수를number
에 대해 호출하여 홀수인지 확인합니다.println("$number is an odd number")
: 홀수일 경우 해당 메시지를 출력합니다.
이러한 방식으로 확장 함수는 기존 클래스에 새로운 기능을 추가하는 것처럼 사용할 수 있으며, 특히 외부 라이브러리나 API의 클래스에 추가적인 기능을 부여할 때 유용하게 사용됩니다.
728x90
'Language > Kotlin' 카테고리의 다른 글
코틀린의 콜렉션 연산: take, drop, takeLast, dropLast, takeLastWhile, dropWhile (0) | 2023.08.29 |
---|---|
코틀린의 함수형 콜렉션 연산 (0) | 2023.08.29 |
Retrofit(feat. 시뮬레이션 코드) (0) | 2023.08.25 |
코틀린의 Elvis 연산자 (?:) (0) | 2023.08.25 |
리플렉션(Reflection) in Kotlin & Spring (0) | 2023.08.24 |