스코프 함수 - map, let, also, run, with

·2023년 9월 7일

Scope Function : 코드 블록 내에서 객체 범위 조작

1. let

  • 최종 실행 결과 반환
  • 객체가 null이 아닌 경우에만 실행
  • safe call (?,) 사용해주기
  • it 키워드 제공
//obj = null
obj?.let -> 'let' 블록이 실행되지 않음
obj.let -> 'let' 블록이 실행되지만 객체가 null이기 NullPointerException 이 발생함

2. also

  • 수신 객체 그대로 반환 (결과값이 변경되지 않음)
  • 중간 단계에 검증하거나 로깅할 때 유용
  • safe call (?,) 사용해주기
  • null인 경우에도 실행
  • it 키워드 사용
obj = null
obj?.also { println("${it}") }
obj.also { it.. } //NullPointerException 발생

3. run

  • 람다 결과값 반환
  • this 키워드 사용 (코틀린에서는 생략)
  • 어떤 값을 계산할 필요가 있거나 여러 개의 지역변수의 범위를 제한할 때 사용
obj = null
obj = "value" ?: run { //obj가 null일 경우 실행 }

4. with

  • 람다가 실행한 결과 반환
  • 수신객체 자체가 매개변수
  • parameter로 명시적 전달
  • 수신객체는 Not Nullable
  • 결과가 필요하지 않을 때
with(person) {
    println("Name: $name, Age: $age")
    // 다른 작업들...
}

5. apply

  • 자기자신을 다시 반환하는 경우 사용
  • this 키워드를 사용하지만 코틀린에서는 주로 생략
data class Person(var name: String, var age: Int)

val person = Person("Alice", 30).apply {
    age = 31 // 객체 내의 속성을 설정
}
profile
주니어 백엔드 개발자

0개의 댓글