[Kotlin] 스코프 함수

강승구·2022년 12월 31일

스코프함수는 함수형 언어의 특징을 조금 더 편리하게 사용할 수 있도록 코틀린에서 기본으로 제공하는 함수들이다.

클래스에서 생성한 인스턴스를 스코프함수에 전달하면 인스턴스의 속성이나 함수를 좀 더 깔끔하게 불러 쓸 수 있다.

apply

인스턴스를 생성한 후 특정 변수에 할당하기 전에 초기화 작업을 수행할 때 많이 사용한다.

apply 함수 내의 모든 명령이 수행되고나면 새로 생성된 인스턴스를 반환한다.

fun main(){
    val book1 = Book("Kotlin", 10000).apply{
		//기존에는 인스턴스 함수를 사용해 속성을 변경해주었다.
        //book.name = "Kotlin 1"
        //book.discount()

        //apply 함수에서는 참조연산자를 통해 프로퍼티에 접근하지 않고 인스턴스 생성과 동시에 바로 초기화 가능
        name = "Kotlin 1"
        discount()
}

//apply함수를 통해 새롭게 정의된 프로퍼티가 book1 인스턴스에 적용된다.
println(book1.name)
println(book1.price)

class Book(var name: String, var price: Int){
    fun discount(){
        price -= 2000
    }
}

run

apply와 동일하지만 마지막 구문을 반환값으로 변수에 저장한다.

특정 인스턴스의 프로퍼티를 출력하거나 계산값으로 활용하는 등의 핸들링을 할 때 사용하면 편리하다.

fun main(){
    val book1 = Book("Kotlin", 10000).apply{
        name = "Kotlin 1"
        discount()
		}
		println(book1.name)
		println(book1.price)

    //run은 apply와 동일하지만 마지막 구문을 반환값으로 사용한다.
    val book2 = book1.run{
			//book1의 price를 book2라는 변수에 저장
			price
		}
		println(book2)
}

class Book(var name: String, var price: Int){
    fun discount(){
        price -= 2000
    }
}

with

run과 약간의 코드상의 차이를 제외하면 동일한 함수이다.

fun main(){
    val book1 = Book("Kotlin", 10000).apply{
        name = "Kotlin 1"
        discount()
		}
		println(book1.name)
		println(book1.price)

    val book2 = book1.run{
			price
		}
		println(book2)

		val book3 = with(book1){
        	price
    	}
    println(book3)
}

class Book(var name: String, var price: Int){
    fun discount(){
        price -= 2000
    }
}

also/let

profile
강승구

0개의 댓글