Scope Function(범위 지정 함수)

  • 객체에서 람다 함수를 호출하면 해당 함수는 일시적인 Scope를 생성하고, 해당 Scope 안에서는 객체의 이름 없이도 접근이 가능하다.

 

apply

  • 참조 연산자를 사용하지 않는다.
  • 처리가 끝나면 인스턴스를 반환한다.
fun main() {
	var a = Food("사과",2000).apply{
    	name = "세일 중인" +name
        discount()
    }
}
class Food(var name: String, var price: Int){
	fun discount(){
    	price -= 500
	}
}

run

  • 참조 연산자를 사용하지 않는다.
  • 처리가 끝나면 최종값을 반환한다.(마지막 구문의 값을 반환)
fun main() {
	var a = Food("사과",2000).apply{
    	name = "세일 중인" +name
        discount()
    }
   
    a.run {
    	println("상품명: ${name}, 가격: ${price}원")
    }
    
}
class Food(var name: String, var price: Int){
	fun discount(){
    	price -= 500
	}
}

 

 

 

with

  • 인스턴스를 파라미터로 받는다.
    with(a) {
    	println("상품명: ${name}, 가격: ${price}원")
    }

 

also

  • 처리가 끝나면 인스턴스를 반환한다.
  • 파라미터를 통해 인스턴스를 넘긴다.

---- price 가 중복될 경우! -----

fun main() {
	var name = "오렌지"
	var a = Food("사과",2000).also{
    	it.name = "세일 중인" +it.name
        discount()
    }
}
class Food(var name: String, var price: Int){
	fun discount(){
    	price -= 500
	}
}

 

 

let

  • 처리가 끝나면 최종값을 반환한다.
  • 파라미터를 통해 인스턴스를 넘긴다.

---- price 가 중복될 경우!  -----

fun main() {
    var price = 5000
	var a = Food("사과",2000).apply{
    	name = "세일 중인" +name
        discount()
    }
   
    a.let {
    	println("상품명: ${it.name}, 가격: ${it.price}원")
    }
    
}
class Food(var name: String, var price: Int){
	fun discount(){
    	price -= 500
	}
}

 

 

 

+ Recent posts