IT&프로그래밍 용어사전

Return (프로그래밍에서의 리턴)

yunjuniverse 2022. 7. 17. 17:51

 

return이란?

함수의 결과값을 함수를 호출한 곳에 다시 가져다가 (리턴 주소에) 저장해주는 명령어

 

In programming, return is a statement that instructs a program to leave the subroutine and go back to the return address. The return address is located where the subroutine was called.

return은 프로그램에게 서브루틴(함수)를 떠나 ‘리턴 주소’로 돌아가도록 지시하는 선언문이다.

 

 

return은 서브루틴(함수) 내에 있는 명령코드를 모두 사용하고 리턴 주소(return address)로 값을 보내주는 것입니다. 리턴 주소(return address)는 메모리 상에서 서브루틴(함수)이 호출되는 곳 바로 다음에 위치해 있습니다. 따라서 함수 내에서 모든 수행 작업이 끝난 후 다시 호출한 곳으로 돌아와 그 결과 값을 저장하는 것이죠.

정리하자면, return이란 함수의 결과값을 함수를 호출한 곳에 다시 가져다가 (리턴주소에) 저장해주는 명령어입니다.

 

자바로 만든 예시를 보시죠.

 

public class ReturnExample {

    //적용 순서
    // (4) -> (5) -> (6) -> (7) -> (1) -> (2) -> (3) -> (7) -> (8)

    public static int doSquare(int x, int y) { // (1)
        int squared= x * y; // (2)
        return squared; // (3) doSquare를 호출한 (7)로 돌아감
    }

    public static void main(String[] args) { // (4)
        int x = 10; // (5)
        int y = 3; // (6)
        int result = doSquare(x, y); // (7) (1) 호출
        System.out.println(result); // (8)

       
    }
}

 

다음과 같이 적용 순서가 비순차적으로 적용됩니다. doSquare라는 인자끼리 곱해주는 서브루틴(함수)을 방했다가( 7 → 1 ) return 구문에서 리턴주소에 값을 저장하고 호출한 곳으로 다시 탈출( 3 → 7 )하는 모습을 볼 수 있습니다. 

 

 

 

 

참고) 시스템 해커들의 프로그램 공격 방법 중 하나가 리턴 주소 탈취입니다. 프로그램의 어떤 함수의 리턴 주소를 탈취해 함수의 결과값을 해커들이 원하는대로 바꿔버리는 것이죠.

 

참고2) 서브루틴(subroutin)은 어떤 특징을 강조하느냐에 따라 함수(function), 서브프로그램(sub-program) 등으로도 불립니다. 함수가 가장 이해하기 쉽습니다.

 

참고3) return과 헷갈리기 쉬운 printf, println, print와 같은 콘솔 출력 명령어는 값을 '저장'하는 것이 아니라, 값을 콘솔창에 '출력'만 해주는 명령어입니다. 

 

함수값은 돌아온다.