Notice
Recent Posts
Recent Comments
Link
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Kotlin
- GIT
- PR
- suspend
- coroutine
- 진짜일본어
- pullrequest
- blog
- 책추천
- KotlinInAction
- 안드로이드
- ai
- CustomTab
- github
- 일본어기초
- posting
- 학습지
- Android
- 일본어문법
- n3문법
- errorhandling
- 진짜학습지후기
- 코틀린
- androidstudio
- webflux
- rxjava
- 책리뷰
- 인공지능
- jlpt
- 진짜학습지
Archives
코딩하는 개굴이
[Kotlin] let, apply, run, with, also 본문
반응형
코틀린의 확장 함수들
kotlin 은 확장함수들을 제공하여 객체를 사용 시 명령문들을 블록으로 묶어 간결하게 사용할 수 있게 해준다.
let
매개 변수화 된 타입 T의 확장함수로, 자기 자신을 받아서 반환하는 람다 식의 형태이다.
- let 함수를 사용하여 해당 객체의 상태를 변경할 수 있다.
- ?.let {} 형태에서 let 블럭 안에는 non-null 만 들어올 수 있기 때문에 not-null 체크에 사용할 수 있다.
- elvis operator 를 사용해서 기본 값을 지정할 수 있다.
- 반환하는 값이 명시적으로 없을 경우, Unit 타입을 반환한다.
val introducePerson = person.let {
it.name = "Gaegul"
it.height = 158
it
} //Return 으로 본인을 반환
val introduceString = person.let {
it.name = "Doraemon"
it.height = 129
"{$name is $height tall}
}
val teacherName = person?.let {it.name} ?: "Tom"
let 을 이용한 null 체크
invoke 자기 자신을 호출 해 주는 역할
null 이 아닐때
var nullable = null
var result = nullable?.let {
//null 이 아닐 때 실행 코드
}
result = nullable ?: "null" //null 일 경우 "null"을 할당
//확장함수가 아닌 일반함수 형태
nullable ?: {
// null 일 때 실행 코드
} ()
nullable ?: {
//null 일 때 실행 코드
}.invoke()
nullable ?: fun () {
//null 일 때 실행 코드
}()
nullable ?: fun () {
//null 일 때 실행 코드
}.invoke()
//가독성을 위해 주로 사용
nullable ?: run {
//null 일 때 실행 코드
}
// 일반 함수형이 아니므로 주로 아래 것을 사용하는 것이 좋음
result = nullable?.let {
// null 이 아닌 경우
} ?: run {
// null인 경우
}
with
with 는 일반 함수로 객체 receive를 직접 입력받고, 객체를 사용하기 위한 두번째 블럭 {}에서는 객체 recieve를 입력받은 것에 대해서 this를 사용하지 않고 쓸 수 있다.
- 반환하는 값이 명시적으로 없을 경우, Unit 타입을 반환한다.
val person = Person("Gaegul", 158)
with(person) {
println(name)
println(height)
//this를 사용한다. (it 이 아님)
}
run
- with 과는 달리 일반 함수가 아니라 확장함수의 형태이다.
확장함수이기 때문에 safecall (.?)을 붙여 non-null 일 때만 실행 가능하며, 계산 혹은 지역변수 범위를 제한할 때 사용한다. - 반환하는 값이 명시적으로 없을 경우, Unit 타입을 반환한다.
val fullName = person.run {
name = name + "2moja"
}
- 확장함수가 아니고 블럭에 입력값이 없는 형태로 객체를 생성하기 위한 명령문을 블럭 안에 묶어 가독성을 높일때 사용한다.
- 반환하는 값이 명시적으로 없을 경우, Unit 타입을 반환한다.
val person = run {
val name = "Gaegul2moja"
val height = 158
Person(name, height)
}
apply
- 확장함수로 블럭 함수의 입력을 람다의 리시버로 받아, 호출 시 it 이나 this 를 사용할 필요가 없다.
- run 과 유사하지만 return 값을 받지 않으며 무조건 자기 자신을 반환한다.
val person = Person("", 0)
val resultPerson = person.apply {
name = "Gaegul2moja"
height = 158
}
also
- 확장함수이다.
- 블럭함수의 입력으로 T를 받아, it을 사용해 프로퍼티에 접근한다.
- 객체의 속성을 전혀 사용하지 않거나 변경하지 않는 경우 사용한다.
- run 과 유사하지만 return 값을 받지 않으며 무조건 자기 자신을 반환한다.
val persons = arrayListOf("G", "A", "E", "Gul")
persons
.also {println("add 하기 전에 데이터 확인print : $it")}
.add("2moja")
참고 링크
반응형
'안드로이드 > KOTLIN' 카테고리의 다른 글
[Kotlin IN ACTION] 코틀린 타입 시스템 (0) | 2021.04.11 |
---|---|
[Kotlin IN ACTION] 클래스, 객체, 인터페이스 (0) | 2021.04.04 |
[Kotlin IN ACTION] 함수 정의와 호출 (0) | 2021.03.29 |
[Kotlin IN ACTION] 코틀린 기초 문법 (1) | 2021.03.21 |
[Kotlin IN ACTION] 코틀린이란 무엇이고 왜 필요할까? (0) | 2021.03.21 |
Comments