다음을 통해 공유


Main() 및 기타 메서드(C# 및 Java)

업데이트: 2007년 11월

이 단원에서는 메서드에 대해 설명하고 참조와 값으로 메서드 매개 변수를 전달하는 방법에 대해 설명합니다.

Main () 메서드

모든 C# 응용 프로그램에는 프로그램 실행을 시작할 위치를 지정하는 Main 메서드 하나가 들어 있어야 합니다. C#에서 Main은 대문자로 시작하는 반면, Java에서는 소문자로 된 main을 사용합니다.

Main은 int나 void만 반환할 수 있고 선택적인 문자열 배열 인수를 사용하여 명령줄 매개 변수를 나타낼 수 있습니다.

static int Main(string[] args)
{
    //...
    return 0;
}

전달된 임의의 명령줄 인수가 포함된 문자열 배열 매개 변수는 Java에서와 마찬가지로 작동합니다. 따라서 args[0]는 첫 번째 명령줄 매개 변수를 지정하고 args[1]는 두 번째 매개 변수를 지정합니다. C++와는 달리 args 배열에는 EXE 파일의 이름이 포함되지 않습니다.

기타 메서드

메서드에 매개 변수를 전달할 때 매개 변수를 값이나 참조로 전달할 수 있습니다. 값 매개 변수는 메서드에 사용할 임의의 변수에 대한 값을 전달합니다. 따라서 호출하는 코드의 변수 값은 메서드 내의 매개 변수에 대해 수행하는 작업의 영향을 받지 않습니다.

그러나 참조 매개 변수는 호출하는 코드에 선언된 변수를 가리키므로 참조로 전달되는 변수의 내용을 메서드에서 수정할 수 있습니다.

참조로 전달

Java와 C# 모두에서 개체를 참조하는 메서드 매개 변수는 항상 참조로 전달되는 반면 기본 데이터 형식 매개 변수(C#의 값 형식)는 값으로 전달됩니다.

C#에서 값 형식을 참조로 전달하려면 ref 또는 out 키워드 중 하나를 지정해야 합니다. 이 두 키워드 사이의 차이점은 매개 변수 초기화에 있습니다. ref 매개 변수는 사용하기 전에 초기화해야 하는 반면, out 매개 변수는 이를 전달하기 전에 명시적으로 초기화할 필요가 없고 이전의 값은 모두 무시됩니다.

ref 키워드

호출되는 메서드에서 매개 변수로 사용되는 변수의 값을 영구적으로 변경하려면 값 형식 매개 변수에 이 키워드를 지정합니다. 호출에 사용되는 변수의 값을 전달하는 대신 이 키워드를 지정하면 변수에 대한 참조 자체가 전달됩니다. 그런 다음 참조에 대해 메서드가 실행되고 메서드를 실행하는 동안 매개 변수의 변경 내용이 메서드에 대한 매개 변수로 사용되는 원래 변수에 유지되도록 합니다.

다음 코드에서는 Add 매개 변수에 이 키워드가 사용되는 경우를 보여 줍니다. 여기서 두 번째 int 매개 변수는 ref 키워드와 함께 참조로 전달됩니다.

class TestRef
{
    private static void Add(int i, ref int result)
    {
        result += i;
        return;
    }

    static void Main()
    {
        int total = 20;
        System.Console.WriteLine("Original value of 'total': {0}", total);

        Add(10, ref total);
        System.Console.WriteLine("Value after calling Add(): {0}", total);
    }
}

이 간단한 예제의 출력에서는 결과 매개 변수에 대한 변경 내용이 Add 메서드 호출에 사용되는 total이라는 변수에 반영된 결과를 보여 줍니다.

Original value of 'total': 20

Value after calling Add(): 30

이는 호출하는 코드의 전체 변수에서 사용하는 실제 메모리 위치를 결과 매개 변수에서 참조하기 때문입니다. 클래스의 속성은 변수가 아니며 ref 매개 변수로 직접 사용할 수 없습니다.

ref 키워드는 메서드 선언에서와 마찬가지로 메서드를 호출할 때 매개 변수 앞에 와야 합니다.

out 키워드

out 키워드는 ref 키워드와 매우 비슷한 효과를 가지며 out을 사용하여 선언된 매개 변수의 수정 내용은 메서드 외부에서도 볼 수 있습니다. ref와 다른 두 가지 차이로는 out 매개 변수의 모든 초기 값이 메서드 내에서 무시된다는 점과 out 매개 변수는 메서드를 진행하는 동안 할당해야 한다는 사실을 들 수 있습니다.

class TestOut
{
    private static void Add(int i, int j, out int result)
    {
        // The following line would cause a compile error:
        // System.Console.WriteLine("Initial value inside method: {0}", result);

        result = i + j;
        return;
    }

    static void Main()
    {
        int total = 20;
        System.Console.WriteLine("Original value of 'total': {0}", total);

        Add(33, 77, out total);
        System.Console.WriteLine("Value after calling Add(): {0}", total);
    }
}

이 경우 Add 메서드에 대한 세 번째 매개 변수는 out 키워드를 사용하여 선언되며 메서드를 호출할 때에도 해당 매개 변수에 대한 out 키워드가 필요합니다. 출력은 다음과 같습니다.

Original value of 'total': 20

Value after calling Add(): 110

요약하자면 ref 키워드는 기존 변수를 메서드에서 수정하려 할 때 사용하고 out 키워드는 메서드 내에서 생성된 값을 반환할 때 사용합니다. 이 키워드는 일반적으로 메서드에서 호출하는 코드에 대해 여러 개의 결과 값을 생성하는 경우 메서드의 반환 값과 함께 사용됩니다.

참고 항목

개념

C# 프로그래밍 가이드

Main()과 명령줄 인수(C# 프로그래밍 가이드)

참조

매개 변수 전달(C# 프로그래밍 가이드)

기타 리소스

Java 개발자를 위한 C# 프로그래밍 언어