[kotlin]스코프 함수(apply, run, with, also, let)
🌈비슷하게 동작하여 헷갈리는 경우가 많아 정리하게 되었습니다. 필자는 apply
, run
을 선호합니다.
스코프 함수?
람다식으로 객체에 접근해 객체나 실행 결과 값을 리턴하는 함수들을 이야기합니다.
코틀린 코드를 간결하게 만들어 주기 때문에 알아두면 유용합니다.
apply
, run
, with
, let
, also
의 5가지가 있습니다.
각각의 스코프 함수는 두 가지 차이점이 존재합니다.
- 객체 접근 방식 :
this
orit
- 리턴 값 :
객체
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.)