Skip to content

18. 확장함수

snake edited this page Dec 26, 2018 · 4 revisions

확장함수

  • 확장함수는 이미정의된 클래스에 멤버함수를 정의하는 것이다.
  • 확장함수를 실행함과 동시에 객체정보를 공유할 수 있다.
  • 확장함수로 넘겨진 파라메터는 val(읽기전용)로 설정된다.
  • 확장함수에 파라메터로 함수를 넘기면 객체설정 및 이벤트핸들러를 구현하기 편해진다.
  1. 소스코드

     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
         }
     }
    
  2. 디버깅 & 설명

  3. 왜 사용하는가?

    
    

  4. Android Studio에 적용하기