Gradle에서 `doFirst`와 `doLast`의 차이는 무엇인가요?
_____A1: `doFirst`는 태스크 실행 시 가장 먼저 실행되는 동작을 추가할 때 사용하고, `doLast`는 태스크 실행 시 가장 마지막에 실행되는 동작을 추가할 때 사용합니다. 즉, 태스크가 수행되는 순서 내에서 동작의 실행 위치를 지정하는 역할을 합니다.
---
Q2: `doFirst`와 `doLast`는 어떻게 사용하나요?
A2: 태스크에 동작을 추가할 때 아래와 같이 사용합니다.
```groovy
task myTask {
doFirst {
println '첫 번째로 실행되는 동작'
}
doLast {
println '마지막으로 실행되는 동작'
}
}
```
이 경우, `myTask`가 실행되면 `"첫 번째로 실행되는 동작"`이 먼저 출력되고, 작업의 나머지 부분(만약 있다면)이 실행된 뒤 `"마지막으로 실행되는 동작"`이 출력됩니다.
---
Q3: 여러 개의 `doFirst` 또는 `doLast` 블록이 있을 때 실행 순서는 어떻게 되나요?
A3:
- `doFirst`가 여러 개 있으면, 가장 늦게 추가된 `doFirst` 블록이 가장 먼저 실행됩니다(스택 구조).
- `doLast`가 여러 개 있으면, 가장 먼저 추가된 `doLast` 블록이 가장 먼저 실행됩니다(큐 구조).
예:
```groovy
task example {
doFirst { println 'First A' }
doFirst { println 'First B' }
doLast { println 'Last A' }
doLast { println 'Last B' }
```
실행순서:
```
First B
First A
(태스크의 메인 액션)
Last A
Last B
```
---
Q4: `doFirst`와 `doLast`를 언제 사용하는 것이 적절한가요?
A4:
- `doFirst`는 태스크의 주 작업 전에 반드시 실행되어야 하는 선처리 동작(환경 설정, 파일 준비 등)을 추가할 때 적합합니다.
- `doLast`는 태스크가 완료된 이후에 해야 하는 정리 작업이나 후처리 작업(로그 기록, 상태 저장 등)을 추가하는 데 적합합니다.
---
Q5: `doFirst`와 `doLast`는 태스크의 `action`과 어떤 관계가 있나요?
A5: 태스크에는 주로 `actions`가 1개 이상 포함될 수 있으며, `doFirst`와 `doLast`는 기존 액션 목록의 앞 또는 뒤에 추가 동작을 삽입하는 메커니즘입니다. 기본 `action`은 `doFirst`들 뒤와 `doLast`들 사이에 위치합니다.
즉, 태스크 실행 순서는
`doFirst` actions → 태스크 기본 actions → `doLast` actions
순으로 진행됩니다.
---
요약:
- `doFirst`: 태스크 내 가장 먼저 실행될 작업 추가
- `doLast`: 태스크 내 가장 마지막에 실행될 작업 추가
- 여러 개일 때는 `doFirst`는 후입선출, `doLast`는 선입선출
- 선처리 작업은 `doFirst`에, 후처리 작업은 `doLast`에 주로 배치
Gradle 태스크 실행 순서를 세밀하게 제어할 때 유용한 기능입니다.
작성자:
서태지 [비회원]
| 작성일자: 1년 전
2025-01-01 07:51:41
조회수: 182 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 182 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.