void 메서드의 return

지난 시간에 잠시 언급했듯이 반환 타입이 void인 메서드 안에서도 return을 사용할 수 있습니다.

반환값이 있는 메서드는 return 구문을 필수로 작성해야 합니다;

void 반환값 없는 메서드는 return을 강제로 쓰지 않아도 됩니다:

코드가 메서드 마지막 }까지 실행되면 자동으로 호출자로 돌아가며 어떤 데이터도 전달하지 않습니다.

하지만 실무에서 메서드를 일찍 종료해야 하는 경우가 자주 발생합니다. void 메서드에서는 매개변수 없는 return;로 바로 빠져나갈 수 있습니다:

문법: return; (뒤에 표현식을 적지 않음)

제한 사항: void로 선언된 메서드 내부에서만 사용 가능

예시:

    void SayHi()
    {
        Console.WriteLine("hello welcome to foxDevelop.com");
    }Code language: C# (cs)

위는 앞서 살펴본 예시로 가장 간단한 void 메서드이며 내부에 return을 적을 필요가 없습니다.

이 메서드를 호출하면 안에 있는 Writeline이 실행되어 “hello welcome to foxDevelop.com”이 출력됩니다.

    static void Main()
    {
        Program program = new Program();
        program.SayHi();
    }

    void SayHi()
    {

        Console.WriteLine("hello welcome to foxdevelop.com");
    }Code language: C# (cs)

여기에 return;을 추가해보겠습니다.

    void SayHi()
    {
        return; // return 구문을 단독으로 사용하면 현재 메서드 실행을 종료합니다
        Console.WriteLine("hello welcome to foxdevelop.com");
    }Code language: C# (cs)

실행하면 아무것도 출력되지 않습니다. return;이 Console.WriteLine보다 위에 있기 때문에 return을 만나는 순간 호출자로 돌아가고 뒤 코드는 실행되지 않습니다. 이는 조기 종료에 해당합니다.

return 뒤에 있는 코드는 영원히 실행되지 않습니다.

그래서 void 메서드라도 return;을 사용할 수 있습니다. 다만 return 뒤에 값을 적지 않으면 됩니다.

    int Add(int a, int b)
    {
        return 100;
    }Code language: C# (cs)

void 타입이 아닌 메서드는 반드시 return 값; 형식으로 작성해야 합니다.

return 뒤에는 결과가 반드시 따라와야 합니다. 변수, 리터럴 값(100, 3.14 같은 값), a+b 같은 표현식 중 무엇이든 상관없고 최종적으로 결과 하나를 반환해야 합니다.

결과를 적지 않고 void처럼 그냥 return;만 쓰면 오류가 발생합니다.

void 메서드 다중 분기 return

    static void Main()
    {
        Program program = new Program();
        program.ShowMax(100,200);
    }

    void ShowMax(int a, int b)
    {
        if (a>b)
            Console.WriteLine($"{a}>{b}"); // 조건 만족 시 메서드 바로 종료

        if (b > a) 
            Console.WriteLine($"{b}>{a}");
    }Code language: C# (cs)

예시 하나를 보겠습니다:

class Program
{
    static void Main()
    {
        Program program = new Program();
        program.Greet();
    }

    private void Greet()
    {
        DateTime dt = DateTime.Now;
        if (dt.Hour < 12)
            return; // 12시 전에는 바로 종료하고 출력하지 않음
        Console.WriteLine("Good afternoon!");
    }
}Code language: C# (cs)

현재 시간이 12시를 넘었다면 오후 인사를 출력하고, 그렇지 않으면 출력 없이 바로 돌아갑니다.

void 메서드의 return

Previous:

답글 남기기

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