일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ViewModel
- SplashFragment
- DispatchTouchEvent
- CalendarView
- HTML
- InAppPurchase
- ayncAfter
- javascript
- Kotlin
- 스터디
- retrofit2
- MotionEvent
- SWIFT
- IOS
- CSS
- aab
- progressbar
- viewpager2
- RxJava
- imagepicker
- 개발
- MemoList
- Android
- UIPickerView
- dispatchQueue
- web
- Alamofire
- 실행지연
- Dropdown
- RecyclerView
- Today
- Total
멜팅비의 개발 공부
[Kotlin] 코틀린 let, apply, run, with 함수 간단 정리 본문
코틀린에서 제공하는 함수 정리
코딩하면서 자주 사용하는 코틀린 함수들에 대한 내용을 정리하기 위해 포스팅하게 되었다.
let()
inline fun <T, R> T.let(block: (T) -> R): R
let 함수를 호출하는 객체를 블록의 인자로 넘기고, 블록의 결과 값을 반환한다.
if (value != null) 과 같은 null check를 대신할 수 있다.
-> null check 후 코드를 실행하고 싶거나, 블록 내의 결과물을 반환하고 싶은 경우 주로 사용
val str: String? = "Hello, World"
// 기존 방식
if (str != null) {
println(str)
}
// let을 사용한 경우
str?.let {
println(str)
}
실행결과 : Hello, World
apply()
fun <T> T.apply(block: T.() -> Unit): T
apply() 함수는 함수를 호출한 객체를 이어지는 함수 블록의 리시버로 전달한다.
-> 특정 객체를 생성하면서 함께 호출해야 하는 초기화 코드가 있는 경우 사용
// apply()함수를 사용하지 않고 초기화를 하는 경우
val param = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT)
param.gravity = Gravity.CENTER_HORIZONTAL
param.weight = 1f
param.topMargin = 100
param.bottomMargin = 100
위 코드를 apply() 함수를 사용하게 되면
val param = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.CENTER_HORIZONTAL
weight = 1f
topMargin = 100
bottomMargin = 100
}
run()
run() 함수는 인자가 없는 익명 함수처럼 사용하는 형태와 객체에서 호출하는 형태를 제공
fun <T> T.apply(block: T.() -> Unit): T > 인자가 없는 익명 함수 형태
-> 이어지는 블록 내에서 처리할 작업들을 넣어줄 수 있고, 값을 반환하지 않거나 특정 값을 반환할 수 있다.
fun <R> run(block: () -> R): R > 객체에서 호출하는 형태
-> 객체에서 이 함수를 호출하는 경우 객체를 리시버로 전달받으므로, 특정 객체의 메서드나 필드를 연속적으로 호출할거나 값을 할당할 때 사용
* apply 함수와 유사하지만,
apply 함수는 객체를 생성함과 동시에 연속된 작업을 수행할 때 사용
run 함수는 이미 생성된 객체의 메서드나 필드를 연속적으로 호출할 때 사용
recyclerView?.run {
layoutManager = LinearLayoutManager(this)
adapter = viewAdapter
}
null safety 검사 가능
with()
fun <T, R> with(receiver: T, block: T.() -> R): R
with() 함수는 인자로 받는 객체를 이어지는 블록의 리시버로 전달하며, 블록의 결과값을 반환한다.
run() 함수와 기능은 동일하나, 리시버로 전달할 객체가 어디에 위치하는지가 다름
with(recyclerView) {
layoutManager = LinearLayoutManager(this)
adpater = viewAdapter
}
'개발 공부 > [Android 개발]' 카테고리의 다른 글
[Android] 안드로이드 android.view.WindowManager$BadTokenException: Unable to add window 에러 해결방법 (0) | 2021.03.02 |
---|---|
[Android-Kotlin] SplashFragment에서 화면이동하기 (0) | 2021.03.02 |
[Android-Kotlin] 안드로이드 Array를 ArrayList로 변환/ ArrayList를 Array로 변환 (0) | 2021.03.02 |
[Android-Kotlin] MotionEvent 강제 효과 주기(드래그, 스크롤) (0) | 2021.02.23 |
RxJava 기본 개념 및 구조 (0) | 2021.02.18 |