지난 시간에 잠시 언급했듯이 반환 타입이 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