[c#] 메서드의 레퍼런스와 값 타입

C# 언어는 메서드 호출 시 레퍼런스와 값에 대해 다르게 처리합니다. 이러한 동작은 코드 작성 시 주의를 요구하며, 이해하는 데 도움이 됩니다.

값 타입과 레퍼런스 타입

C#에서 변수는 값 타입 혹은 레퍼런스 타입으로 선언됩니다. 값 타입 변수에는 값이 직접 저장되며, 레퍼런스 타입 변수에는 값이 저장된 위치에 대한 참조가 저장됩니다.

메서드의 매개변수 전달

메서드에 값을 전달할 때 값 타입 변수의 경우 값이 복사되어 전달되지만, 레퍼런스 타입 변수의 경우 참조가 복사되어 전달됩니다.

즉, 값 타입 변수를 메서드에 전달하면 해당 값이 복사되어 전달되므로 메서드 내에서의 변경은 호출자에 영향을 미치지 않습니다. 반면에 레퍼런스 타입 변수를 전달하면 메서드 내에서의 변경이 호출자에 영향을 미치게 됩니다.

public void ModifyValue(int value)
{
    value = 10;
}

public void ModifyReferenceType(StringBuilder builder)
{
    builder.Append(" World");
}

위의 메서드를 호출할 때, ModifyValue는 값에 의한 호출을 하고, ModifyReferenceType은 참조에 의한 호출을 합니다. 이러한 동작을 이해하고 활용할 때 의도치 않은 변수 변경을 피할 수 있습니다.

결론

C#에서 메서드 호출 시 값 타입과 레퍼런스 타입에 대한 동작의 이해는 변수의 변경이나 메모리 사용 측면에서 중요합니다. 이를 이해하면 코드를 안정적이고 예측 가능하게 작성할 수 있으며, 버그를 줄이는 데 도움이 됩니다.

참고: Microsoft Docs - 참조 및 값 메서드 매개 변수