더북(TheBook)

그림 5-2는 스택 프레임을 test() 함수를 호출한 main() 함수까지 확장한 모습입니다.

067

그림 5-2 main() 함수의 스택 프레임(call by value)


스택 프레임은 스택 메모리 공간에 생기는데 이 공간 역시 스택 자료 구조의 작동 원리를 따릅니다(9장 4절에서 자세히 다룹니다). main() 함수가 먼저 실행되므로 스택 프레임이 먼저 쌓이고 main() 함수 안에서 호출한 test() 함수의 스택 프레임은 그 위에 쌓입니다. test() 함수가 모두 실행되면 test() 함수의 스택 프레임이 먼저 사라지고 이후에 프로그램이 종료되면 main() 함수의 스택 프레임이 사라집니다.

지금부터 이번 절에서 가장 중요한 이야기를 하겠습니다. 그림 5-2를 보면 main() 함수의 스택 프레임 공간에도 ab가 있고 test() 함수의 스택 프레임 공간에도 ab가 있습니다. 이 공간은 서로 독립된 공간입니다. 코드 5-7의 #5에서 인자를 전달할 때 main() 함수 스택 프레임의 지역 변수인 ab를 전달한 것 같지만, 실제로는 test() 함수 스택 프레임의 지역 변수 ab에 값만 ‘복사’한 것입니다. 이처럼 인자를 전달할 때 값을 복사해 전달하는 경우를 값에 의한 전달(call by value)이라고 합니다. 말 그대로 값을 복사할 뿐입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.