이번 편의 목표: 함수가 끝날 때 실행할 일을 함수 앞쪽에 적어 둡니다.
defer는 그 함수가 return하는 순간에 호출됩니다. 파일을 열면 닫기를 defer로 남겨, 중간에 return해도 닫히게 합니다. 이 편은 출력 순서로 그 시각을 확인합니다. 파일을 닫는 실제 예는 15편입니다.
package main
import "fmt"
func overdueFee(days int) int {
fmt.Println("계산 시작")
defer fmt.Println("계산 끝")
if days <= 0 {
return 0
}
return days * 100
}
func main() {
fmt.Println(overdueFee(3))
}출력은 세 줄입니다. 계산 시작, 계산 끝, 300입니다. 계산 끝은 return이 고른 뒤에, main이 그 반환값을 출력하기 전에 실행됩니다. days가 0 이하여서 0을 돌려줘도 defer는 실행됩니다.
defer를 여러 번 적으면 나중에 적은 것부터 실행됩니다. 이 편은 하나이므로 순서 문제가 없습니다.
직접 해 보기
overdueFee(0)으로 바꿔 마지막 줄이 0이고, 그 앞줄이 계산 끝인지 확인하세요.
해설
0 이하는 즉시 0을 돌려줍니다. return 직전에 defer가 계산 끝을 출력하므로 화면은 계산 시작, 계산 끝, 0입니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.