Kotlin

Kotlin ) 스코프 함수

Machine_웅 2022. 8. 16. 23:06
728x90
반응형

 

run let  apply also


fun main(){
    studyRun()
}

// 스코프 함수에 대해서 알아본다.
fun studyRun(){
    val runResult = SeoulPeople().people.run {
        add( People("runPack","010-3333-4444",21))
        add( People("runJeon","010-4444-5555",22))
        // 인스턴스가 유지되지 않는 일회성으로 사용할 때 유리
        "I'm Run ~ "
    }

    val letResult = SeoulPeople().people.let { people -> // 알리아싱을 통해서 사용 기본은 it
        people.add( People("letPack","010-3333-4444",21))
        people.add( People("letJeon","010-4444-5555",22))
        // 메소드 호출로 인스턴스 생성후 메소드로 이어나갈때 사용
        "I'm Let ~ "
    }


    val applyResult = SeoulPeople().people.apply {
        add( People("applyPack","010-3333-4444",21))
        add( People("applyJeon","010-4444-5555",22))
        // 사용법은 run과 동일
        // 인스턴스가 유지되어서 재사용할때 유리
        "I'm Apply ~ "
    }

    val alsoResult = SeoulPeople().people.also {  people ->
        people.add( People("alsoPack","010-3333-4444",21))
        people.add( People("alsoJeon","010-4444-5555",22))
        // 사용법은 let 과 동일
        // 타깃 객체에서 계속 해서 무언가를 해나갈때 사용
        "I'm Also ~ "
    }

    /*
    * apply 와 also 는 전달 받은 컨텍스트 오브젝트를 반환한다.  여기서는  var people  = mutableListOf<People>() 의 people를 반환.
    * 내가 스코프 함수를 돌린 녀석을 반환한다.
    * */
    println("apply : $applyResult")
    println("also : $alsoResult")


    /*
    * run 과 let은 마지막 값을 리턴한다.
    * */
    println("run : $runResult")
    println("let : $letResult")
}

class SeoulPeople(){
    var people  = mutableListOf<People>()
    init {
    }
}

data class People (val name : String, var phone : String , var age : Int)

실행결과

apply : [People(name=applyPack, phone=010-3333-4444, age=21), People(name=applyJeon, phone=010-4444-5555, age=22)]


also : [People(name=alsoPack, phone=010-3333-4444, age=21), People(name=alsoJeon, phone=010-4444-5555, age=22)]


run : I'm Run ~ 


let : I'm Let ~ 

 

 

 

with

728x90
반응형