Kotlin

[android : kotlin] 코틀린 apply 사용방법 및 총정리 : 스코프 함수(Scope Functions)


코틀린 apply 사용방법

apply와 같은 스코프함수는 람다식을 사용합니다. 중괄호{}로 묶어서 사용하게 됩니다. 중괄호 안에서 임시 범위가 형성됩니다. 이 범위에서는 이름없이 객체에 접근 할 수 있습니다.  그럼 왜 쓸까요?  특정 객체를 생성과 동시에 초기화를 할때 사용합니다. 

다음 예제 코드들의 실행결과름 참고하세요.

class Person {
    
    constructor( name: String,  age: Int,  city: String){
        this.name = name
        this.age = age
        this.city = city
    }
    
    constructor( name: String) {
        this.name = name
    }
    
    var name: String? = null
    var age = 0
    var city: String? = null
    
}

fun main() {
    val tePerson = Person("IU").apply {
        age = 27
        city = "Seoul"        
    }
    println("${tePerson.name}") 
}

[실행결과]

IU

apply를 사용하면 선언한 객체이름을 생략하고 접근이 가능합니다.

//일반적인 사용방법
val layoutParam = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT
					, LinearLayout.LayoutParams.WRAP_CONTENT)
layoutParam.gravity = Gravity.CENTER_HORIZONTAL
layoutParam.topMargin = 100
layoutParam.bottomMargin = 200


//apply를 사용하면 layoutParam를 생략하고 객체 내부 속성에 접근이 가능합니다.

val param = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT
			, LinearLayout.LayoutParams.WRAP_CONTENT).apply{

	gravity = Gravity.CENTER_HORIZONTAL
	topMargin = 100
	bottomMargain = 200
}
exoPlayer = SimpleExoPlayer.Builder(this).build().apply {
	setAudioAttributes(uAmpAudioAttributes, true)
	setHandleAudioBecomingNoisy(true)
	addListener(ExoPlayerListener())
}
val loginParams = Bundle().apply {
	putString(LOGIN_EMAIL, email)
	putString(LOGIN_PASSWORD, password)
}
fun dbInsert(user: UserInfo) = SqlBuilder().apply {
	append("INSERT INTO TB_USER (name, email, age) VALUES ")
	append("(?", user.name)
	append(",?", user.email)
	append(",?)", user.age)
}.also {
	print("실행결과: $it")
}

코틀린 스코프함수 정리

스코프 함수블록내 argument
( 중괄호 안{} )
리턴 값
T.let()itR (블록 안의 실행 결과를 리턴)
T.also()itT (블록 안의 실행결과와 상관없이 T를 피턴)
T.run()thisR
run()thisR
with(T)thisUnit
T.apply()thisR

[REFERENCE]

kotlinlang.org/docs/reference/scope-functions.html#scope-functions

[코틀린 더 알아보기]

[android : kotlin] 코틀린 클래스와 생성자(Constructor) 및 용어 정리 : 프로퍼티(Property), 인스턴스(Instance), override, open class , open fun

[android : kotlin] 코틀린 .let 사용법 예제 및 총정리 : 스코프 함수(Scope Functions)

[android : kotlin] 코틀린 lateinit, lazy 사용방법 및 예제

Leave a Reply

error: Content is protected !!