상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Go 언어의 `defer` 문을 사용할 때 주의할 점은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Go 언어에서 <a href='https://sangseek.com/sangseeks/`defer`/ko'>`defer`</a> 문은 함<a href='https://sangseek.com/sangseeks/수/ko'>수</a>가 종료될 때 호출할 함수를 예약하는 데 사용됩니다. `defer`는 주로 리소스 해제, 파일 <a href='https://sangseek.com/sangseeks/닫기/ko'>닫기</a>, 뮤텍스 잠금 해제 등과 같은 작업을 안전하게 수행하기 위해 사용됩니다. 그러나 `defer`를 사용할 때 주의해야 할 몇 가지 중요한 점이 있습니다. 1. 실행 순서 `defer` 문은 LIFO(Last In, First Out) 방식으로 실행됩니다. 즉, 여러 개의 `defer` 문이 있을 경우, 가장 나중에 호출된 `defer` 문이 가장 먼저 실행됩니다. 이 점은 여러 개의 `defer` 문을 사용할 때 예상치 못한 결과를 초래할 수 있으므로 주의해야 합니다. ```go func example() { defer fmt.Pr<a href='https://sangseek.com/sangseeks/intl/ko'>intl</a>n("첫 번째 defer") defer fmt.Println("두 번째 defer") fmt.Println("함수 실행 중") } // 출력: // 함수 실행 중 // 두 번째 defer // 첫 번째 defer ``` 2. 성능 `defer` 문은 함수 호출 시점에 약간의 성능 오버헤드를 발생시킵니다. 특히, 반복문 안에서 `defer`를 사용하면 성능 저하가 발생할 수 있습니다. 반복문이 여러 번 실행될 경우, 각 반복마다 `defer`가 호출되므로 성능에 영향을 줄 수 있습니다. 이 경우, `defer` 대신 직접 호출하는 것이 더 효율적일 수 있습니다. ```go for i := 0; i < 1000; i++ { defer fmt.Println(i) // 성능 저하 } ``` 3. 인자 평가 `defer` 문에서 호출되는 함수의 인자는 `defer` 문이 실행될 때가 아니라, `defer` 문이 선언될 때 평가됩니다. 이는 `defer` 문이 호출될 때의 상태가 아닌, 선언 시점의 상태를 반영한다는 것을 의미합니다. ```go func example() { for i := 0; i < 3; i++ { defer fmt.Println(i) // i의 값이 아닌, i의 현재 상태가 평가됨 } } // 출력: // 2 // 1 // 0 ``` 4. 패닉 처리 `defer` 문은 패닉을 처리하는 데 유용합니다. `defer`를 사용하여 패닉 발생 시 리소스를 정리하거나 로그를 남길 수 있습니다. `recover` 함수를 사용하여 패닉을 복구할 수 있습니다. ```go func safeFunction() { defer func() { if r := recover(); r != nil { fmt.Println("패닉 발생:", r) } }() // 패닉을 발생시키는 코드 panic("문제가 발생했습니다!") } // 출력: // 패닉 발생: 문제 발생! ``` 5. 가독성 `defer` 문은 코드의 가독성을 높이는 데 기여할 수 있습니다. 리소스 해제나 정리 작업을 함수의 끝에 배치함으로써, 코드의 흐름을 더 명확하게 이해할 수 있게 됩니다. 그러나 과도한 `defer` 사용은 오히려 가독성을 떨어뜨릴 수 있으므로 적절히 사용하는 것이 중요합니다. 결론 Go 언어의 `defer` 문은 매우 유용한 기능이지만, 그 사용에 있어 몇 가지 주의할 점이 있습니다. 실행 순서, 성능, 인자 평가, 패닉 처리 및 가독성 등을 고려하여 적절하게 사용해야 합니다. 이러한 점들을 염두에 두고 `defer`를 활용하면, 코드의 안정성과 가독성을 높일 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기