C# 메소드의 결과를 참조로 반환하기

참조 반환값(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

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다