참조 반환값(ref return)을 이용하면 메소드의 호출자로 하여금 반환받은 결과를 참조로 다룰 수 있습니다.
class JustClass
{
int number = 10;
public ref int GetNumber()
{
return ref number;
}
}
참조로 반환(return)하는 메소드는 ref 키워드를 사용하여 선언할 수 있습니다. 메소드의 데이터 형식 앞에, 그리고 return 문 뒤에 명시하면 됩니다.
하지만 호출자가 ref 키워드를 사용하지 않으면 평범한 메소드로 동작합니다.
JustClass obj = new JustClass();
ref int number = ref obj.GetNumber();
위 코드처럼 지역 변수와 호출할 메소드의 이름 앞에 ref 키워드를 명시해야 반환 결과를 참조로 받을 수 있습니다. 이렇게 참조로 반환받은 지역 변수를 참조 지연 변수(ref local)라고 부릅니다.
class Weapon
{
private int damage = 10;
public ref int GetDamage()
{
return ref damage;
}
public void PrintDamage()
{
Console.WriteLine($"Weapon Damage : {damage}");
}
}
class MainApp
{
static void Main(string[] args)
{
Weapon sword = new Weapon();
ref int refDamage = ref sword.GetDamage();
int damage = sword.GetDamage();
sword.PrintDamage();
Console.WriteLine($"before refDamage : {refDamage}");
Console.WriteLine($"before NormalDamage : {damage}");
refDamage = 5;
sword.PrintDamage();
Console.WriteLine($"after refDamage : {refDamage}");
Console.WriteLine($"after NormalDamage : {damage}");
}
}
출력 결과 Weapon Damage : 10 before refDamage : 10 before NormalDamage : 10 Weapon Damage : 5 after refDamage : 5 after NormalDamage : 10 |