Cute Apple
본문 바로가기
개발/Kotlin

[Kotlin] Scope Function

by 미댕댕 2022. 7. 27.

코틀린 문법을 공부하기 시작하면서 코틀린만의 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

댓글