더북(TheBook)

13.3.2 in 매개변수의 놀라운 변경 가능성: 외부에서의 변경

지금까지, 메서드 내에서 매개변수의 값을 변경하지 않는다면 이 메서드의 매개변수를 in 매개변수로 만드는 것이 안전하다고 이야기해 왔다. 하지만 이는 사실이 아니며, 다소 위험한 기대에 지나지 않는다. 컴파일러가 해당 메서드 내에서 매개변수의 값이 변경되는 것을 금지하고 있지만, 다른 코드에서 값을 변경하는 것은 어찌하지 못한다. in 매개변수가 다른 코드에서는 변경할 수 있는 저장소 위치에 대한 별칭이라는 사실을 다시 한 번 상기하기 바란다. 다음에 나타낸 간단한 예를 살펴보면 그 의미를 명확히 이해할 수 있을 것이다.

예제 13-13 in 매개변수와 값 매개변수 간의 차이 ▶ InParameterSideEffects.cs

static void InParameter(in int p, Action action)
{
    Console.WriteLine("Start of InParameter method");
    Console.WriteLine($"p = {p}");
    action();
    Console.WriteLine($"p = {p}");
}

static void ValueParameter(int p, Action action)
{
    Console.WriteLine("Start of ValueParameter method");
    Console.WriteLine($"p = {p}");
    action();
    Console.WriteLine($"p = {p}");
}

static void Main()
{
    int x = 10;
    InParameter(x, () => x++);
    ValueParameter(x, () => x++);
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.