Kotlin에선 확장함수라는 것을 지원한다.
기존 클래스에 메소드를 추가하는 방법이다. 확장 함수는 static 메서드라 한다.
코드로 보자
class ExtensionFunction {
fun getResult(list: List<Int>): Int = list.plusAll()
fun List<Int>.plusAll(): Int {
var addAll: Int = 0
this.forEach {
addAll += it
}
return addAll
}
}
기존 Kotlin에 List 클래스에서는 list내의 모든 Int값을 더해주는 메서드가 없다. 이렇게 기존 class에 뭔가 자기만에 메서드를 가지고 싶다면 확장함수를 이용해서 위 코드와 같이 list내 모든 값을 더해주는 메서드를 만들 수 있다.
아래 코드는 결과 값을 받아오는 코드이다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val list = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result = ExtensionFunction().getResult(list)
Log.d(TAG, "onCreate: $result")
}
이렇게만 보면 상당히 구려보이는데 위에서 말했듯 확장 함수는 static이라 프로젝트에서 파일하나를 만들고 거기에 확장함수를 박아놓으면 다른 클래스에서는 안 보이게 되어 코드 라인 수를 줄이는 효과를 볼 수 있다. 나는 가독성을 상당히 좋아하기 때문에 상당히 반가운 기능이다.