필자는 nowinandroid에 몇주전 pr을 올렸었다.
이 과정에서 가볍게 공부만 하고 넘어갔던 내용들을 보다 깊이있게 공부해보고자 한다.
이번에는 그중에서 Provider와 Property를 알아볼 것이다.
그럼 일단 Provider와 Property가 무엇인지부터 간단히 알아보자.
공식 문서에는 다음과 같이 설명한다.
Property
- Represents a value that can be queried and changed.
Provider
- Represents a value that can only be queried and cannot be changed.
한국어로 번역하면 다음과 같다.
으로 Provider와 Property는 빌드스크립트에서 value와 configuration을 관리한다.
일단은 이정도만 알아두고 Gradle의 Lazy Configuration에 대해 알아보자.
빌드가 복잡해짐에 따라 특정한 값을 추적하기가 어려워지는데 Gradle은 Lazy Configuration이라는 것을 통해 이 문제를 해결한다.
Gradle의 Lazy Property은 3가지 주요 이점을 제공한다.
자동 Task 의존성 관리만 간단히 설명하자면
어느 한 Task의 출력을 다른 Task의 입력으로 연결하여 의존성을 자동으로 파악할 수 있다는 것이다.
즉
taskB.input.set(taskA.output)
이렇게 한 Task의 출력을 다른 Task의 입력으로 연결해주면 Gradle은 알아서 TaskA부터 실행한다.
Lazy Property는 Provider와 Property라는 2가지 인터페이스로 나타낸다.
Provider
Provider.get()
으로 현재 값 반환Provider.map(Transformer)
로 다른 Provider
생성 가능Property
Provider
를 extend
한다.Property.set(T)
로 값 지정 이때 기존의 값은 덮어씌움Property.set(Provider)
는 프로퍼티의 값으로 다른 Provider
를 지정하며, 기존에 있던 값은 덮어쓴다.Provider
와 Property
인스턴스를 서로 연결할 수 있다.public abstract class Download extends DefaultTask {
@Input
public abstract Property<URI> getUri(); // abstract getter of type Property<T>
@TaskAction
void run() {
System.out.println("Downloading " + getUri().get()); // Use the `uri` property
}
}
https://docs.gradle.org/current/userguide/properties_providers.html
https://docs.gradle.org/current/userguide/lazy_configuration.html#lazy_configuration