2016-07-07 7 views
15

Kotlin에서 'by'키워드는 무엇을합니까? 안드로이드에 대한 개발하는 동안 가끔 뭔가 건너 다음과 같습니다 : 나는 키워드 '로'의 의미가 무엇인지 이해하지 못하는Kotlin의 'by'키워드는 무엇을합니까?

var someModel: someViewModel by notNullAndObservable { vm -> 
    ... 
} 

. Kotlin reference에서

+5

https://kotlinlang.org/docs/reference/delegated-properties.html –

답변

29

첫 번째는 위가 사용이되는 Delegated Properties 인, by 두 가지 용도를 찾을 수 :

우리는 모든 그들을 수동으로 구현할 수 있지만 속성의 특정 일반적인 종류 즉,있다 우리가 필요로 할 때, 한 번만 구현하고 라이브러리에 넣는 것은 매우 좋을 것입니다. 예를 들어 게으른 속성이 포함됩니다. 첫 번째 액세스시에만 값이 계산되고 관찰 가능 속성 : 리스너가이 속성에 대한 변경 사항을 알리면 속성이지도에 저장되고 각 필드는 별도로 저장되지 않습니다.

여기에서는 getter/setter를 작업을 수행하고 공통 코드를 포함 할 수있는 다른 클래스에 위임합니다. 다른 예로서, Kotlin의 의존성 인젝터 중 일부는 getter가 의존성 주입 엔진에 의해 관리되는 인스턴스의 레지스트리로부터 값을 수신하도록 위임함으로써이 모델을 지원합니다.

그리고 Interface/Class delegation은 다른 사용하는 것입니다 : 대표단 패턴 구현 상속에 좋은 대안이 될 입증되었습니다

, 그리고 코 틀린은 기본적으로 제로 상용구 코드를 필요로 지원합니다. Derived 클래스는 인터페이스 Base에서 상속 받아 모든 public 메서드를 지정된 객체에 위임 할 수 있습니다.

여기에서 인터페이스를 다른 구현에 위임 할 수 있으므로 구현 클래스는 변경하려는 내용 만 재정의해야하며 나머지 메소드는 완전한 구현으로 다시 위임됩니다.

실제 예제는 특정 컬렉션 인터페이스를 다른 클래스에 위임 한 다음 readonly 구현에서 다르게해야하는 모든 것을 재정의하는 Klutter Readonly/Immutable collections입니다. 다른 모든 방법을 수동으로 위임 할 필요가없는 많은 작업을 절약 할 수 있습니다.

두 언어 모두 Kotlin language reference으로 덮어 씌여 있습니다. 해당 언어의 기본 항목으로 시작하십시오.

관련 문제