티스토리 뷰

반응형

Apply

 // Java
 Person person = new Person();
 person.firstName = "홍";
 person.lastName = "길동";
// Kotlin
val person = Person().apply {
    // this 생략 가능
    // this.firstName = "홍"
    // this.lastName = "길동"
    firstName = "홍"
    lastName = "길동"
}

apply 함수는 블록 내부에서 객체 프로퍼티에 직접 접근할 수 있고 반환 값으로 객체 자신을 반환한다.

주로 객체를 초기화 할 때 사용한다.

 

Also

// Java
int value = Random().nextInt(100);
System.out.print(value);
// Kotlin
Random.nextInt(100).also { value ->
    Log.d("jsh","Random value: $value")
}

// parameter 생략
Random.nextInt(100).also {
    Log.d("jsh","Random value: $it")
}

also 함수는 apply와 같이 객체를 반환하지만 파라미터 형태로 반환한다, 파라미터를 명시 가능하며 명시하지 않을 경우 it으로 접근이 가능하다.

 

주로 객체의 유효성을 확인하거나 로그를 통한 디버깅 용도로 사용한다.

 

Let

// Java
Integer number = null;
String sumNumberStr = null;

if (number != null) {
    sumNumberStr = "" + sum(10, number);
}
// Kotlin
val number: Int?

// number 가 null 이면 실행하지 않음
// number 가 null이 아니면 결과값을 셋팅
val sumNumberStr = number?.let {
    "${sum(10, it)}"
}

let 함수는 null이 아닌객체에서 람다를 실행하고, apply, also와는 다르게 코드 블록에 실행 결과가 밖으로 반환이 된다

주로 null safe 한 함수를 위해 사용한다.

 

with

// Java
Person person = new Person();
person.work();
person.sleep();
System.out.println(person.getAge());
// Kotlin
val person = Person()
with(person) {
    work()
    sleep()
    Log.d("jsh", age)
}

 

with 함수의 반환값은 람다의 결과 값, 확장 함수로 사용할 수 없다.

주로 해당 객체를 통해서 ~~한 것들을 할 수 있다 라고 표현할 때 사용한다.

 

Run

// Java
Person person = new Person();
person.setAge("30");
String age = person.nextYearAge();
// Kotlin
val age = Person().run {
    age = "30"
    nextYearAge()
}

with 함수와 비슷하다, 하지만 확장 함수로 사용 가능 하다

주로 어떤 값을 계산할 필요가 있거나 객체 구성과 결과가 한 번에 있을 때 사용한다.

반응형
댓글