3. also

- 반환값은 호출한 객체 (return this)

- 블록문 안에서 호출한 객체에 접근할 때는 it 키워드를 사용

<예제>

fun main() {
    var person : Person = Person("david", "male", "game")

    var p : Person = person.also {
        println("also01")
        printInfo(it);
        it.hobby = "walk"
        Person("hannah", "female", "swim")
    }

    println("also02")
    printInfo(p)
}

<결과>

also01
printInfo :: 
    name -> david
    hobby -> game
    sex -> male
    
also02
//마지막 줄이 아닌 참조한 객체 자체를 반환
printInfo :: 
    name -> david
    hobby -> walk
    sex -> male

4. apply

- 호출하는 객체를 블록으로 전달

- 블록에서 호출한 객체에 접근하려면 this 키워드를 사용 (this 키워드는 생략 가능)

- also와 달리 인자값이 확장 함수로 처리 됨 (block: T.() -> Unit)

 

<예제>

var person : Person = Person("david", "male", "game")

var p : Person = person.apply {
    println("apply01")
    printInfo(this);
    this.hobby = "walk"	//this는 생략 가능
    Person("hannah", "female", "swim")
}

println("apply02")
printInfo(p)

<결과>

apply01
printInfo :: 
    name -> david
    hobby -> game
    sex -> male
apply02
//마지막 줄이 아닌 참조한 객체 자체를 반환
printInfo :: 
    name -> david
    hobby -> walk
    sex -> male

 

+ Recent posts