[kotlin]스코프 함수(apply, run, with, also, let)

7027 단어 kotlinkotlin

🌈비슷하게 동작하여 헷갈리는 경우가 많아 정리하게 되었습니다. 필자는 apply, run을 선호합니다.


스코프 함수?

람다식으로 객체에 접근해 객체실행 결과 값리턴하는 함수들을 이야기합니다.
코틀린 코드를 간결하게 만들어 주기 때문에 알아두면 유용합니다.
apply, run, with, let, also의 5가지가 있습니다.

각각의 스코프 함수는 두 가지 차이점이 존재합니다.

  • 객체 접근 방식 : this or it
  • 리턴 값 : 객체 or 실행 결과 값

📌apply

  • 객체를 람다식 안에 파라미터로 넘김
  • this로 객체에 접근
  • this 생략 가능(보통 생략합니다.)
  • 호출한 객체를 반환
  • 객체의 초기화 작업에 많이 사용합니다.

기존 코드

val intent = Intent(this, NextActivity::class.java)
intent.putExtra("name", "홍길동")
intent.putExtra("age", 26)
startActivity(intent)

apply 코드

val intent = Intent(this, NextActivity::class.java).apply{
	putExtra("name", "홍길동")
	putExtra("age", 26)
}
startActivity(intent)

📌run

  • 두가지 방식으로 사용됩니다.
    • 객체를 람다식 안에 파라미터로 넘기는 방식
    • 객체 없이 사용하는 방식
  • this로 객체에 접근
  • this 생략 가능(보통 생략합니다.)
  • 실행 결과 값 반환
data class Person(var name: String, var age: Int)

val a = 10
val b = 20
val sum = run { a + b } // sum = 30

val person = Person("홍길동", 26)
val name = person.run { this.name } // name = "홍길동"

📌with

  • 인자로 받는 객체를 람다식 안에 파라미터로 넘기는 방식
  • this로 객체에 접근
  • this는 생략 가능
  • 실행 결과 값 반환
  • run과 기능이 비슷합니다. 잘 사용하지 않습니다.
data class Person(var name: String, var age: Int)

val person = Person("홍길동", 26)
val name = with(person) { this.name } // name = "홍길동"

📌also

  • 객체를 람다식 안에 파라미터로 넘김
  • it으로 객체에 접근 가능
  • 호출한 객체를 반환
  • apply와 기능이 비슷합니다. 잘 사용하지 않습니다.

📌let

  • 객체를 람다식 안에 파라미터로 넘김
  • it으로 객체에 접근 가능
  • 실행 결과 값 반환
  • run과 기능이 비슷합니다. 잘 사용하지 않습니다.

좋은 웹페이지 즐겨찾기