CodeGym /행동 /JAVA 25 SELF /반환 값, return

반환 값, return

JAVA 25 SELF
레벨 8, 레슨 3
사용 가능

1. 소개

질문으로 시작해 봅시다: 왜 메서드가 무언가를 반환해야 할까요? 왜 메서드 안에서 모든 일을 처리하고 결과를 화면에 출력만 하면 안 될까요?

종종 우리가 원하는 것은 단순히 어떤 동작을 수행하는 것이 아니라, 이후 프로그램의 다른 부분에서 사용할 결과를 얻는 것입니다. 예를 들어:

  • 메서드가 두 수의 합을 계산해서 반환하면, 그 결과를 이후 계산에 사용할 수 있습니다.
  • 메서드가 어떤 수가 짝수인지 판단하고 true 또는 false를 반환하면, 그에 따라 의사결정을 할 수 있습니다.
  • 메서드가 사용자에게 보낼 인사 문자열을 반환하고, 우리는 그것을 어디에 전달할지 — 화면에 출력할지, 파일에 기록할지, 네트워크로 보낼지 — 결정합니다.

만약 메서드가 항상 결과를 그냥 출력만 했다면, 프로그램은 하나의 시나리오에 고정되어 재사용이 어려웠을 것입니다. 반환 값은 메서드를 유연하고 범용적으로 만들어 줍니다.

비유

커피 자판기를 떠올려 보세요. 돈을 넣고 버튼을 누르면 — 커피를 받습니다. 만약 자판기가 단지 크게 “커피가 완성되었습니다!”라고 말하기만 하고 커피를 주지 않는다면, 기쁠 리가 없겠죠. 메서드도 마찬가지입니다. 때로는 단지 “완료!”라는 말이 아니라, 실제 결과를 받고 싶습니다.

2. 반환 타입: 메서드는 무엇을 반환할 수 있나

Java에서 메서드를 선언할 때는 반환 타입을 지정합니다 — 이는 어떤 타입도 될 수 있습니다: int, double, String, boolean, 배열, 심지어 여러분이 만든 클래스의 객체까지. 메서드가 아무것도 반환하지 않는다면 — void를 씁니다.

구문:

tip_vozvrashchaemogo_znacheniya imyaMetoda(parametry)
{
    // 메서드 본문
}
메서드 시그니처

예시:

int sum(int a, int b) 
{
    // int를 반환
}

String getGreeting(String name) 
{
    // String을 반환
}

boolean isEven(int number) 
{
    // boolean을 반환
}

void printHello() 
{
    // 아무것도 반환하지 않음 — 단지 동작을 수행
}

중요! 반환 타입은 메서드의 “약속”입니다: 해당 타입의 값을 반드시 반환해야 합니다. int를 반환하겠다고 해놓고 String을 반환하면 — 컴파일러가 불만을 표시하며 프로그램을 빌드하지 못하게 합니다.

3. 연산자 return: 메서드에서 값을 반환하는 방법

메서드의 결과를 바깥으로 실제로 넘기려면 연산자 return을 사용합니다. 이 키워드는 “여기 결과가 있어요 — 이걸로 제 일은 끝!”이라는 뜻입니다.

int sum(int a, int b) 
{
    int result = a + b;
    return result; // 결과를 반환
}
return으로 값 반환

더 간단히 쓸 수도 있습니다:

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

메서드가 return 문에 도달하면 실행을 종료하고, 지정한 값을 반환하여 호출된 곳으로 전달합니다.

중요: return 뒤의 값의 타입은 메서드에 선언된 반환 타입과 일치해야 합니다.

4. 반환 값 사용: 어디에 쓰나?

메서드가 값을 반환하면 다음과 같이 사용할 수 있습니다:

  • 변수에 저장한다.
  • 바로 표현식에서 사용한다.
  • 다른 메서드에 전달한다.
int result = sum(5, 7); // 변수에 저장
System.out.println(result); // 결과를 출력

System.out.println(sum(10, 20)); // 즉시 결과를 출력

if (isEven(42)) 
{
    System.out.println("짝수입니다!");
}

예시: 문자열을 반환하는 메서드

String getGreeting(String name) 
{
    return "안녕, " + name + "!";
}

// 사용:
String greeting = getGreeting("알리사");
System.out.println(greeting); // 안녕, 알리사!

5. 실습: 반환 값을 갖는 메서드 예제

두 수의 최댓값을 반환하는 메서드

int max(int a, int b) 
{
    if (a > b) 
    {
        return a;
    } 
    else 
    {
        return b;
    }
}

삼항 연산자를 이미 익혔다면 더 짧게 쓸 수도 있습니다:

int max(int a, int b) 
{
    return (a > b) ? a : b;
}

사용 예:

int maximum = max(10, 25);
System.out.println("최댓값: " + maximum); // 최댓값: 25

숫자가 짝수이면 true를 반환하는 메서드

boolean isEven(int number) 
{
    return number % 2 == 0;
}

사용 예:

if (isEven(18)) 
{
    System.out.println("짝수입니다!");
} 
else 
{
    System.out.println("홀수입니다!");
}

배열 원소의 합을 반환하는 메서드

int sumArray(int[] arr) 
{
    int sum = 0;
    for (int i = 0; i < arr.length; i++) 
    {
        sum += arr[i];
    }
    return sum;
}

사용 예:

int[] grades = {5, 4, 3, 5, 4};
int total = sumArray(grades);
System.out.println("점수 합계: " + total);

6. return이 있는 메서드를 호출하면 어떤 일이 일어나는가

반환 값을 갖는 메서드를 호출하면, 프로그램 실행은 메서드 내부로 “들어가” 그 코드를 수행하고 return에 도달하면 값을 반환 — 그리고 그 값을 호출 지점에 대입합니다.

개략적으로:

int a = 2;
int b = 3;
int c = sum(a, b); // 여기서 sum(2, 3)을 호출하고 5를 반환, c는 5가 됨

블록 다이어그램

        graph TD
        A["main"] --> B["sum(a, b)"]
        B --> C[계산]
        C --> D[return result]
        D -->|결과가 반환됨| A
    

7. 유용한 포인트

return 은 메서드 실행을 종료한다

메서드에서 return을 만나면 메서드 실행이 즉시 중단됩니다. 그 뒤에 있는 코드는 실행되지 않습니다.

int test()
{
    return 42;
    System.out.println("이는 출력되지 않습니다"); // unreachable
}

return 과 void 메서드

아무것도 반환하지 않는 void 메서드에서도 값을 지정하지 않은 return을 사용해 조건에 따라 조기 종료할 수 있습니다.

void printPositive(int number)
{
    if (number <= 0) 
    {
        System.out.println("양수가 아닙니다!");
        return; // 그냥 메서드에서 빠져나옵니다
    }
    System.out.println("숫자: " + number);
}

8. return 사용 시 흔한 오류

오류 № 1: 모든 경로가 값을 반환하지 않음

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    }
    // 그렇다면 number <= 0 일 때는? return 이 없음!
}
// 오류: 모든 분기가 값을 반환하지 않습니다

해결 방법: 모든 실행 경로에 return이 있도록 작성하세요.

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    } 
    else if (number < 0) 
    {
        return -1;
    } 
    else 
    {
        return 0;
    }
}

오류 № 2: 반환 타입 불일치

int getNumber()
{
    return "42"; // 오류! int 가 필요하지만 String 이 반환됨
}

오류 № 3: return 이후의 코드

int test()
{
    return 5;
    System.out.println("이 코드는 실행되지 않습니다"); // unreachable statement
}

오류 № 4: void 메서드에서 값을 가진 return 사용

void printSomething()
{
    return 42; // 오류! void 메서드는 값을 반환할 수 없습니다
}

오류 № 5: 반환 값을 무시함

sum(10, 20); // 이게 끝인가요? 결과가 사라졌습니다!

반환 값을 사용하지 않으면 그 값은 그냥 사라집니다. 변수를 통해 저장하거나, 다른 메서드로 전달하는 것을 잊지 마세요!

오류 № 6: return 이 무언가를 출력해 준다고 기대함

int result = sum(2, 3);
// return 은 아무것도 출력하지 않습니다!
// 명시적으로 출력해야 합니다:
System.out.println(result);
1
과제
JAVA 25 SELF, 레벨 8, 레슨 3
잠금
개인화된 인사를 위한 스마트 어시스턴트 🤖
개인화된 인사를 위한 스마트 어시스턴트 🤖
1
과제
JAVA 25 SELF, 레벨 8, 레슨 3
잠금
게임 퀴즈용 짝수 판별기 ❓
게임 퀴즈용 짝수 판별기 ❓
1
과제
JAVA 25 SELF, 레벨 8, 레슨 3
잠금
점수로 승자 결정하기 🏆
점수로 승자 결정하기 🏆
1
과제
JAVA 25 SELF, 레벨 8, 레슨 3
잠금
학생의 모든 시험 점수 합계 계산 📚
학생의 모든 시험 점수 합계 계산 📚
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION