일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- GitHub
- IntelliJ
- ruby
- boj
- ruby2d
- Java
- OAuth
- rubymine
- maven
- 루비
- RaspberryPi
- Godot
- gnuplot
- jetbrains
- CPP
- C
- Python
- gradle
- error
- Shell
- 개발노트
- Spring
- JS
- OTLanguage
- Baekjoon
- react
- Vane
- Android
- kotlin
- plugin
- Today
- Total
PersesTitan(페르) 기술블로그
[Kotlin] apply, also, run, with, let 정리 본문
코틀린에서는 apply, also, run, with, let라는 범위지정함수를 지원하는데 해당 함수를 사용하여 코드를 간편하게 만들 수 있게 해줍니다.
각 함수 특징 정리
함수명 | 접근 방식 | 반환 값 | 사용처 | 기타 |
---|---|---|---|---|
apply | this | 수신 객체 | 객체의 값 변경 | |
also | it(지정한 변수명) | 수신 객체 | apply와 유사 | 객체 관련 동작실행등에 사용됨 |
run | this | 반환 타입 | 수신 객체를 이용해 값을 반환 | |
with | this | 반환 타입 | run과 동일 | 단, 수신 객체를 파라미터로 받음 |
let | it(지정한 변수명) | 반환 타입 | run, with와 동일 | null check가 가능 |
예시로 사용될 클래스
해당글은 TestItem class을 예시로 작성하였습니다.
class TestItem {
var a: Int = 0
var b: String = "Kotlin"
}
apply
apply는 객체의 값을 변경할 때 많이 사용합니다. 객체의 값을 지정하고 자신의 값을 반환하기 때문에 생성 후 원하는 값을 변경하여 바로 변수나 값을 반환할 수 있어 깔끔한 코드 작성을 가능하게 해줍니다.
val item: TestItem = TestItem().apply {
a = 1234
b = "HelloWorld"
}
println(item.a)
println(item.b)
// 출력
// 1234
// HelloWorld
also
also는 객체관련 동작 및 실행에서 사용합니다. apply와 같이 자기 자신을 리턴하기 때문에 반환 값이나 변수에 바로 넣어서 사용할 수 있습니다. apply는 객체의 값을 변경하는데 사용하지만 also는 변환과 해당 객체와 관련된 동작까지 하는데 사용합니다.
TestItem().also { item ->
println(item.a)
println(item.b)
}
// 출력
// 0
// Kotlin
run
run는 apply와 같은 동작을 하지만 마지막 라인의 타입을 반환하는 특징이 있습니다. 객체를 이용하여 바로 특정 타입으로 반환할때 유용하게 사용할 수 있습니다.
예제 코드에서는 a 값을 반환하여 value에 a 값을 저장하였지만 객체에 반환하는 함수를 불러와 사용하는 것도 가능하고 다양한 응용방법이 존재합니다.
val value: Int = TestItem().run {
a = 1234
b = "Hello World"
a // 반환할 값
}
println(value)
// 출력
// 1234
with
with는 run과 동일하지만 객체를 파라미터형태로 넘겨준다는 차이가 있습니다. 동작은 사실 상 run과 동일하기 때문에 원하는 것을 골라서 사용하면 됩니다.
위에 run의 코드와 동일한 동작이지만 수신 객체를 파라미터로 넘겨주는 특징이 존재합니다.
val value: Int = with(TestItem()) {
a = 1234
b = "Hello World"
a // 반환할 값
}
println(value)
// 출력
// 1234
let
let은 run과 with과 동작은 동일하지만 Safe Call(?.)를 사용하여 null체크를 하는 용도로도 많이 사용합니다. 접근 방식은 run, with와는 다르게 사용자가 지정한 변수명으로 수신 객체에 접근한다는 차이도 존재합니다.
아래 코드와 같이 수신 객체가 null이 아닐때만 값 변경 및 동작 실행을 할 수 있습니다. let또한 run, with와 같이 반환 값이 존재하기 때문에 수신 객체가 null일 경우 값이 null이 저장될 수 있으므로 해당 부분은 주의하여 사용하여야 할 것 같습니다.
var item: TestItem? = null
item?.let { test ->
test.a = 1234
test.b = "Hello World"
}
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 기초 - 변수 정의 (var, val, lateinit) (0) | 2023.10.11 |
---|---|
[Kotlin] 코틀린 기초 - 생성자 순서 (주 생성자, init, 보조 생성자) (0) | 2023.10.10 |
[Kotlin] 코틀린 기초 - 클래스 및 생성자 (constructor) (0) | 2023.10.09 |
[Kotlin] 코틀린 기초 - 접근제어자 (0) | 2023.10.08 |