개발 지식

개발 지식

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

페이지 정보

profile_image
영삼이
0건 136회 25-03-28 15:05

본문

✅ 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짧은 함수예외적 흐름이 있는 곳에만 쓰는 게 적절하다.
성능 민감하거나 반복적인 작업에선 반드시 직접 정리해줘야 한다.

댓글목록

등록된 댓글이 없습니다.