18. 확장함수
snake edited this page Dec 26, 2018
·
4 revisions
- 확장함수는 이미정의된 클래스에 멤버함수를 정의하는 것이다.
- 확장함수를 실행함과 동시에 객체정보를 공유할 수 있다.
- 확장함수로 넘겨진 파라메터는 val(읽기전용)로 설정된다.
- 확장함수에 파라메터로 함수를 넘기면 객체설정 및 이벤트핸들러를 구현하기 편해진다.
-
소스코드
fun main (args : Array <String>){ fun String?.myFunction(s : String, n : Int ) : String?{ var sTooManyTalk = "$this : added \n" (1.. n).forEach { sTooManyTalk += "${s}\n" } return sTooManyTalk } println ( "Hi".myFunction("Hi", 10) ) // apply와 다른 점은 분명히 있다. var obj = ani { crying() eat() nCount++ } println("증가된 숫자는 ${obj.nCount} 입니다."); obj.setOnEvent(3, "울어", { nCount -> println ("${nCount}번 울겠습니다.") (1..nCount).map {crying()} }) obj.setOnEvent(2, "먹어", { nCount -> println ("${nCount}번 먹겠습니다.") (1..nCount).map {eat()} }) } fun ani(extFunc: Animal.() -> Unit) : Animal{ var ani = Animal() // 확장함수가 실행되어야 한다. ani.extFunc() return ani } class Animal{ open var nCount = 0 fun crying() = println("$this>> 아흥") fun eat() = println("$this>> 우걱우걱") open fun setOnEvent(nCount : Int, message : String, extFunc: Animal.(Int) -> Unit) : Animal{ when (message){ "울어" -> {extFunc(nCount)} "먹어" -> {var n = if (nCount < 3) 3 else nCount; extFunc(n)} else -> { println("알수없는 메시지: ${ message } 입니다.")} } return this } }
-
디버깅 & 설명
-
왜 사용하는가?
-
Android Studio에 적용하기