상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
콩을 활용한 전통 간편식은 무엇이 있나요?
공소제기 후 피고인이 불출석하면 어떻게 되나요?
공소제기 후 피고인이 합의할 수 있는 경우는 무엇인가요?
안드로이드 스튜디오에서 UI 디자인을 미리 보는 단축키는 무엇인가요?
안드로이드 스튜디오에서 특정 메서드의 사용처를 찾는 단축키는 무엇인가요?
서리태를 활용한 디저트 레시피는 무엇이 있나요?
고려시대의 전통 놀이와 축제는 무엇이 있었나요?
고려시대의 주요 종교적 인물은 누구인가요?
'삼국유사'에서의 역사적 인물의 역할은 어떻게 변천했나요?
12월에 가기 좋은 아시아의 여행지는?
12월에 추천하는 여행 사진 촬영 장소는?
브리즈번에서의 해양 생물 관찰은 어디서 할 수 있나요?
Previous
Next
수정하기 - 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순위입니다.
수정하기
취소하기