코틀린 문법을 공부하기 시작하면서 코틀린만의 Scope Fuction 이 있다는걸 알게되어 공부를 시작하게되다.
Scope Function같은 경우는 코드를 좀더 읽기 쉽게 해주는 목적이 있다.
👇 간단하게 요약하자면 아래와 같다
Function | Object reference | return value |
let | it | Lamda result |
run | this / - | Lamda result |
with | this | Lamda result |
apply | this | Context Object |
also | it | Context Object |
Result 에 따른 쓰임
Context Object
- Context Object 객체 자체이기 때문에 체인 형식으로 계속적인 호출이 가능
- 반환함수의 return 에도 쓰일 수 있음.
numberList.also { println("Populating the list") }
.apply {
add(2.71)
add(3.14)
add(1.0)
}
.also { println("Sorting the list") }
.sort()
Ramda Result
- 결과를 변수에 할당하거나, 결과에 대해 추가적인 작업 등을 수행 할 수 있음
- 또한, 반환 값을 무시하고 바로 람다식을 사용하여, 임시 범위를 만들어서 사용 가능
val numbers = mutableListOf("one", "two", "three")
//run
val addNumbersList = numbers.run {
add("four")
add("five")
}
//with
with(numbers) {
val firstItem = first()
val lastItem = last()
println("첫번째 항목: $firstItem, 마지막 항목: $lastItem")
}
Apply
- 보통 객체를 초기화 할때 많이 사용됨
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//Kotlin
val person = Person().apply{
firstName = "Fast"
lastName = "Campus"
}
//Java
Person person = new Person();
person.firstName = "Fast";
person.lastName = "Campus"
|
cs |
Also
- also는 기존 객체를 수정하거나 변경하지 않고, 디버깅을 위한 로깅 등의 추가적인 부가 작업을 하려고 할 때 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//Kotlin
Random.nextInt(100).also{
print("$it")
}
Random.nextInt(100).also{ value
print("$value")
}
//Java
int value = Random().nextInt(100);
System.out.println(value)
|
cs |
Let
- null 이 아닌 객체에서 Lamda를 실행하때 사용됨
- null Safe 한 코드를 위해 사용\
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//Kotlin
val number : Int?
val suNumberStr = number?.let{
"${sum(10, it)}"
}. orEmpty()
//Java
Integer number = null;
String sumNumberStr = null;
if(number != null){
sumNumberStr = "" + sum(10, number);
}else{
sumNumberStr = "";
}
|
cs |
With
- with는 이미 생성된 Context Object 객체를 인자로 받아서 사용하는 것이 효율적
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//Kotlin
val person = Person()
with(person){
work()
sleep()
println(age)
}
//Java
Person person = new Person();
person.work();
person.sleep();
System.out.println(person.age);
|
cs |
Run
- with와 비슷한 역할
- 이미 생성된 Context Object 객체를 사용할 때 호출
- Safe Call (?.)을 붙여서 null 체크가능
- 어떤 값을 계산할 필요가 있을때 자주 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//Kotlin
val result = serviece.run{
port = 8080
query()
}
//Java
service.port = 8080
Result result = service.query();
//Android 에서 적용시
imageView.layoutParams.run {
width = 400
height = 200
}
|
cs |
반응형
'개발 > Kotlin' 카테고리의 다른 글
[Kotlin] Serializable vs Parcelable (0) | 2022.09.07 |
---|---|
[Kotlin] Data class 와 copy() (0) | 2022.08.03 |
[Kotlin] lateinit vs by lazy (0) | 2022.07.30 |
[Kotlin] 코틀린이란? (0) | 2022.07.25 |
댓글