CodeGym /행동 /C# SELF /반환값과 return 연산자

반환값과 return 연산자

C# SELF
레벨 8 , 레슨 3
사용 가능

1. 소개

상상해봐: 네가 전화로(아니면 앱으로, 요즘 시대니까) 피자를 주문한다고 해. 주문 정보를 오퍼레이터한테 알려주면, 오퍼레이터가 결과로 피자를 돌려줘! 만약 오퍼레이터가 아무 말도 안 하면 — 넌 배고프고, 행복도 없어.

함수도 똑같아: 가끔은 그냥 어떤 동작만 하면 되지만, 대부분은 함수가 뭔가 유용한 결과도 돌려줬으면 좋겠지. 그리고 입력값이 다르면 결과도 매번 달라질 수 있어! 예를 들면:

  • 함수가 두 숫자의 합을 계산해서 결과를 알려줌.
  • 함수가 사람의 나이를 받아서 카테고리("어린이", "성인", "노인")를 반환함.
  • 함수가 사용자의 이름으로 멋진 인사말 문자열을 만들어줌.

반환값 — 함수가 자기 작업 결과를 바깥으로 “전달”하는 방법이야.

2. 반환값이 있는 메서드 시그니처

지난 강의에서 이런 템플릿을 봤지:

void PrintHello()
{
    Console.WriteLine("안녕!");
}
반환값이 없는 메서드 ( void)

void 타입은 함수가 아무것도 반환하지 않는다는 뜻이야(void는 "비어있음", 값 없음이라는 의미).

이제 뭔가를 반환하는 함수가 어떻게 생겼는지 보자:

int Add(int a, int b)
{
    // 함수 본문
}
반환값이 있는 메서드 ( int)

여기서 int는 함수 이름 앞에 붙어서, 반환값의 데이터 타입을 의미해. 만약 함수가 문자열을 반환하면 string, 소수라면 double 등등을 써.

함수 선언 문법은 이렇게 생겼어:

<반환값 타입> 메서드이름(<파라미터>)
{
    // 함수 본문
}
반환값이 있는 메서드의 일반적인 템플릿

다양한 시그니처 예시:

시그니처 무엇을 반환?
int Sum(int a, int b)
정수
string GetGreeting(string name)
문자열
double Multiply(double x, double y)
소수
bool IsAdult(int age)
불리언 값

3. return 연산자: 함수에서 결과 반환하기

제대로 동작하려면, 타입만 지정하는 걸로는 부족해 — 함수가 결과를 “위로” 돌려보내도록 만들어야 해. 이때 return 연산자를 써. 이걸로 "이 값을 반환할게"라고 말하고, 함수 실행이 그 순간 끝나(그때 함수가 바깥으로 "나가는" 거지).

타입 메서드이름(...)
{
    // 어떤 계산들
    return ;
}
return 사용 예시

예시:

int Add(int a, int b)
{
    int sum = a + b;
    return sum; // 함수 결과로 합계를 반환
}

중요한 규칙: return으로 반환하는 값의 타입은 메서드 시그니처에 쓴 타입과 완전히 같거나 호환되어야 해.

4. 예시: 뭔가를 반환하는 메서드 작성하기

바로 예제로 가보자! 자주 쓰는 케이스 몇 개 볼게.

예시 1: 두 숫자 더하기

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

// 사용 예:
int result = Add(10, 20);
Console.WriteLine("합계: " + result); // 출력: 합계: 30

예시 2: 개인 인사말 만들기

string CreateGreeting(string name)
{
    return "안녕, " + name + "!";
}

// 사용 예:
string greeting = CreateGreeting("안나");
Console.WriteLine(greeting); // 출력: 안녕, 안나!

예시 3: 성인 여부 확인

bool IsAdult(int age)
{
    return age >= 18;
}

if (IsAdult(21))
{
    Console.WriteLine("입장 허용됨.");
}
else
{
    Console.WriteLine("미안, 성인만 가능해.");
}
// 출력: 입장 허용됨.

예시 4: 반환값을 식에서 사용하기

Console.WriteLine("두 배: " + MultiplyByTwo(7));

int MultiplyByTwo(int n)
{
    return n * 2;
}

5. 반환값 타입: 다양성과 특징

C#에서 함수는 숫자, 문자열 같은 고전적인 타입뿐 아니라 어떤 "타입"이든 반환할 수 있어. 예를 들면:

  • 정수: int, long, short — 간단하지.
  • 소수: double, float, decimal.
  • 문자열: string.
  • 불리언: bool.
  • 배열: int[], string[] 등등.
  • 참조 타입: 네가 만든 클래스 객체들.
  • void: 아무것도 반환하지 않을 때의 특별한 경우.

왜 반환값 타입이 그렇게 중요할까?

컴파일러는 네가 약속한 걸 꼭 지키는지 엄격하게 확인해. int를 반환한다고 해놓고 문자열이나 아무것도 안 돌려주면 — 에러야. 완전 깐깐한 상사 느낌이지.

에러 예시:

int GetNumber()
{
    return "42"; // 에러! int를 기대했는데 string이야.
}

6. 값 없이 쓰는 return: void 메서드에서

사실, 반환 타입이 있는 메서드(예: int, string)에서는 return 뒤에 항상 반환할 값을 써야 해.

하지만! 함수가 void로 선언되어 있으면, 원한다면 return만 써서 바로 함수 실행을 끝낼 수도 있어 — 값을 반환하지 않고.

void PrintNumbers(int n)
{
    if (n <= 0)
    {
        Console.WriteLine("숫자는 음수가 아니어야 해!");
        return; // 그냥 함수에서 나가고 아무것도 반환 안 함
    }
    for (int i = 1; i <= n; i++)
    {
        Console.WriteLine(i);
    }
}
return을 값 없이 void 메서드에서 사용

이건 어떤 조건에서 함수 실행을 중단하고 싶지만, 반환할 값은 필요 없을 때 유용해.

7. return 사용 시 흔한 실수들

아, 초보 개발자들이 return 관련 에러로 머리 싸매는 경우 진짜 많아!

문제 1: 뭔가 반환해야 하는 함수에 return이 없음

int GetValue(bool flag)
{
    if (flag)
        return 1;
    // 어라! flag == false면 어쩌지?
}
// 에러: 모든 코드 경로에 return이 있어야 해!

해결법: 항상 모든 실행 경로에 return을 넣어줘! 예를 들면:

int GetValue(bool flag)
{
    if (flag)
        return 1;
    else
        return 0;
}

문제 2: 반환값 타입이 안 맞음

double GetMagicNumber()
{
    return 42; // 사실 int를 double로 암시적으로 변환하니까 OK
    // 근데 만약 함수가 int를 반환해야 하는데 string을 반환하면 에러!
}

규칙: 타입 호환성 꼭 확인해. 헷갈리면 명시적으로 타입 변환해도 돼:

return (double)42;

문제 3: return이 너무 일찍 나옴

알아둬, return이 실행되면 그 즉시 메서드 실행이 끝나. 그 뒤에 있는 코드는 절대 실행 안 돼!

int GetNumber()
{
    return 5;
    Console.WriteLine("이 줄은 절대 실행 안 됨"); // 컴파일러가 경고할 거야!
}

문제 4: void 메서드에서 값을 반환하려고 함(금지!)

void PrintSomething()
{
    return 1; // void 메서드에서 값을 반환하면 안 돼!
}
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION