값 전달 방식의 이해 — 값에 의한 호출(Call by Value)의 원본과 복사본, 그 한계 | 기초 C언어 9.2.3

기초 C언어Chapter 09 함수 › Section 02 사용자 정의 함수의 유형과 값 전달

9.2.3 값 전달 방식의 이해

인수로 쓴 변수의 값만 복사해 매개변수에 넘기는 값에 의한 호출. 함수 안에서 매개변수를 바꿔도 원본 변수가 그대로인 결과와 그 한계.

교재 수록 위치
교재
『기초 C언어』 · 이은상 · 부크크 · 364쪽
단원
Chapter 09 함수 › Section 02 사용자 정의 함수의 유형과 값 전달 › 값 전달 방식의 이해
쪽수
287p ~ 289p3쪽
세부 내용
값에 의한 호출(Call by Value)의 개념 · 복사기 비유 · CODE 9.13 · 값에 의한 호출의 한계
학습 목표
값에 의한 호출에서 원본 변수와 매개변수가 별개임을 이해하고, 그 장점과 한계를 설명함
영상 목차 · 원하는 부분부터 보기
  1. 0:00 · 강의 소개와 값 복사
  2. 0:57 · 값에 의한 호출의 원리
  3. 2:57 · add_ten 예제
  4. 5:33 · 같은 이름의 서로 다른 변수
  5. 6:47 · 값에 의한 호출의 한계
  6. 7:40 · 9장 함수 정리

01복사되어 전달된다는 말교재 287p

  • 9.1.2의 add(5, 3) 동작 순서에서 ‘a에는 5, b에는 3이 복사되어 전달’된다는 표현을 이미 지나옴. 이번 편은 그 복사의 뜻을 다룸.
  • 함수에 변수를 인수로 전달할 때 C언어가 기본으로 사용하는 방식이 값에 의한 호출(Call by Value). 인수가 매개변수로 넘어갈 때 실제로 건너가는 것이 무엇인지 확인.

02값만 복사하여 매개변수에 전달교재 287p

  • 함수를 호출할 때 인수로 사용된 변수의 값(value)만 복사하여 함수의 매개변수에 전달하는 방식.
  • 원본 변수 자체를 넘기는 것이 아니라 그 값을 복사한 복사본을 전달하는 것과 같음. 원본은 인수로 쓴 변수, 복사본은 함수의 매개변수.

원본에서 복사본으로 건너가는 것은 값뿐

호출하는 순간 원본 변수의 값이 매개변수에 복사되고, 그 뒤로 두 변수는 서로 연결되지 않음. 매개변수에 무엇을 대입해도 호출한 쪽 변수에는 전달되지 않음.

03복사기로 견준 값에 의한 호출교재 287~288p

비유실제
원본 문서main 함수의 원본 변수
복사본복사된 값을 받은 매개변수
복사본에 낙서·수정매개변수 값 변경
작업 후 복사본 파기함수 종료와 함께 매개변수 소멸
  • main 함수는 원본 문서를 직접 넘기지 않고 복사본만 건넴. 호출된 함수가 복사본을 마음껏 고쳐도 원본 문서는 손상되지 않은 채 그대로 남음.

04CODE 9.13 — 10을 더하는 add_ten교재 288p

  • main의 a를 5로 초기화한 뒤 add_ten(a)를 호출. add_ten 함수는 매개변수 a에 10을 더해 출력.
  • 실행 결과는 호출 전 5 · 함수 안 15 · 호출 후 5의 세 줄. 함수 안에서 바뀐 값이 main의 a에는 반영되지 않음. 상세 코드는 교재 CODE 9.13에서 확인.

이름이 같아도 별개의 변수

main의 a와 add_ten의 매개변수 a는 이름만 같은 서로 다른 변수. 호출할 때 건너가는 것은 값 5뿐이므로 매개변수 a가 15가 되어도 원본 a는 5로 유지됨.

05두 변수 a의 값 변화교재 288~289p

단계main의 a (원본)add_ten의 a (복사본)
호출 직후55
a = a + 10; 실행 후515
add_ten 종료 후5메모리에서 사라짐
  • 복사본인 매개변수는 함수가 끝나면 메모리에서 사라짐. 실행 흐름이 main으로 돌아왔을 때 원본 a는 아무런 영향을 받지 않은 채 여전히 5.

06값에 의한 호출의 한계와 9장 마무리교재 289p

  • 값에 의한 호출로는 함수 안에서 함수 밖의 원본 변수 값을 직접 수정할 수 없음.
  • 데이터를 안전하게 보호한다는 장점이 있지만, 두 변수의 값을 서로 바꾸는 swap 함수처럼 원본을 직접 바꿔야 하는 경우에는 한계로 작용. 함수 안에서 두 복사본을 맞바꿔도 main의 두 원본은 그대로.
  • 보호와 한계는 같은 성질의 양면. 원본에 손대지 못하므로 안전하고, 같은 까닭으로 원본을 바꾸는 일도 맡길 수 없음.
  • 9장에서는 함수의 기초, 정의와 호출, 실행 흐름과 함수 원형, 반환값과 매개변수, 네 가지 유형, 값에 의한 호출을 학습. 원본을 직접 바꾸는 방법인 포인터와 주소에 의한 호출은 다음 10장에서 다룸.

이 절의 핵심 정리

  1. C언어는 함수에 변수를 인수로 전달할 때 기본적으로 값에 의한 호출 방식을 사용한다.
  2. 값에 의한 호출은 인수로 쓴 변수의 값만 복사하여 매개변수에 전달한다.
  3. 매개변수는 원본 변수와 이름이 같아도 별개의 변수이며 함수가 끝나면 메모리에서 사라진다.
  4. 함수 안에서 매개변수 값을 바꿔도 main 함수의 원본 변수 값은 변하지 않는다.
  5. 값에 의한 호출로는 함수 밖의 원본 변수를 직접 수정할 수 없으며, 이 한계는 10장의 포인터로 이어진다.
강의 자료9.2.3 값 전달 방식의 이해 1 / 11

번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다
다음 절 · 10.1.1 포인터의 기초 교재 296p~298p — 주소를 저장하는 변수, 포인터로 가는 첫걸음 ↗

더 자세한 내용은 교재에서

이 글은 『기초 C언어』 287p~289p의 내용을 강의 영상에 맞춰 핵심만 간추린 요약입니다. 각 개념의 상세한 설명과 예제, 실습 코드, 임용시험 기출문제 풀이는 교재에서 다루고 있습니다.

댓글

이 블로그의 인기 게시물

2007년 국가직 9급 기계일반 기출문제 풀이

기계공작법 연습문제 130문 | 임용 기출 영상·교재 쪽수 바로가기