C#/코드의 흐름제어

[C#]함수(Method), ref, out

과아아앙 2021. 4. 7. 10:52

Method 

코드를 기능별로 묶어서 사용한다.

ex) WriteLine() 또한 하나의 메서드이다.

함수 형태

/*
한정자 반환형식 이름(매개변수목록)
{

}
*/
static HelloWorld()

{

}

 

예제(더하기 함수)

using System;

namespace CSharp
{
    class Program
    {
        // 덧셈 함수

        static int Add(int a, int b)
        {
            int result = a + b;
            return result;
        }

        static void Main(string[] args)
        {
            // 4, 5 => 9
            int result = Program.Add(4, 5);
            Console.WriteLine(result);
        }
    }
}

+오늘 알게된 팁.

vs에서 cw - tab - tab 을하면 출력문이 완성된다.

 

refout

ref와 out은 C#에서 인자를 전달할 때 사용하는 예약어로 메서드간 참조 형식으로 값을 사용할 수 있게 해준다.

둘은 비슷하지만 분명한 차이점이 있습니다.

 

단순히 말하면 out이 ref보다 좀 더 특정한 상황에서 사용하는 용도입니다.

using System;

namespace CSharp
{
    class Program
    {
        // 덧셈 함수

        static void AddOne(ref int number)
        {
            number = number + 1;
        }

        static void Main(string[] args)
        {
            //복사(짭퉁) 참조(진퉁)
            int a = 0;
            Program.AddOne(ref a);

            Console.WriteLine(a);
        }
    }
}
using System;

namespace CSharp
{
    class Program
    {
        // 덧셈 함수

        static void AddOne(ref int number)
        {
            number = number + 1;
        }
        static void AddOne2(int number)
        {
            return number + 1;
        }

        static void Main(string[] args)
        {
            //복사(짭퉁) 참조(진퉁)
            int a = 0;
            Program.AddOne(ref a);
            Console.WriteLine(a);

            Program.AddOne2(a);
            Console.WriteLine(a);
        }
    }
}

ref는 반드시 변수를 초기화해야 하고, 메서드 내에서 변형이 가능하다.

인자로 넘긴 a를 AddOne 메서드에서 number인자로 받아 사용할 수 있다.

참조 형식으로 값을 지정했기 때문에 number가 변하면 a도 변하게 된다.

 

using System;

namespace CSharp
{
    class Program
    {
        static void Divide(int a, int b, out int result1, out int result2)
        {
            result1 = a / b;
            result2 = a % b;
        }

        static void Main(string[] args)
        {
            int num1 = 10;
            int num2 = 3;

            int result1;
            int result2;
            Divide(10, 3, out result1, out result2);

            Console.WriteLine(result1);
            Console.WriteLine(result2);       
        }
    }
}

 

반면에 out은 따로 초기화가 필요 없는 대신, 메서드 내에서 리턴 전에 반드시 값을 지정해 주어야 한다.

인자를 받는 메서드에서 사용/변형도 불가능하다.

 


아직은 다소 헷갈리는 구분이지만 후에 더 학습하다보면 이해가 될 것 같다.