코틀린 (Kotlin) with() apply() 함수 정리

with 함수

객체 이름을 반복하지 않고 사용하고 싶을 때 with 함수를 사용하면 편리합니다.

val stringBuilder = StringBuilder()
val text = with(stringBuilder) { //수신객체 지정
    for(letter in 'A'..'Z') {
        append(letter) //바로 사용가능, this.append(letter) 와 동일
    }
    toString() //블럭마지막은 리턴값
}

만약 with 블럭 안에서 함수 이름이 같은 바깥 함수를 호출하고 싶을 경우에는 this@OuterClass.함수() 처럼 호출하면 됩니다.

val dup = with(stringBuilder) {
    //바깥 클래스와 이름이 중첩되었고
    //바깥 클래스 함수를 호출하고 싶다면 this@outerclass.함수() 한다
    this@RamdaActivity.toString()
}

apply 함수

apply 함수는 with 와 비슷하지만 자기 자신을 리턴합니다.
객체를 생성하면서 속성을 초기화할 때 사용됩니다.
그리고 자바의 빌더 객체와 비슷한 기능을 따라할 수 있습니다.

//자신에게 전달된 수신객체를 리턴한다
val text = StringBuilder().apply {
    for(letter in 'A'..'Z') {
        append(letter) //바로 사용가능
    }
}.toString() //리턴된 StringBuilder의 toString() 을 호출

//StringBuilder 를 편리하게 사용 가능
//buildString 은 표준라이브러리로 StringBuilder와 toString() 을 호출해주는 함수
val text = buildString {
    for(letter in 'A'..'Z') {
        append(letter) //바로 사용가능
    }
}

*개인적으로 코틀린을 공부하면서 정리한 자료입니다. 수정 사항 및 이슈가 있는 경우 메일 부탁드립니다.

댓글

이 블로그의 인기 게시물

코틀린 (Kotlin) filter, map, all, any, count, find, groupBy, flatMap 함수 정리

코틀린 (Kotlin) 인터페이스 정리

RecyclerView 에서 notifyItemChanged()의 payload 이해하기