호출과 반환

함수를 부르는 한 줄에서, 컴퓨터는 무슨 일을 할까?

화면을 누르면 다음 장으로 넘어갑니다

호출과 반환

갔다가 돌아옵니다

함수처럼 이름을 붙여 부르는 코드 묶음을 서브프로그램이라고 합니다. 부르는 것이 호출, 끝내고 돌아오는 것이 반환입니다. 돌아오려면 호출할 때 돌아올 곳을 적어 둬야 합니다.

예시 코드입니다. 적어 둔 돌아올 곳을 반환 주소(return address)라고 합니다.

서브프로그램 연결

호출과 반환은 한 묶음

부른 쪽을 호출자(caller), 불린 쪽을 피호출자(called subprogram)라고 합니다. 호출과 반환을 합쳐 서브프로그램 연결(subprogram linkage)이라고 부릅니다.

호출 때

부를 때 챙길 것 넷, 그리고 하나

호출은 실행할 곳만 옮기는 일이 아닙니다. 값을 넘기고, 칸을 받고, 하던 일을 적어 둡니다. 다섯째는 함수 안에 함수를 두는 언어에서만 필요합니다. 7편에서 봅니다.

제어(control)는 지금 실행하는 자리입니다. 지역 변수는 함수 안에서 선언한 변수입니다.

반환 때

돌아올 때 할 일 넷

반환할 때도 할 일이 넷입니다. 돌려줄 값을 넘기고, 지역 변수의 칸을 돌려주고, 실행 상태를 되돌린 뒤, 제어를 부른 쪽에 돌려줍니다.

값을 돌려주는 매개변수는 8강에서 본, 불린 쪽에서 바꾼 값이 부른 쪽 변수에 전해지는 매개변수입니다.

대칭

한 일을 거꾸로 되돌립니다

호출 때 한 일과 반환 때 하는 일은 짝을 이룹니다. 받은 칸은 돌려주고, 저장한 상태는 되돌리고, 넘긴 제어는 돌려받습니다.

이 강의 순서

쉬운 경우부터 하나씩 더합니다

이 강은 호출과 반환이 메모리에서 실제로 어떻게 이루어지는지를 봅니다. 조건이 가장 단순한 서브프로그램에서 시작해 하나씩 더해 갑니다.

다음 편

먼저 조건이 가장 단순한 서브프로그램입니다

2편호출 한 번에 무엇을 기억해 둘까? 9강 목록