C#에서 가변 인자(params)를 사용하면 메서드 호출 시 인자의 개수를 유동적으로 조절할 수 있어 편리합니다. 하지만 이 편리함이 때로는 성능 저하로 이어질 수 있어 주의가 필요합니다.
1. params의 기본 동작
params 키워드는 내부적으로 배열을 생성하여 인자를 전달합니다. 예를 들어, 다음 코드를 살펴보겠습니다.
void PrintNumbers(params int[] numbers)
{
foreach (var num in numbers)
{
Console.WriteLine(num);
}
}
이때 호출 시 인자가 여러 개라면 컴파일러가 새 배열을 만들어 전달합니다.
2. 성능 이슈 원인
params 배열을 매번 생성하면, 특히 자주 호출되는 핫스팟 코드에서는 GC 부담과 할당 비용이 발생할 수 있습니다. 따라서 성능에 민감하다면 주의해야 합니다.
3. 최적화 팁
- 가능한 정적 크기 배열 전달이나 오버로드 메서드 활용
- 호출 빈도가 높은 경우 고정 개수 오버로드 메서드 작성
- params 사용이 필요한 경우 호출 빈도를 줄이거나, 구조 변경 고려
4. 예제 비교
아래 예시는 params 사용 시 배열 할당과, 배열 없이 직접 인자를 받는 오버로드를 보여줍니다.
void Log(params string[] messages)
{
foreach (var msg in messages)
{
Console.WriteLine(msg);
}
}
void Log(string message1, string message2)
{
Console.WriteLine(message1);
Console.WriteLine(message2);
}
고성능이 요구되는 상황에서는 두 번째 방식이 더 효율적입니다.
결론적으로, 편의를 위해 가변 인자를 사용하더라도 성능 이슈가 우려된다면 사용 빈도와 방법을 재검토하는 것이 좋습니다.
'C#' 카테고리의 다른 글
| C# 메서드 반환 타입으로 Func<T> 사용하기 (0) | 2026.06.24 |
|---|---|
| C# 참조 타입과 값 타입 복사 동작 비교 (0) | 2026.06.24 |
| C# ViewModel과 모델 변환 로직 설계 (0) | 2026.06.23 |
| C# 동적 프로퍼티 생성 및 바인딩 (0) | 2026.06.23 |
| C# 코드 분석 도구(Roslyn Analyzer) 제작하기 (0) | 2026.06.22 |