예제 1 - 변수 할당 줄이기
let을 사용해서 불필요한 변수 할당을 줄여 메모리를 절약할 수 있다.
예제 2 - nullable 한 객체에서 let 사용하기
이렇게 let 과 세이프 콜, 앨비스 연산자를 활용하면 더 if 문 만큼 직관적이고, 간결한 코드를 작성할 수 있다.
무엇보다 자바보다 훨~~씬 멋있고 코틀린스러워서 좋다 ㅎㅎ😎
also는 this(T)를 리턴한다는 점이 포인트이다.
예제 1
let 과 also를 사용하여 코드를 한 줄로 표현할 수 있다. 표준함수에 익숙해지면 이 표현도 상당히 직관적일 것 같다.
apply 메서드는 also 메서드와 매우 유사하지만 차이점이 존재한다.
T.( ) 같은 표현에서도 알 수 있듯이 메서드의 매개변수로 주어지는 람다식이 T의 확장함수로 처리가 된다는 점이다.
T의 확장함수로 처리되기 때문에, T 의 필드를 this로 참조할 수 있다. ( 클로저를 사용하는 방식과 같다.)
확장함수에서 내부 필드를 참조할 때 this가 없어도 되기 때문에, 간단하게 내부 필드에 접근할 수 있다.
예제를 통해서 also 와 차이점을 보고, 어떤 상황에서 also 보다 apply가 편할지 알아보자.
예제 1 - 레이아웃 초기화에 활용해보기
apply 는 람다식이 확장 함수라는 것이 특징이기 때문에, 내부 필드를 수정하거나 접근하는 경우에 활용하면 간결한 코드 작성이 가능할 것으로 보인다.
run 메서드는 두가지의 형태가 있다.
예제 1 - 객체에서 호출하지 않는 형태
예제 2 - 객체에서 호출하는 형태
apply 와는 다르게 해당 객체 T를 리턴하는 것이 아니라, 람다식의 리턴 값을 그대로 리턴하게 된다.
with 는 run과 기능이 거의 똑같다. 차이점은 리시버에 해당하는 객체를 메서드의 매개변수로 넣어준다는 것이다. 무슨 차이 때문에 run 이랑 이것을 구분해 놓은 것일까..?
with 메서드는 세이프콜을 사용할 수 없기 때문에 (당연히), 널 검사를 하기 위해서는 let 과 함께 활용 할 수 있다.
예제 1
takeIf 는 매개변수인 람다식의 결과가 true 이면 값 T를 리턴하고, 아니면 null 을 리턴한다.
takeUnless 는 반대로 매개변수의 람다식의 결과가 false이면 값 T를 리턴하고 아니면 null을 리턴한다.
예제
이렇게 코틀린의 다양한 표준함수를 사용하면 기존의 코드를 더 직관적이고 간결하게 작성하는 데 많은 도움이 된다.
나도 이제 표준함수를 적극 활용하여 이에 익숙해지는 시간을 가질 예정이다. 불필요한(?) 코드를 많이 줄일 수 있을 것 같다.