46. params 가변 인자: 오버로드 해석과 호출당 배열 할당
난이도 중 해설 보기 →
결함을 모두 찾고 원인·수정안·더 나은 설계를 제시하라. 마커
(A)(B) 는 주목 위치 힌트다.
결함 코드 · C#
// 문제 46 — params 가변 인자: 오버로드 해석과 호출당 배열 할당
//
// 주제: params 매개변수는 컴파일러가 어떻게 처리하는가? params 오버로드와 일반
// 오버로드가 함께 있을 때 어떤 것이 선택되는가? 각 호출은 힙에 배열을 새로 할당하는가?
//
// 과제:
// 1) 아래 Which(...) 각 호출이 출력하는 문자열을 예측하라.
// 2) 각 호출에서 "새 배열이 힙에 할당되는지" 를 예측하고 이유를 설명하라
// (인자 0개, 명시적 배열 전달 포함).
// 3) params object[] 에 값 형식을 넘길 때 무슨 일이 일어나는지(Log 호출) 설명하라.
using System;
public static class VarargDemo
{
public static string Which(int a, int b) => "exact(int,int)";
public static string Which(params int[] xs) => $"params(len={xs.Length})";
public static void Log(string fmt, params object[] args)
{
Console.WriteLine($"{fmt} / argc={args.Length}");
}
public static void Run()
{
Console.WriteLine(Which(1, 2)); // (1)
Console.WriteLine(Which(1, 2, 3)); // (2)
Console.WriteLine(Which()); // (3)
Console.WriteLine(Which(new int[] { 1, 2 })); // (4)
Log("hit", 42, "orc"); // (5)
}
} 내 리뷰 · C#
내 답안 · 자동 저장
작성 후 위 해설 보기에서 모범 해설과 대조하세요.