Go defer는 편하지만 남발하면 성능이 떨어진다
페이지 정보

영삼이
본문
✅ defer는 편하지만 남발하면 성능이 떨어진다
함수 종료 시 정리 좋지만, 반복문 안에 쓰면 위험
Go에서는 자원 정리에 defer
를 자주 쓴다:
func readFile(path string) {
file, _ := os.Open(path)
defer file.Close()
}
깔끔하고 안전해 보이지만, 남용하면 성능 문제 발생할 수 있다.
❌ 문제 상황: 루프 안의 defer
for _, f := range files {
file, _ := os.Open(f)
defer file.Close() // 반복문 안에서 defer 호출 누적
}
-
모든 파일이 루프 끝날 때까지 열려 있음
-
FD 누수 발생 가능
-
성능 저하, 시스템 한계 초과 위험
✅ 해결: 반복문 안에서는 명시적으로 닫기
for _, f := range files {
file, _ := os.Open(f)
// 작업 수행
file.Close() // 즉시 자원 해제
}
✔️ defer
는 짧은 함수나 예외적 흐름이 있는 곳에만 쓰는 게 적절하다.
성능 민감하거나 반복적인 작업에선 반드시 직접 정리해줘야 한다.
- 이전글채널(channel)이 무조건 안전하진 않다 25.03.28
- 다음글고루틴(Goroutine)을 남용하면 오히려 병목이 생긴다 25.03.28
댓글목록
등록된 댓글이 없습니다.