[kotlin]스코프 함수(apply, run, with, also, let)
🌈비슷하게 동작하여 헷갈리는 경우가 많아 정리하게 되었습니다. 필자는 apply, run을 선호합니다.
스코프 함수?
람다식으로 객체에 접근해 객체나 실행 결과 값을 리턴하는 함수들을 이야기합니다.
코틀린 코드를 간결하게 만들어 주기 때문에 알아두면 유용합니다.
apply, run, with, let, also의 5가지가 있습니다.
각각의 스코프 함수는 두 가지 차이점이 존재합니다.
- 객체 접근 방식 :
thisorit - 리턴 값 :
객체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과 기능이 비슷합니다. 잘 사용하지 않습니다.
Author And Source
이 문제에 관하여([kotlin]스코프 함수(apply, run, with, also, let)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@5y145/스코프-함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)