본문 바로가기
Kotlin

Kotlin - 기타기능(let, with, apply, run 함수)

by 봄석 2019. 1. 3.

Kotlin - 기타기능(고차함수, 동반객체)


유용한 기타 기능


- 확장 함수 : 원래 있던 클래스에 기능을 추가하는 함수

- 형변환 : 숫자형 자료형끼리 쉽게 형변환 가능

- 형 체크 : 변수의 형이 무엇인지 검사하는 기능

- 고차 함수 : 인자로 함수를 전달하는 기능

- 동반 객체 : 클래스의 인스턴스 생성 없이 사용할 수 있는 객체

- let() 함수 : 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수

- with() 함수 : 인자로 객체를 받고 블록에서 수행된 결과를 반환하는 함수

- apply() 함수 : 블록에 자기 자신을 전달하고 이 객체를 반환하는 함수

- run() 함수 : 익명함수처럼 사용하거나, 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수



let() 함수

코틀린 기본 라이브러리는 몇 가지 유용한 함수를 제공합니다. let() 함수는 블록에 자기 자신을 인수로 전달하고 수행된 결과를 반환합니다. 인수로 전달한 객체는 it으로 참조합니다. let() 함수는 안전한 호출 연산자( ?. )와 함께 사용하면 null 값이 아닐때만 실행하는 코드를 다음과 같이

나타낼 수 있습니다.

// fun<T, R> T.let(block: (T) -> R):R
var str="1"
val result=str?.let{// Int
    Integer.parseInt(it)
}

println(result)

이 코드는 str이 null이 아닐 때만 정수로 변경하여 출력하는 코드입니다.

복잡한 if문을 대체할 수 있습니다.


with() 함수

with() 함수는 인수로 객체를 받고 블록에 리시버 객체를 전달합니다. 그리고 수행된 결과를 반환합니다. 리시버 객체로 전달된 객체는 this로 접근할 수 있습니다. this는 생략이 가능하므로 다음과 같이 작성할 수 있습니다. 안전한 호출이 불가능하여 str이 null값이 아닌 경우에만 사

용해야 합니다.

// fun<T,R> with(receiver: T, block T>()->R):R
var str="hello"
with(str){//블록
    println(toUpperCase()) //this 생략
}



apply() 함수

apply() 함수는 블록에 객체 자신이 리시버 객체로 전달되고 이 객체가 반환됩니다. 

객체의 상태를 변화시키고 그 객체를 다시 반환할 때 주로 사용합니다.

//fun <T> T.apply(block: T.() ->Unit):T
 
val result =car?.apply{
    car.setColor(Color.RED)
    car.setPrice(1000)

}




run() 함수

run() 함수는 익명 함수처럼 사용하는 방법과, 객체에서  호출하는 방법을 모두 제공합니다.

익명함수처럼 사용할 때는 블록의 결과를 반환합니다. 블록안에 선언된 변수는 모두 임시로 사용되는 변수입니다. 이렇게 복잡한 계산에 임시변수가 많이 필요할 때 유용합니다.

//fun <R> run(block:()->R):R
val avg =run{
    val korean =100
    val english= 80
    val math=50
 
    (korean+english+math)/3.0
}
 

println(avg)



객체에서 호출하는 방법 객체를 블록의 리시버 객체로 전달하고 블록의 결과를 반환합니다.

안전한 호출을 사용할 수 있어서 with() 함수보다는 더 유용합니다.

//fun <T,R> T.run(block: T.() ->R):R
var str="hi"
str?.run{
    println(toUpperCase())
}



댓글