scope함수의 종류와 설명
범위스코프 함수의 수신객체를 람다의 수신객체로 전달하는가 아니면 람다의 파라미터로 전달하느냐에 대한 차이
- apply는 수신객체를 람다의 수신객체로 전달합니다. 주로 수신객체의 속성값을 변경할때 사용하며 수신객체를 반환하게 됩니다.
- run은 apply와 동일하며 주로 수신객체를 통한 특정동작을 수행하고 결과를 리턴할때 사용합니다. 예를 들어 수신한 격체의 속성이 유효성을 판단하는 경우에 run을 사용합니다. 또한 수신객체 없이도 동작 가능한데 이경우 run안에 수신객체를 명시해줘야합니다.
- with는 run과 동일하게 동작하지만 다른점은 확장함수로 사용되지않고 명시적으로 수신객체를 파라미터로 받아서 사용한다. 실제로는 거의 사용되지않는다고합니다.
- let은 수신객체에 대한 작업을 한 후 결과를 리턴할때 사용합니다. 람다의 파라미터로 수신객체를 받기 때문에 it 또는 다른이름으로 수신객체를 전달받는다.
또한 수신객체를 널 체크를 한뒤에 작업을 해야하는 경우 let을 사용하며 수신객체를 다른 타입으로 변경할때 사용합니다. 수신객체가 Nullable한 타입이 아닌 경우 run을 사용한다.
- also는 apply와 비슷하게 수신객체를 람다의 수신객체로 전달한다. 하지만 apply와는 다르게 속성 변경 이외에도 추가적인 다른 작업이 있는경우에 사용하는데 예를 들어 로깅, 유효성 검사등의 작업이 있다.
작업의 결과는 항상 수신객체를 리턴한다.