데브허브 | DEVHUB | Top 10 C# Mistakes that will get you in troubleTop 10 C# Mistakes that will get you in trouble
catch 블록 내에서 예외를 다시 던질 때는 throw ex; 대신 throw;를 사용하여 원래 예외 스택 트레이스를 보존해야 합니다. 🚫
async 메서드의 결과를 Result로 직접 접근하면 데드락을 유발할 수 있으므로, await를 사용하여 비동기적으로 처리해야 합니다. ⏳
async void는 UI 이벤트 핸들러 외에는 사용하지 않아야 하며, 예외 처리가 어렵고 호출자가 완료를 기다릴 수 없습니다. 👻
IEnumerable를 여러 번 열거하면 불필요한 리소스 접근(파일 읽기, DB 쿼리 등)이 발생할 수 있으므로, ToList() 등으로 한 번만 실행하여 캐싱해야 합니다. 🔄
StreamWriter와 같은 리소스는 using 문을 사용하여 파일 핸들이 확실히 닫히고 리소스가 해제되도록 해야 합니다. 🗑️
- 반복적인 문자열 연결은
StringBuilder를 사용하여 성능 저하와 메모리 낭비를 방지해야 합니다. 🔗
HttpClient는 요청마다 새로 생성하지 않고 재사용해야 하며, ASP.NET Core에서는 IHttpClientFactory를 사용하는 것이 좋습니다. ♻️
- 람다에서 루프 변수를 캡처할 때, 변수의 최종 값만 캡처되는 문제를 피하기 위해 루프 내에서 새 변수를 선언하여 캡처해야 합니다. 📸
struct는 불변(immutable)으로 설계되어야 하며, 변경이 필요할 경우 새 인스턴스를 반환하는 방식으로 사용해야 합니다. 🧱
- C# 컴파일러가 잡지 못하는, 자기 참조적인 정적 제네릭 멤버는 런타임에
TypeLoadException을 발생시킬 수 있으므로 주의해야 합니다. 💥